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

struct  S3221C4_nt  {
  int s3221c4f0[2];
  void  mf3221c4(); // _ZN10S3221C4_nt8mf3221c4Ev
};
//SIG(-1 S3221C4_nt) C1{ m Fi[2]}


void  S3221C4_nt ::mf3221c4(){}

//skip512 S3221C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3221C3_nt  {
  int s3221c3f0;
  __tsi64 s3221c3f1;
  void *s3221c3f2[4];
  int s3221c3f3[2];
  void *s3221c3f4;
  ::S3221C4_nt s3221c3f5;
  void *s3221c3f6[2];
  virtual  ~S3221C3_nt(); // _ZN10S3221C3_ntD1Ev
  virtual void  v4(); // _ZN10S3221C3_nt2v4Ev
  virtual void  v5(); // _ZN10S3221C3_nt2v5Ev
  virtual void  v6(); // _ZN10S3221C3_nt2v6Ev
  virtual void  v7(); // _ZN10S3221C3_nt2v7Ev
  virtual void  v8(); // _ZN10S3221C3_nt2v8Ev
  virtual void  v9(); // _ZN10S3221C3_nt2v9Ev
  virtual void  v10(); // _ZN10S3221C3_nt3v10Ev
  virtual void  v11(); // _ZN10S3221C3_nt3v11Ev
  virtual void  v12(); // _ZN10S3221C3_nt3v12Ev
  virtual void  v13(); // _ZN10S3221C3_nt3v13Ev
  virtual void  v14(); // _ZN10S3221C3_nt3v14Ev
  virtual void  v15(); // _ZN10S3221C3_nt3v15Ev
  virtual void  v16(); // _ZN10S3221C3_nt3v16Ev
  virtual void  v17(); // _ZN10S3221C3_nt3v17Ev
  virtual void  v18(); // _ZN10S3221C3_nt3v18Ev
  virtual void  v19(); // _ZN10S3221C3_nt3v19Ev
  virtual void  v20(); // _ZN10S3221C3_nt3v20Ev
  virtual void  v21(); // _ZN10S3221C3_nt3v21Ev
  virtual void  v22(); // _ZN10S3221C3_nt3v22Ev
  virtual void  v23(); // _ZN10S3221C3_nt3v23Ev
  virtual void  v24(); // _ZN10S3221C3_nt3v24Ev
  virtual void  v25(); // _ZN10S3221C3_nt3v25Ev
  virtual void  v26(); // _ZN10S3221C3_nt3v26Ev
  virtual void  v27(); // _ZN10S3221C3_nt3v27Ev
  virtual void  v28(); // _ZN10S3221C3_nt3v28Ev
  virtual void  v29(); // _ZN10S3221C3_nt3v29Ev
  virtual void  v30(); // _ZN10S3221C3_nt3v30Ev
  virtual void  v31(); // _ZN10S3221C3_nt3v31Ev
  virtual void  v32(); // _ZN10S3221C3_nt3v32Ev
  virtual void  v33(); // _ZN10S3221C3_nt3v33Ev
  virtual void  v34(); // _ZN10S3221C3_nt3v34Ev
  virtual void  v35(); // _ZN10S3221C3_nt3v35Ev
  virtual void  v36(); // _ZN10S3221C3_nt3v36Ev
  virtual void  v37(); // _ZN10S3221C3_nt3v37Ev
  virtual void  v38(); // _ZN10S3221C3_nt3v38Ev
  virtual void  v39(); // _ZN10S3221C3_nt3v39Ev
  virtual void  v40(); // _ZN10S3221C3_nt3v40Ev
  virtual void  v41(); // _ZN10S3221C3_nt3v41Ev
  virtual void  v42(); // _ZN10S3221C3_nt3v42Ev
  virtual void  v43(); // _ZN10S3221C3_nt3v43Ev
  virtual void  v44(); // _ZN10S3221C3_nt3v44Ev
  virtual void  v45(); // _ZN10S3221C3_nt3v45Ev
  virtual void  v46(); // _ZN10S3221C3_nt3v46Ev
  virtual void  v47(); // _ZN10S3221C3_nt3v47Ev
  virtual void  v48(); // _ZN10S3221C3_nt3v48Ev
  virtual void  v49(); // _ZN10S3221C3_nt3v49Ev
  virtual void  v50(); // _ZN10S3221C3_nt3v50Ev
  virtual void  v51(); // _ZN10S3221C3_nt3v51Ev
  virtual void  v52(); // _ZN10S3221C3_nt3v52Ev
  virtual void  v53(); // _ZN10S3221C3_nt3v53Ev
  virtual void  v54(); // _ZN10S3221C3_nt3v54Ev
  virtual void  v55(); // _ZN10S3221C3_nt3v55Ev
  virtual void  v56(); // _ZN10S3221C3_nt3v56Ev
  virtual void  v57(); // _ZN10S3221C3_nt3v57Ev
  virtual void  v58(); // _ZN10S3221C3_nt3v58Ev
  virtual void  v59(); // _ZN10S3221C3_nt3v59Ev
  virtual void  v60(); // _ZN10S3221C3_nt3v60Ev
  virtual void  v61(); // _ZN10S3221C3_nt3v61Ev
  virtual void  v62(); // _ZN10S3221C3_nt3v62Ev
  virtual void  v63(); // _ZN10S3221C3_nt3v63Ev
  virtual void  v64(); // _ZN10S3221C3_nt3v64Ev
  virtual void  v65(); // _ZN10S3221C3_nt3v65Ev
  virtual void  v66(); // _ZN10S3221C3_nt3v66Ev
  virtual void  v67(); // _ZN10S3221C3_nt3v67Ev
  S3221C3_nt(); // tgen
};
//SIG(-1 S3221C3_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]}


 S3221C3_nt ::~S3221C3_nt(){ note_dtor("S3221C3_nt", this);}
void  S3221C3_nt ::v4(){vfunc_called(this, "_ZN10S3221C3_nt2v4Ev");}
void  S3221C3_nt ::v5(){vfunc_called(this, "_ZN10S3221C3_nt2v5Ev");}
void  S3221C3_nt ::v6(){vfunc_called(this, "_ZN10S3221C3_nt2v6Ev");}
void  S3221C3_nt ::v7(){vfunc_called(this, "_ZN10S3221C3_nt2v7Ev");}
void  S3221C3_nt ::v8(){vfunc_called(this, "_ZN10S3221C3_nt2v8Ev");}
void  S3221C3_nt ::v9(){vfunc_called(this, "_ZN10S3221C3_nt2v9Ev");}
void  S3221C3_nt ::v10(){vfunc_called(this, "_ZN10S3221C3_nt3v10Ev");}
void  S3221C3_nt ::v11(){vfunc_called(this, "_ZN10S3221C3_nt3v11Ev");}
void  S3221C3_nt ::v12(){vfunc_called(this, "_ZN10S3221C3_nt3v12Ev");}
void  S3221C3_nt ::v13(){vfunc_called(this, "_ZN10S3221C3_nt3v13Ev");}
void  S3221C3_nt ::v14(){vfunc_called(this, "_ZN10S3221C3_nt3v14Ev");}
void  S3221C3_nt ::v15(){vfunc_called(this, "_ZN10S3221C3_nt3v15Ev");}
void  S3221C3_nt ::v16(){vfunc_called(this, "_ZN10S3221C3_nt3v16Ev");}
void  S3221C3_nt ::v17(){vfunc_called(this, "_ZN10S3221C3_nt3v17Ev");}
void  S3221C3_nt ::v18(){vfunc_called(this, "_ZN10S3221C3_nt3v18Ev");}
void  S3221C3_nt ::v19(){vfunc_called(this, "_ZN10S3221C3_nt3v19Ev");}
void  S3221C3_nt ::v20(){vfunc_called(this, "_ZN10S3221C3_nt3v20Ev");}
void  S3221C3_nt ::v21(){vfunc_called(this, "_ZN10S3221C3_nt3v21Ev");}
void  S3221C3_nt ::v22(){vfunc_called(this, "_ZN10S3221C3_nt3v22Ev");}
void  S3221C3_nt ::v23(){vfunc_called(this, "_ZN10S3221C3_nt3v23Ev");}
void  S3221C3_nt ::v24(){vfunc_called(this, "_ZN10S3221C3_nt3v24Ev");}
void  S3221C3_nt ::v25(){vfunc_called(this, "_ZN10S3221C3_nt3v25Ev");}
void  S3221C3_nt ::v26(){vfunc_called(this, "_ZN10S3221C3_nt3v26Ev");}
void  S3221C3_nt ::v27(){vfunc_called(this, "_ZN10S3221C3_nt3v27Ev");}
void  S3221C3_nt ::v28(){vfunc_called(this, "_ZN10S3221C3_nt3v28Ev");}
void  S3221C3_nt ::v29(){vfunc_called(this, "_ZN10S3221C3_nt3v29Ev");}
void  S3221C3_nt ::v30(){vfunc_called(this, "_ZN10S3221C3_nt3v30Ev");}
void  S3221C3_nt ::v31(){vfunc_called(this, "_ZN10S3221C3_nt3v31Ev");}
void  S3221C3_nt ::v32(){vfunc_called(this, "_ZN10S3221C3_nt3v32Ev");}
void  S3221C3_nt ::v33(){vfunc_called(this, "_ZN10S3221C3_nt3v33Ev");}
void  S3221C3_nt ::v34(){vfunc_called(this, "_ZN10S3221C3_nt3v34Ev");}
void  S3221C3_nt ::v35(){vfunc_called(this, "_ZN10S3221C3_nt3v35Ev");}
void  S3221C3_nt ::v36(){vfunc_called(this, "_ZN10S3221C3_nt3v36Ev");}
void  S3221C3_nt ::v37(){vfunc_called(this, "_ZN10S3221C3_nt3v37Ev");}
void  S3221C3_nt ::v38(){vfunc_called(this, "_ZN10S3221C3_nt3v38Ev");}
void  S3221C3_nt ::v39(){vfunc_called(this, "_ZN10S3221C3_nt3v39Ev");}
void  S3221C3_nt ::v40(){vfunc_called(this, "_ZN10S3221C3_nt3v40Ev");}
void  S3221C3_nt ::v41(){vfunc_called(this, "_ZN10S3221C3_nt3v41Ev");}
void  S3221C3_nt ::v42(){vfunc_called(this, "_ZN10S3221C3_nt3v42Ev");}
void  S3221C3_nt ::v43(){vfunc_called(this, "_ZN10S3221C3_nt3v43Ev");}
void  S3221C3_nt ::v44(){vfunc_called(this, "_ZN10S3221C3_nt3v44Ev");}
void  S3221C3_nt ::v45(){vfunc_called(this, "_ZN10S3221C3_nt3v45Ev");}
void  S3221C3_nt ::v46(){vfunc_called(this, "_ZN10S3221C3_nt3v46Ev");}
void  S3221C3_nt ::v47(){vfunc_called(this, "_ZN10S3221C3_nt3v47Ev");}
void  S3221C3_nt ::v48(){vfunc_called(this, "_ZN10S3221C3_nt3v48Ev");}
void  S3221C3_nt ::v49(){vfunc_called(this, "_ZN10S3221C3_nt3v49Ev");}
void  S3221C3_nt ::v50(){vfunc_called(this, "_ZN10S3221C3_nt3v50Ev");}
void  S3221C3_nt ::v51(){vfunc_called(this, "_ZN10S3221C3_nt3v51Ev");}
void  S3221C3_nt ::v52(){vfunc_called(this, "_ZN10S3221C3_nt3v52Ev");}
void  S3221C3_nt ::v53(){vfunc_called(this, "_ZN10S3221C3_nt3v53Ev");}
void  S3221C3_nt ::v54(){vfunc_called(this, "_ZN10S3221C3_nt3v54Ev");}
void  S3221C3_nt ::v55(){vfunc_called(this, "_ZN10S3221C3_nt3v55Ev");}
void  S3221C3_nt ::v56(){vfunc_called(this, "_ZN10S3221C3_nt3v56Ev");}
void  S3221C3_nt ::v57(){vfunc_called(this, "_ZN10S3221C3_nt3v57Ev");}
void  S3221C3_nt ::v58(){vfunc_called(this, "_ZN10S3221C3_nt3v58Ev");}
void  S3221C3_nt ::v59(){vfunc_called(this, "_ZN10S3221C3_nt3v59Ev");}
void  S3221C3_nt ::v60(){vfunc_called(this, "_ZN10S3221C3_nt3v60Ev");}
void  S3221C3_nt ::v61(){vfunc_called(this, "_ZN10S3221C3_nt3v61Ev");}
void  S3221C3_nt ::v62(){vfunc_called(this, "_ZN10S3221C3_nt3v62Ev");}
void  S3221C3_nt ::v63(){vfunc_called(this, "_ZN10S3221C3_nt3v63Ev");}
void  S3221C3_nt ::v64(){vfunc_called(this, "_ZN10S3221C3_nt3v64Ev");}
void  S3221C3_nt ::v65(){vfunc_called(this, "_ZN10S3221C3_nt3v65Ev");}
void  S3221C3_nt ::v66(){vfunc_called(this, "_ZN10S3221C3_nt3v66Ev");}
void  S3221C3_nt ::v67(){vfunc_called(this, "_ZN10S3221C3_nt3v67Ev");}
S3221C3_nt ::S3221C3_nt(){ note_ctor("S3221C3_nt", this);} // tgen

//skip512 S3221C3_nt

#else // __cplusplus

extern void _ZN10S3221C3_ntC1Ev();
extern void _ZN10S3221C3_ntD1Ev();
Name_Map name_map_S3221C3_nt[] = {
  NSPAIR(_ZN10S3221C3_ntC1Ev),
  NSPAIR(_ZN10S3221C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3221C3_nt[];
extern void _ZN10S3221C3_ntD1Ev();
extern void _ZN10S3221C3_ntD0Ev();
extern void _ZN10S3221C3_nt2v4Ev();
extern void _ZN10S3221C3_nt2v5Ev();
extern void _ZN10S3221C3_nt2v6Ev();
extern void _ZN10S3221C3_nt2v7Ev();
extern void _ZN10S3221C3_nt2v8Ev();
extern void _ZN10S3221C3_nt2v9Ev();
extern void _ZN10S3221C3_nt3v10Ev();
extern void _ZN10S3221C3_nt3v11Ev();
extern void _ZN10S3221C3_nt3v12Ev();
extern void _ZN10S3221C3_nt3v13Ev();
extern void _ZN10S3221C3_nt3v14Ev();
extern void _ZN10S3221C3_nt3v15Ev();
extern void _ZN10S3221C3_nt3v16Ev();
extern void _ZN10S3221C3_nt3v17Ev();
extern void _ZN10S3221C3_nt3v18Ev();
extern void _ZN10S3221C3_nt3v19Ev();
extern void _ZN10S3221C3_nt3v20Ev();
extern void _ZN10S3221C3_nt3v21Ev();
extern void _ZN10S3221C3_nt3v22Ev();
extern void _ZN10S3221C3_nt3v23Ev();
extern void _ZN10S3221C3_nt3v24Ev();
extern void _ZN10S3221C3_nt3v25Ev();
extern void _ZN10S3221C3_nt3v26Ev();
extern void _ZN10S3221C3_nt3v27Ev();
extern void _ZN10S3221C3_nt3v28Ev();
extern void _ZN10S3221C3_nt3v29Ev();
extern void _ZN10S3221C3_nt3v30Ev();
extern void _ZN10S3221C3_nt3v31Ev();
extern void _ZN10S3221C3_nt3v32Ev();
extern void _ZN10S3221C3_nt3v33Ev();
extern void _ZN10S3221C3_nt3v34Ev();
extern void _ZN10S3221C3_nt3v35Ev();
extern void _ZN10S3221C3_nt3v36Ev();
extern void _ZN10S3221C3_nt3v37Ev();
extern void _ZN10S3221C3_nt3v38Ev();
extern void _ZN10S3221C3_nt3v39Ev();
extern void _ZN10S3221C3_nt3v40Ev();
extern void _ZN10S3221C3_nt3v41Ev();
extern void _ZN10S3221C3_nt3v42Ev();
extern void _ZN10S3221C3_nt3v43Ev();
extern void _ZN10S3221C3_nt3v44Ev();
extern void _ZN10S3221C3_nt3v45Ev();
extern void _ZN10S3221C3_nt3v46Ev();
extern void _ZN10S3221C3_nt3v47Ev();
extern void _ZN10S3221C3_nt3v48Ev();
extern void _ZN10S3221C3_nt3v49Ev();
extern void _ZN10S3221C3_nt3v50Ev();
extern void _ZN10S3221C3_nt3v51Ev();
extern void _ZN10S3221C3_nt3v52Ev();
extern void _ZN10S3221C3_nt3v53Ev();
extern void _ZN10S3221C3_nt3v54Ev();
extern void _ZN10S3221C3_nt3v55Ev();
extern void _ZN10S3221C3_nt3v56Ev();
extern void _ZN10S3221C3_nt3v57Ev();
extern void _ZN10S3221C3_nt3v58Ev();
extern void _ZN10S3221C3_nt3v59Ev();
extern void _ZN10S3221C3_nt3v60Ev();
extern void _ZN10S3221C3_nt3v61Ev();
extern void _ZN10S3221C3_nt3v62Ev();
extern void _ZN10S3221C3_nt3v63Ev();
extern void _ZN10S3221C3_nt3v64Ev();
extern void _ZN10S3221C3_nt3v65Ev();
extern void _ZN10S3221C3_nt3v66Ev();
extern void _ZN10S3221C3_nt3v67Ev();
static  VTBL_ENTRY vtc_S3221C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3221C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3221C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v67Ev,
};
extern VTBL_ENTRY _ZTI10S3221C3_nt[];
VTBL_ENTRY *P__ZTI10S3221C3_nt = _ZTI10S3221C3_nt; 
extern  VTBL_ENTRY _ZTV10S3221C3_nt[];
Class_Descriptor cd_S3221C3_nt = {  "S3221C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3221C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S3221C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3221C3_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  S3221C7_nt  {
  void *s3221c7f0;
  int s3221c7f1[2];
  void  mf3221c7(); // _ZN10S3221C7_nt8mf3221c7Ev
};
//SIG(-1 S3221C7_nt) C1{ m Fp Fi[2]}


void  S3221C7_nt ::mf3221c7(){}

//skip512 S3221C7_nt

#else // __cplusplus

Class_Descriptor cd_S3221C7_nt = {  "S3221C7_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  S3221C6_nt  : S3221C7_nt {
};
//SIG(-1 S3221C6_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S3221C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
static Base_Class bases_S3221C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3221C6_nt = {  "S3221C6_nt", // class name
  bases_S3221C6_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  S3221C5_nt  : S3221C6_nt {
};
//SIG(-1 S3221C5_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S3221C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
extern Class_Descriptor cd_S3221C6_nt;
static Base_Class bases_S3221C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3221C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S3221C8_nt  {
  int s3221c8f0;
  void  mf3221c8(); // _ZN10S3221C8_nt8mf3221c8Ev
};
//SIG(-1 S3221C8_nt) C1{ m Fi}


void  S3221C8_nt ::mf3221c8(){}

//skip512 S3221C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S3221C8_nt[];
VTBL_ENTRY *P__ZTI10S3221C8_nt = _ZTI10S3221C8_nt; 
Class_Descriptor cd_S3221C8_nt = {  "S3221C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI10S3221C8_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  S3221C12  : S3221C7_nt {
};
//SIG(-1 S3221C12) C1{ BC2{ m Fp Fi[2]}}



static void Test_S3221C12()
{
  extern Class_Descriptor cd_S3221C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3221C12, buf);
    S3221C12 &lv = *(new (buf) S3221C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3221C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3221C12)");
    check_base_class_offset(lv, (S3221C7_nt*), 0, "S3221C12");
    test_class_info(&lv, &cd_S3221C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3221C12(Test_S3221C12, "S3221C12", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
static Base_Class bases_S3221C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3221C12 = {  "S3221C12", // class name
  bases_S3221C12, 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  S3221C11  : S3221C12 {
};
//SIG(-1 S3221C11) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S3221C11()
{
  extern Class_Descriptor cd_S3221C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3221C11, buf);
    S3221C11 &lv = *(new (buf) S3221C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3221C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3221C11)");
    check_base_class_offset(lv, (S3221C7_nt*)(S3221C12*), 0, "S3221C11");
    check_base_class_offset(lv, (S3221C12*), 0, "S3221C11");
    test_class_info(&lv, &cd_S3221C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3221C11(Test_S3221C11, "S3221C11", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
extern Class_Descriptor cd_S3221C12;
static Base_Class bases_S3221C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3221C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3221C11 = {  "S3221C11", // class name
  bases_S3221C11, 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  S3221C13_nt  {
  int s3221c13f0[3];
  void  mf3221c13(); // _ZN11S3221C13_nt9mf3221c13Ev
};
//SIG(-1 S3221C13_nt) C1{ m Fi[3]}


void  S3221C13_nt ::mf3221c13(){}

//skip512 S3221C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S3221C18()
{
  extern Class_Descriptor cd_S3221C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3221C18, buf);
    S3221C18 &lv = *(new (buf) S3221C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3221C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3221C18)");
    check_base_class_offset(lv, (S3221C7_nt*), 0, "S3221C18");
    test_class_info(&lv, &cd_S3221C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3221C18(Test_S3221C18, "S3221C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
static Base_Class bases_S3221C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3221C18 = {  "S3221C18", // class name
  bases_S3221C18, 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  S3221C17  : S3221C18 {
};
//SIG(-1 S3221C17) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S3221C17()
{
  extern Class_Descriptor cd_S3221C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3221C17, buf);
    S3221C17 &lv = *(new (buf) S3221C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3221C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3221C17)");
    check_base_class_offset(lv, (S3221C7_nt*)(S3221C18*), 0, "S3221C17");
    check_base_class_offset(lv, (S3221C18*), 0, "S3221C17");
    test_class_info(&lv, &cd_S3221C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3221C17(Test_S3221C17, "S3221C17", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
extern Class_Descriptor cd_S3221C18;
static Base_Class bases_S3221C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3221C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3221C17 = {  "S3221C17", // class name
  bases_S3221C17, 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  S3221C2_nt  : S3221C3_nt {
  ::S3221C5_nt s3221c2f0;
  ::S3221C5_nt s3221c2f1;
  ::S3221C8_nt s3221c2f2;
  int s3221c2f3;
  char s3221c2f4[4];
  void *s3221c2f5[2];
  ::S3221C5_nt s3221c2f6;
  unsigned int s3221c2f7:1;
  unsigned int s3221c2f8:1;
  unsigned int s3221c2f9:1;
  unsigned int s3221c2f10:1;
  unsigned int s3221c2f11:1;
  unsigned int s3221c2f12:1;
  unsigned int s3221c2f13:1;
  unsigned int s3221c2f14:1;
  unsigned int s3221c2f15:1;
  unsigned int s3221c2f16:1;
  unsigned int s3221c2f17:1;
  unsigned int s3221c2f18:1;
  unsigned int s3221c2f19:1;
  unsigned int s3221c2f20:1;
  unsigned int s3221c2f21:1;
  unsigned int s3221c2f22:1;
  unsigned int s3221c2f23:1;
  unsigned int s3221c2f24:1;
  unsigned int s3221c2f25:1;
  unsigned int s3221c2f26:1;
  unsigned int s3221c2f27:1;
  unsigned int s3221c2f28:1;
  unsigned int s3221c2f29:1;
  unsigned int s3221c2f30:1;
  unsigned int s3221c2f31:1;
  unsigned int s3221c2f32:1;
  unsigned int s3221c2f33:1;
  unsigned int s3221c2f34:1;
  unsigned int s3221c2f35:1;
  unsigned int s3221c2f36:1;
  unsigned int s3221c2f37:1;
  unsigned int s3221c2f38:1;
  unsigned int s3221c2f39:1;
  unsigned int s3221c2f40:1;
  unsigned int s3221c2f41:1;
  unsigned int s3221c2f42:1;
  unsigned int s3221c2f43:1;
  unsigned int s3221c2f44:1;
  unsigned int s3221c2f45:1;
  unsigned int s3221c2f46:1;
  unsigned int s3221c2f47:1;
  unsigned int s3221c2f48:1;
  unsigned int s3221c2f49:1;
  unsigned int s3221c2f50:1;
  unsigned int s3221c2f51:1;
  unsigned int s3221c2f52:1;
  unsigned int s3221c2f53:1;
  unsigned int s3221c2f54:1;
  unsigned int s3221c2f55:1;
  unsigned int s3221c2f56:1;
  unsigned int s3221c2f57:1;
  unsigned int s3221c2f58:1;
  unsigned int s3221c2f59:1;
  unsigned int s3221c2f60:1;
  unsigned int s3221c2f61:1;
  unsigned int s3221c2f62:1;
  unsigned int s3221c2f63:1;
  unsigned int s3221c2f64:1;
  unsigned int s3221c2f65:1;
  unsigned int s3221c2f66:1;
  unsigned int s3221c2f67:1;
  unsigned int s3221c2f68:1;
  unsigned int s3221c2f69:1;
  unsigned int s3221c2f70:1;
  unsigned int s3221c2f71:1;
  unsigned int s3221c2f72:1;
  unsigned int s3221c2f73:1;
  unsigned int s3221c2f74:1;
  unsigned int s3221c2f75:1;
  unsigned int s3221c2f76:1;
  unsigned int s3221c2f77:1;
  unsigned int s3221c2f78:1;
  unsigned int s3221c2f79:1;
  unsigned int s3221c2f80:1;
  unsigned int s3221c2f81:1;
  unsigned int s3221c2f82:1;
  unsigned int s3221c2f83:1;
  int s3221c2f84[5];
  void *s3221c2f85[2];
  int s3221c2f86[3];
  ::S3221C4_nt s3221c2f87;
  ::S3221C4_nt s3221c2f88;
  ::S3221C4_nt s3221c2f89;
  ::S3221C11 s3221c2f90;
  ::S3221C11 s3221c2f91;
  int s3221c2f92;
  void *s3221c2f93[2];
  ::S3221C13_nt s3221c2f94;
  ::S3221C13_nt s3221c2f95;
  ::S3221C13_nt s3221c2f96;
  ::S3221C13_nt s3221c2f97;
  void *s3221c2f98;
  ::S3221C4_nt s3221c2f99;
  ::S3221C11 s3221c2f100;
  ::S3221C13_nt s3221c2f101;
  ::S3221C13_nt s3221c2f102;
  int s3221c2f103;
  ::S3221C13_nt s3221c2f104;
  ::S3221C13_nt s3221c2f105;
  void *s3221c2f106;
  int s3221c2f107;
  char s3221c2f108;
  ::S3221C13_nt s3221c2f109;
  ::S3221C13_nt s3221c2f110;
  void *s3221c2f111;
  int s3221c2f112;
  void *s3221c2f113;
  ::S3221C11 s3221c2f114;
  ::S3221C17 s3221c2f115;
  ::S3221C17 s3221c2f116;
  virtual  ~S3221C2_nt(); // _ZN10S3221C2_ntD1Ev
  virtual void  v68(); // _ZN10S3221C2_nt3v68Ev
  virtual void  v69(); // _ZN10S3221C2_nt3v69Ev
  virtual void  v70(); // _ZN10S3221C2_nt3v70Ev
  virtual void  v71(); // _ZN10S3221C2_nt3v71Ev
  virtual void  v72(); // _ZN10S3221C2_nt3v72Ev
  virtual void  v73(); // _ZN10S3221C2_nt3v73Ev
  virtual void  v74(); // _ZN10S3221C2_nt3v74Ev
  virtual void  v75(); // _ZN10S3221C2_nt3v75Ev
  virtual void  v76(); // _ZN10S3221C2_nt3v76Ev
  virtual void  v77(); // _ZN10S3221C2_nt3v77Ev
  virtual void  v78(); // _ZN10S3221C2_nt3v78Ev
  virtual void  v79(); // _ZN10S3221C2_nt3v79Ev
  virtual void  v80(); // _ZN10S3221C2_nt3v80Ev
  virtual void  v81(); // _ZN10S3221C2_nt3v81Ev
  virtual void  v82(); // _ZN10S3221C2_nt3v82Ev
  virtual void  v83(); // _ZN10S3221C2_nt3v83Ev
  virtual void  v84(); // _ZN10S3221C2_nt3v84Ev
  virtual void  v85(); // _ZN10S3221C2_nt3v85Ev
  virtual void  v86(); // _ZN10S3221C2_nt3v86Ev
  virtual void  v87(); // _ZN10S3221C2_nt3v87Ev
  virtual void  v88(); // _ZN10S3221C2_nt3v88Ev
  virtual void  v89(); // _ZN10S3221C2_nt3v89Ev
  virtual void  v90(); // _ZN10S3221C2_nt3v90Ev
  virtual void  v91(); // _ZN10S3221C2_nt3v91Ev
  virtual void  v92(); // _ZN10S3221C2_nt3v92Ev
  virtual void  v93(); // _ZN10S3221C2_nt3v93Ev
  virtual void  v94(); // _ZN10S3221C2_nt3v94Ev
  virtual void  v95(); // _ZN10S3221C2_nt3v95Ev
  virtual void  v96(); // _ZN10S3221C2_nt3v96Ev
  virtual void  v97(); // _ZN10S3221C2_nt3v97Ev
  virtual void  v98(); // _ZN10S3221C2_nt3v98Ev
  virtual void  v99(); // _ZN10S3221C2_nt3v99Ev
  virtual void  v100(); // _ZN10S3221C2_nt4v100Ev
  virtual void  v101(); // _ZN10S3221C2_nt4v101Ev
  virtual void  v102(); // _ZN10S3221C2_nt4v102Ev
  virtual void  v103(); // _ZN10S3221C2_nt4v103Ev
  virtual void  v104(); // _ZN10S3221C2_nt4v104Ev
  virtual void  v105(); // _ZN10S3221C2_nt4v105Ev
  virtual void  v106(); // _ZN10S3221C2_nt4v106Ev
  virtual void  v107(); // _ZN10S3221C2_nt4v107Ev
  virtual void  v108(); // _ZN10S3221C2_nt4v108Ev
  virtual void  v109(); // _ZN10S3221C2_nt4v109Ev
  virtual void  v110(); // _ZN10S3221C2_nt4v110Ev
  virtual void  v111(); // _ZN10S3221C2_nt4v111Ev
  virtual void  v112(); // _ZN10S3221C2_nt4v112Ev
  virtual void  v113(); // _ZN10S3221C2_nt4v113Ev
  virtual void  v114(); // _ZN10S3221C2_nt4v114Ev
  virtual void  v115(); // _ZN10S3221C2_nt4v115Ev
  virtual void  v116(); // _ZN10S3221C2_nt4v116Ev
  virtual void  v117(); // _ZN10S3221C2_nt4v117Ev
  virtual void  v118(); // _ZN10S3221C2_nt4v118Ev
  virtual void  v119(); // _ZN10S3221C2_nt4v119Ev
  virtual void  v120(); // _ZN10S3221C2_nt4v120Ev
  virtual void  v121(); // _ZN10S3221C2_nt4v121Ev
  virtual void  v122(); // _ZN10S3221C2_nt4v122Ev
  virtual void  v123(); // _ZN10S3221C2_nt4v123Ev
  virtual void  v124(); // _ZN10S3221C2_nt4v124Ev
  virtual void  v125(); // _ZN10S3221C2_nt4v125Ev
  virtual void  v126(); // _ZN10S3221C2_nt4v126Ev
  virtual void  v127(); // _ZN10S3221C2_nt4v127Ev
  virtual void  v128(); // _ZN10S3221C2_nt4v128Ev
  virtual void  v129(); // _ZN10S3221C2_nt4v129Ev
  virtual void  v130(); // _ZN10S3221C2_nt4v130Ev
  virtual void  v131(); // _ZN10S3221C2_nt4v131Ev
  virtual void  v132(); // _ZN10S3221C2_nt4v132Ev
  virtual void  v133(); // _ZN10S3221C2_nt4v133Ev
  virtual void  v134(); // _ZN10S3221C2_nt4v134Ev
  virtual void  v135(); // _ZN10S3221C2_nt4v135Ev
  virtual void  v136(); // _ZN10S3221C2_nt4v136Ev
  virtual void  v137(); // _ZN10S3221C2_nt4v137Ev
  virtual void  v138(); // _ZN10S3221C2_nt4v138Ev
  virtual void  v139(); // _ZN10S3221C2_nt4v139Ev
  virtual void  v140(); // _ZN10S3221C2_nt4v140Ev
  virtual void  v141(); // _ZN10S3221C2_nt4v141Ev
  virtual void  v142(); // _ZN10S3221C2_nt4v142Ev
  virtual void  v143(); // _ZN10S3221C2_nt4v143Ev
  virtual void  v144(); // _ZN10S3221C2_nt4v144Ev
  virtual void  v145(); // _ZN10S3221C2_nt4v145Ev
  virtual void  v146(); // _ZN10S3221C2_nt4v146Ev
  virtual void  v147(); // _ZN10S3221C2_nt4v147Ev
  virtual void  v148(); // _ZN10S3221C2_nt4v148Ev
  virtual void  v149(); // _ZN10S3221C2_nt4v149Ev
  virtual void  v150(); // _ZN10S3221C2_nt4v150Ev
  virtual void  v151(); // _ZN10S3221C2_nt4v151Ev
  virtual void  v152(); // _ZN10S3221C2_nt4v152Ev
  virtual void  v153(); // _ZN10S3221C2_nt4v153Ev
  virtual void  v154(); // _ZN10S3221C2_nt4v154Ev
  virtual void  v155(); // _ZN10S3221C2_nt4v155Ev
  virtual void  v156(); // _ZN10S3221C2_nt4v156Ev
  virtual void  v157(); // _ZN10S3221C2_nt4v157Ev
  virtual void  v158(); // _ZN10S3221C2_nt4v158Ev
  virtual void  v159(); // _ZN10S3221C2_nt4v159Ev
  virtual void  v160(); // _ZN10S3221C2_nt4v160Ev
  virtual void  v161(); // _ZN10S3221C2_nt4v161Ev
  virtual void  v162(); // _ZN10S3221C2_nt4v162Ev
  virtual void  v163(); // _ZN10S3221C2_nt4v163Ev
  virtual void  v164(); // _ZN10S3221C2_nt4v164Ev
  virtual void  v165(); // _ZN10S3221C2_nt4v165Ev
  virtual void  v166(); // _ZN10S3221C2_nt4v166Ev
  virtual void  v167(); // _ZN10S3221C2_nt4v167Ev
  virtual void  v168(); // _ZN10S3221C2_nt4v168Ev
  virtual void  v169(); // _ZN10S3221C2_nt4v169Ev
  virtual void  v170(); // _ZN10S3221C2_nt4v170Ev
  virtual void  v171(); // _ZN10S3221C2_nt4v171Ev
  virtual void  v172(); // _ZN10S3221C2_nt4v172Ev
  virtual void  v173(); // _ZN10S3221C2_nt4v173Ev
  virtual void  v174(); // _ZN10S3221C2_nt4v174Ev
  virtual void  v175(); // _ZN10S3221C2_nt4v175Ev
  virtual void  v176(); // _ZN10S3221C2_nt4v176Ev
  virtual void  v177(); // _ZN10S3221C2_nt4v177Ev
  virtual void  v178(); // _ZN10S3221C2_nt4v178Ev
  virtual void  v179(); // _ZN10S3221C2_nt4v179Ev
  virtual void  v180(); // _ZN10S3221C2_nt4v180Ev
  virtual void  v181(); // _ZN10S3221C2_nt4v181Ev
  virtual void  v182(); // _ZN10S3221C2_nt4v182Ev
  virtual void  v183(); // _ZN10S3221C2_nt4v183Ev
  virtual void  v184(); // _ZN10S3221C2_nt4v184Ev
  virtual void  v185(); // _ZN10S3221C2_nt4v185Ev
  virtual void  v186(); // _ZN10S3221C2_nt4v186Ev
  virtual void  v187(); // _ZN10S3221C2_nt4v187Ev
  virtual void  v188(); // _ZN10S3221C2_nt4v188Ev
  virtual void  v189(); // _ZN10S3221C2_nt4v189Ev
  virtual void  v190(); // _ZN10S3221C2_nt4v190Ev
  virtual void  v191(); // _ZN10S3221C2_nt4v191Ev
  virtual void  v192(); // _ZN10S3221C2_nt4v192Ev
  virtual void  v193(); // _ZN10S3221C2_nt4v193Ev
  virtual void  v194(); // _ZN10S3221C2_nt4v194Ev
  virtual void  v195(); // _ZN10S3221C2_nt4v195Ev
  virtual void  v196(); // _ZN10S3221C2_nt4v196Ev
  virtual void  v197(); // _ZN10S3221C2_nt4v197Ev
  virtual void  v198(); // _ZN10S3221C2_nt4v198Ev
  virtual void  v199(); // _ZN10S3221C2_nt4v199Ev
  virtual void  v200(); // _ZN10S3221C2_nt4v200Ev
  virtual void  v201(); // _ZN10S3221C2_nt4v201Ev
  virtual void  v202(); // _ZN10S3221C2_nt4v202Ev
  virtual void  v203(); // _ZN10S3221C2_nt4v203Ev
  virtual void  v204(); // _ZN10S3221C2_nt4v204Ev
  virtual void  v205(); // _ZN10S3221C2_nt4v205Ev
  virtual void  v206(); // _ZN10S3221C2_nt4v206Ev
  virtual void  v207(); // _ZN10S3221C2_nt4v207Ev
  virtual void  v208(); // _ZN10S3221C2_nt4v208Ev
  virtual void  v209(); // _ZN10S3221C2_nt4v209Ev
  virtual void  v210(); // _ZN10S3221C2_nt4v210Ev
  S3221C2_nt(); // tgen
};
//SIG(-1 S3221C2_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}


 S3221C2_nt ::~S3221C2_nt(){ note_dtor("S3221C2_nt", this);}
void  S3221C2_nt ::v68(){vfunc_called(this, "_ZN10S3221C2_nt3v68Ev");}
void  S3221C2_nt ::v69(){vfunc_called(this, "_ZN10S3221C2_nt3v69Ev");}
void  S3221C2_nt ::v70(){vfunc_called(this, "_ZN10S3221C2_nt3v70Ev");}
void  S3221C2_nt ::v71(){vfunc_called(this, "_ZN10S3221C2_nt3v71Ev");}
void  S3221C2_nt ::v72(){vfunc_called(this, "_ZN10S3221C2_nt3v72Ev");}
void  S3221C2_nt ::v73(){vfunc_called(this, "_ZN10S3221C2_nt3v73Ev");}
void  S3221C2_nt ::v74(){vfunc_called(this, "_ZN10S3221C2_nt3v74Ev");}
void  S3221C2_nt ::v75(){vfunc_called(this, "_ZN10S3221C2_nt3v75Ev");}
void  S3221C2_nt ::v76(){vfunc_called(this, "_ZN10S3221C2_nt3v76Ev");}
void  S3221C2_nt ::v77(){vfunc_called(this, "_ZN10S3221C2_nt3v77Ev");}
void  S3221C2_nt ::v78(){vfunc_called(this, "_ZN10S3221C2_nt3v78Ev");}
void  S3221C2_nt ::v79(){vfunc_called(this, "_ZN10S3221C2_nt3v79Ev");}
void  S3221C2_nt ::v80(){vfunc_called(this, "_ZN10S3221C2_nt3v80Ev");}
void  S3221C2_nt ::v81(){vfunc_called(this, "_ZN10S3221C2_nt3v81Ev");}
void  S3221C2_nt ::v82(){vfunc_called(this, "_ZN10S3221C2_nt3v82Ev");}
void  S3221C2_nt ::v83(){vfunc_called(this, "_ZN10S3221C2_nt3v83Ev");}
void  S3221C2_nt ::v84(){vfunc_called(this, "_ZN10S3221C2_nt3v84Ev");}
void  S3221C2_nt ::v85(){vfunc_called(this, "_ZN10S3221C2_nt3v85Ev");}
void  S3221C2_nt ::v86(){vfunc_called(this, "_ZN10S3221C2_nt3v86Ev");}
void  S3221C2_nt ::v87(){vfunc_called(this, "_ZN10S3221C2_nt3v87Ev");}
void  S3221C2_nt ::v88(){vfunc_called(this, "_ZN10S3221C2_nt3v88Ev");}
void  S3221C2_nt ::v89(){vfunc_called(this, "_ZN10S3221C2_nt3v89Ev");}
void  S3221C2_nt ::v90(){vfunc_called(this, "_ZN10S3221C2_nt3v90Ev");}
void  S3221C2_nt ::v91(){vfunc_called(this, "_ZN10S3221C2_nt3v91Ev");}
void  S3221C2_nt ::v92(){vfunc_called(this, "_ZN10S3221C2_nt3v92Ev");}
void  S3221C2_nt ::v93(){vfunc_called(this, "_ZN10S3221C2_nt3v93Ev");}
void  S3221C2_nt ::v94(){vfunc_called(this, "_ZN10S3221C2_nt3v94Ev");}
void  S3221C2_nt ::v95(){vfunc_called(this, "_ZN10S3221C2_nt3v95Ev");}
void  S3221C2_nt ::v96(){vfunc_called(this, "_ZN10S3221C2_nt3v96Ev");}
void  S3221C2_nt ::v97(){vfunc_called(this, "_ZN10S3221C2_nt3v97Ev");}
void  S3221C2_nt ::v98(){vfunc_called(this, "_ZN10S3221C2_nt3v98Ev");}
void  S3221C2_nt ::v99(){vfunc_called(this, "_ZN10S3221C2_nt3v99Ev");}
void  S3221C2_nt ::v100(){vfunc_called(this, "_ZN10S3221C2_nt4v100Ev");}
void  S3221C2_nt ::v101(){vfunc_called(this, "_ZN10S3221C2_nt4v101Ev");}
void  S3221C2_nt ::v102(){vfunc_called(this, "_ZN10S3221C2_nt4v102Ev");}
void  S3221C2_nt ::v103(){vfunc_called(this, "_ZN10S3221C2_nt4v103Ev");}
void  S3221C2_nt ::v104(){vfunc_called(this, "_ZN10S3221C2_nt4v104Ev");}
void  S3221C2_nt ::v105(){vfunc_called(this, "_ZN10S3221C2_nt4v105Ev");}
void  S3221C2_nt ::v106(){vfunc_called(this, "_ZN10S3221C2_nt4v106Ev");}
void  S3221C2_nt ::v107(){vfunc_called(this, "_ZN10S3221C2_nt4v107Ev");}
void  S3221C2_nt ::v108(){vfunc_called(this, "_ZN10S3221C2_nt4v108Ev");}
void  S3221C2_nt ::v109(){vfunc_called(this, "_ZN10S3221C2_nt4v109Ev");}
void  S3221C2_nt ::v110(){vfunc_called(this, "_ZN10S3221C2_nt4v110Ev");}
void  S3221C2_nt ::v111(){vfunc_called(this, "_ZN10S3221C2_nt4v111Ev");}
void  S3221C2_nt ::v112(){vfunc_called(this, "_ZN10S3221C2_nt4v112Ev");}
void  S3221C2_nt ::v113(){vfunc_called(this, "_ZN10S3221C2_nt4v113Ev");}
void  S3221C2_nt ::v114(){vfunc_called(this, "_ZN10S3221C2_nt4v114Ev");}
void  S3221C2_nt ::v115(){vfunc_called(this, "_ZN10S3221C2_nt4v115Ev");}
void  S3221C2_nt ::v116(){vfunc_called(this, "_ZN10S3221C2_nt4v116Ev");}
void  S3221C2_nt ::v117(){vfunc_called(this, "_ZN10S3221C2_nt4v117Ev");}
void  S3221C2_nt ::v118(){vfunc_called(this, "_ZN10S3221C2_nt4v118Ev");}
void  S3221C2_nt ::v119(){vfunc_called(this, "_ZN10S3221C2_nt4v119Ev");}
void  S3221C2_nt ::v120(){vfunc_called(this, "_ZN10S3221C2_nt4v120Ev");}
void  S3221C2_nt ::v121(){vfunc_called(this, "_ZN10S3221C2_nt4v121Ev");}
void  S3221C2_nt ::v122(){vfunc_called(this, "_ZN10S3221C2_nt4v122Ev");}
void  S3221C2_nt ::v123(){vfunc_called(this, "_ZN10S3221C2_nt4v123Ev");}
void  S3221C2_nt ::v124(){vfunc_called(this, "_ZN10S3221C2_nt4v124Ev");}
void  S3221C2_nt ::v125(){vfunc_called(this, "_ZN10S3221C2_nt4v125Ev");}
void  S3221C2_nt ::v126(){vfunc_called(this, "_ZN10S3221C2_nt4v126Ev");}
void  S3221C2_nt ::v127(){vfunc_called(this, "_ZN10S3221C2_nt4v127Ev");}
void  S3221C2_nt ::v128(){vfunc_called(this, "_ZN10S3221C2_nt4v128Ev");}
void  S3221C2_nt ::v129(){vfunc_called(this, "_ZN10S3221C2_nt4v129Ev");}
void  S3221C2_nt ::v130(){vfunc_called(this, "_ZN10S3221C2_nt4v130Ev");}
void  S3221C2_nt ::v131(){vfunc_called(this, "_ZN10S3221C2_nt4v131Ev");}
void  S3221C2_nt ::v132(){vfunc_called(this, "_ZN10S3221C2_nt4v132Ev");}
void  S3221C2_nt ::v133(){vfunc_called(this, "_ZN10S3221C2_nt4v133Ev");}
void  S3221C2_nt ::v134(){vfunc_called(this, "_ZN10S3221C2_nt4v134Ev");}
void  S3221C2_nt ::v135(){vfunc_called(this, "_ZN10S3221C2_nt4v135Ev");}
void  S3221C2_nt ::v136(){vfunc_called(this, "_ZN10S3221C2_nt4v136Ev");}
void  S3221C2_nt ::v137(){vfunc_called(this, "_ZN10S3221C2_nt4v137Ev");}
void  S3221C2_nt ::v138(){vfunc_called(this, "_ZN10S3221C2_nt4v138Ev");}
void  S3221C2_nt ::v139(){vfunc_called(this, "_ZN10S3221C2_nt4v139Ev");}
void  S3221C2_nt ::v140(){vfunc_called(this, "_ZN10S3221C2_nt4v140Ev");}
void  S3221C2_nt ::v141(){vfunc_called(this, "_ZN10S3221C2_nt4v141Ev");}
void  S3221C2_nt ::v142(){vfunc_called(this, "_ZN10S3221C2_nt4v142Ev");}
void  S3221C2_nt ::v143(){vfunc_called(this, "_ZN10S3221C2_nt4v143Ev");}
void  S3221C2_nt ::v144(){vfunc_called(this, "_ZN10S3221C2_nt4v144Ev");}
void  S3221C2_nt ::v145(){vfunc_called(this, "_ZN10S3221C2_nt4v145Ev");}
void  S3221C2_nt ::v146(){vfunc_called(this, "_ZN10S3221C2_nt4v146Ev");}
void  S3221C2_nt ::v147(){vfunc_called(this, "_ZN10S3221C2_nt4v147Ev");}
void  S3221C2_nt ::v148(){vfunc_called(this, "_ZN10S3221C2_nt4v148Ev");}
void  S3221C2_nt ::v149(){vfunc_called(this, "_ZN10S3221C2_nt4v149Ev");}
void  S3221C2_nt ::v150(){vfunc_called(this, "_ZN10S3221C2_nt4v150Ev");}
void  S3221C2_nt ::v151(){vfunc_called(this, "_ZN10S3221C2_nt4v151Ev");}
void  S3221C2_nt ::v152(){vfunc_called(this, "_ZN10S3221C2_nt4v152Ev");}
void  S3221C2_nt ::v153(){vfunc_called(this, "_ZN10S3221C2_nt4v153Ev");}
void  S3221C2_nt ::v154(){vfunc_called(this, "_ZN10S3221C2_nt4v154Ev");}
void  S3221C2_nt ::v155(){vfunc_called(this, "_ZN10S3221C2_nt4v155Ev");}
void  S3221C2_nt ::v156(){vfunc_called(this, "_ZN10S3221C2_nt4v156Ev");}
void  S3221C2_nt ::v157(){vfunc_called(this, "_ZN10S3221C2_nt4v157Ev");}
void  S3221C2_nt ::v158(){vfunc_called(this, "_ZN10S3221C2_nt4v158Ev");}
void  S3221C2_nt ::v159(){vfunc_called(this, "_ZN10S3221C2_nt4v159Ev");}
void  S3221C2_nt ::v160(){vfunc_called(this, "_ZN10S3221C2_nt4v160Ev");}
void  S3221C2_nt ::v161(){vfunc_called(this, "_ZN10S3221C2_nt4v161Ev");}
void  S3221C2_nt ::v162(){vfunc_called(this, "_ZN10S3221C2_nt4v162Ev");}
void  S3221C2_nt ::v163(){vfunc_called(this, "_ZN10S3221C2_nt4v163Ev");}
void  S3221C2_nt ::v164(){vfunc_called(this, "_ZN10S3221C2_nt4v164Ev");}
void  S3221C2_nt ::v165(){vfunc_called(this, "_ZN10S3221C2_nt4v165Ev");}
void  S3221C2_nt ::v166(){vfunc_called(this, "_ZN10S3221C2_nt4v166Ev");}
void  S3221C2_nt ::v167(){vfunc_called(this, "_ZN10S3221C2_nt4v167Ev");}
void  S3221C2_nt ::v168(){vfunc_called(this, "_ZN10S3221C2_nt4v168Ev");}
void  S3221C2_nt ::v169(){vfunc_called(this, "_ZN10S3221C2_nt4v169Ev");}
void  S3221C2_nt ::v170(){vfunc_called(this, "_ZN10S3221C2_nt4v170Ev");}
void  S3221C2_nt ::v171(){vfunc_called(this, "_ZN10S3221C2_nt4v171Ev");}
void  S3221C2_nt ::v172(){vfunc_called(this, "_ZN10S3221C2_nt4v172Ev");}
void  S3221C2_nt ::v173(){vfunc_called(this, "_ZN10S3221C2_nt4v173Ev");}
void  S3221C2_nt ::v174(){vfunc_called(this, "_ZN10S3221C2_nt4v174Ev");}
void  S3221C2_nt ::v175(){vfunc_called(this, "_ZN10S3221C2_nt4v175Ev");}
void  S3221C2_nt ::v176(){vfunc_called(this, "_ZN10S3221C2_nt4v176Ev");}
void  S3221C2_nt ::v177(){vfunc_called(this, "_ZN10S3221C2_nt4v177Ev");}
void  S3221C2_nt ::v178(){vfunc_called(this, "_ZN10S3221C2_nt4v178Ev");}
void  S3221C2_nt ::v179(){vfunc_called(this, "_ZN10S3221C2_nt4v179Ev");}
void  S3221C2_nt ::v180(){vfunc_called(this, "_ZN10S3221C2_nt4v180Ev");}
void  S3221C2_nt ::v181(){vfunc_called(this, "_ZN10S3221C2_nt4v181Ev");}
void  S3221C2_nt ::v182(){vfunc_called(this, "_ZN10S3221C2_nt4v182Ev");}
void  S3221C2_nt ::v183(){vfunc_called(this, "_ZN10S3221C2_nt4v183Ev");}
void  S3221C2_nt ::v184(){vfunc_called(this, "_ZN10S3221C2_nt4v184Ev");}
void  S3221C2_nt ::v185(){vfunc_called(this, "_ZN10S3221C2_nt4v185Ev");}
void  S3221C2_nt ::v186(){vfunc_called(this, "_ZN10S3221C2_nt4v186Ev");}
void  S3221C2_nt ::v187(){vfunc_called(this, "_ZN10S3221C2_nt4v187Ev");}
void  S3221C2_nt ::v188(){vfunc_called(this, "_ZN10S3221C2_nt4v188Ev");}
void  S3221C2_nt ::v189(){vfunc_called(this, "_ZN10S3221C2_nt4v189Ev");}
void  S3221C2_nt ::v190(){vfunc_called(this, "_ZN10S3221C2_nt4v190Ev");}
void  S3221C2_nt ::v191(){vfunc_called(this, "_ZN10S3221C2_nt4v191Ev");}
void  S3221C2_nt ::v192(){vfunc_called(this, "_ZN10S3221C2_nt4v192Ev");}
void  S3221C2_nt ::v193(){vfunc_called(this, "_ZN10S3221C2_nt4v193Ev");}
void  S3221C2_nt ::v194(){vfunc_called(this, "_ZN10S3221C2_nt4v194Ev");}
void  S3221C2_nt ::v195(){vfunc_called(this, "_ZN10S3221C2_nt4v195Ev");}
void  S3221C2_nt ::v196(){vfunc_called(this, "_ZN10S3221C2_nt4v196Ev");}
void  S3221C2_nt ::v197(){vfunc_called(this, "_ZN10S3221C2_nt4v197Ev");}
void  S3221C2_nt ::v198(){vfunc_called(this, "_ZN10S3221C2_nt4v198Ev");}
void  S3221C2_nt ::v199(){vfunc_called(this, "_ZN10S3221C2_nt4v199Ev");}
void  S3221C2_nt ::v200(){vfunc_called(this, "_ZN10S3221C2_nt4v200Ev");}
void  S3221C2_nt ::v201(){vfunc_called(this, "_ZN10S3221C2_nt4v201Ev");}
void  S3221C2_nt ::v202(){vfunc_called(this, "_ZN10S3221C2_nt4v202Ev");}
void  S3221C2_nt ::v203(){vfunc_called(this, "_ZN10S3221C2_nt4v203Ev");}
void  S3221C2_nt ::v204(){vfunc_called(this, "_ZN10S3221C2_nt4v204Ev");}
void  S3221C2_nt ::v205(){vfunc_called(this, "_ZN10S3221C2_nt4v205Ev");}
void  S3221C2_nt ::v206(){vfunc_called(this, "_ZN10S3221C2_nt4v206Ev");}
void  S3221C2_nt ::v207(){vfunc_called(this, "_ZN10S3221C2_nt4v207Ev");}
void  S3221C2_nt ::v208(){vfunc_called(this, "_ZN10S3221C2_nt4v208Ev");}
void  S3221C2_nt ::v209(){vfunc_called(this, "_ZN10S3221C2_nt4v209Ev");}
void  S3221C2_nt ::v210(){vfunc_called(this, "_ZN10S3221C2_nt4v210Ev");}
S3221C2_nt ::S3221C2_nt(){ note_ctor("S3221C2_nt", this);} // tgen

//skip512 S3221C2_nt

#else // __cplusplus

extern void _ZN10S3221C2_ntC1Ev();
extern void _ZN10S3221C2_ntD1Ev();
Name_Map name_map_S3221C2_nt[] = {
  NSPAIR(_ZN10S3221C2_ntC1Ev),
  NSPAIR(_ZN10S3221C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C3_nt;
extern VTBL_ENTRY _ZTI10S3221C3_nt[];
extern  VTBL_ENTRY _ZTV10S3221C3_nt[];
static Base_Class bases_S3221C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3221C2_nt[];
extern void _ZN10S3221C2_ntD1Ev();
extern void _ZN10S3221C2_ntD0Ev();
extern void _ZN10S3221C3_nt2v4Ev();
extern void _ZN10S3221C3_nt2v5Ev();
extern void _ZN10S3221C3_nt2v6Ev();
extern void _ZN10S3221C3_nt2v7Ev();
extern void _ZN10S3221C3_nt2v8Ev();
extern void _ZN10S3221C3_nt2v9Ev();
extern void _ZN10S3221C3_nt3v10Ev();
extern void _ZN10S3221C3_nt3v11Ev();
extern void _ZN10S3221C3_nt3v12Ev();
extern void _ZN10S3221C3_nt3v13Ev();
extern void _ZN10S3221C3_nt3v14Ev();
extern void _ZN10S3221C3_nt3v15Ev();
extern void _ZN10S3221C3_nt3v16Ev();
extern void _ZN10S3221C3_nt3v17Ev();
extern void _ZN10S3221C3_nt3v18Ev();
extern void _ZN10S3221C3_nt3v19Ev();
extern void _ZN10S3221C3_nt3v20Ev();
extern void _ZN10S3221C3_nt3v21Ev();
extern void _ZN10S3221C3_nt3v22Ev();
extern void _ZN10S3221C3_nt3v23Ev();
extern void _ZN10S3221C3_nt3v24Ev();
extern void _ZN10S3221C3_nt3v25Ev();
extern void _ZN10S3221C3_nt3v26Ev();
extern void _ZN10S3221C3_nt3v27Ev();
extern void _ZN10S3221C3_nt3v28Ev();
extern void _ZN10S3221C3_nt3v29Ev();
extern void _ZN10S3221C3_nt3v30Ev();
extern void _ZN10S3221C3_nt3v31Ev();
extern void _ZN10S3221C3_nt3v32Ev();
extern void _ZN10S3221C3_nt3v33Ev();
extern void _ZN10S3221C3_nt3v34Ev();
extern void _ZN10S3221C3_nt3v35Ev();
extern void _ZN10S3221C3_nt3v36Ev();
extern void _ZN10S3221C3_nt3v37Ev();
extern void _ZN10S3221C3_nt3v38Ev();
extern void _ZN10S3221C3_nt3v39Ev();
extern void _ZN10S3221C3_nt3v40Ev();
extern void _ZN10S3221C3_nt3v41Ev();
extern void _ZN10S3221C3_nt3v42Ev();
extern void _ZN10S3221C3_nt3v43Ev();
extern void _ZN10S3221C3_nt3v44Ev();
extern void _ZN10S3221C3_nt3v45Ev();
extern void _ZN10S3221C3_nt3v46Ev();
extern void _ZN10S3221C3_nt3v47Ev();
extern void _ZN10S3221C3_nt3v48Ev();
extern void _ZN10S3221C3_nt3v49Ev();
extern void _ZN10S3221C3_nt3v50Ev();
extern void _ZN10S3221C3_nt3v51Ev();
extern void _ZN10S3221C3_nt3v52Ev();
extern void _ZN10S3221C3_nt3v53Ev();
extern void _ZN10S3221C3_nt3v54Ev();
extern void _ZN10S3221C3_nt3v55Ev();
extern void _ZN10S3221C3_nt3v56Ev();
extern void _ZN10S3221C3_nt3v57Ev();
extern void _ZN10S3221C3_nt3v58Ev();
extern void _ZN10S3221C3_nt3v59Ev();
extern void _ZN10S3221C3_nt3v60Ev();
extern void _ZN10S3221C3_nt3v61Ev();
extern void _ZN10S3221C3_nt3v62Ev();
extern void _ZN10S3221C3_nt3v63Ev();
extern void _ZN10S3221C3_nt3v64Ev();
extern void _ZN10S3221C3_nt3v65Ev();
extern void _ZN10S3221C3_nt3v66Ev();
extern void _ZN10S3221C3_nt3v67Ev();
extern void _ZN10S3221C2_nt3v68Ev();
extern void _ZN10S3221C2_nt3v69Ev();
extern void _ZN10S3221C2_nt3v70Ev();
extern void _ZN10S3221C2_nt3v71Ev();
extern void _ZN10S3221C2_nt3v72Ev();
extern void _ZN10S3221C2_nt3v73Ev();
extern void _ZN10S3221C2_nt3v74Ev();
extern void _ZN10S3221C2_nt3v75Ev();
extern void _ZN10S3221C2_nt3v76Ev();
extern void _ZN10S3221C2_nt3v77Ev();
extern void _ZN10S3221C2_nt3v78Ev();
extern void _ZN10S3221C2_nt3v79Ev();
extern void _ZN10S3221C2_nt3v80Ev();
extern void _ZN10S3221C2_nt3v81Ev();
extern void _ZN10S3221C2_nt3v82Ev();
extern void _ZN10S3221C2_nt3v83Ev();
extern void _ZN10S3221C2_nt3v84Ev();
extern void _ZN10S3221C2_nt3v85Ev();
extern void _ZN10S3221C2_nt3v86Ev();
extern void _ZN10S3221C2_nt3v87Ev();
extern void _ZN10S3221C2_nt3v88Ev();
extern void _ZN10S3221C2_nt3v89Ev();
extern void _ZN10S3221C2_nt3v90Ev();
extern void _ZN10S3221C2_nt3v91Ev();
extern void _ZN10S3221C2_nt3v92Ev();
extern void _ZN10S3221C2_nt3v93Ev();
extern void _ZN10S3221C2_nt3v94Ev();
extern void _ZN10S3221C2_nt3v95Ev();
extern void _ZN10S3221C2_nt3v96Ev();
extern void _ZN10S3221C2_nt3v97Ev();
extern void _ZN10S3221C2_nt3v98Ev();
extern void _ZN10S3221C2_nt3v99Ev();
extern void _ZN10S3221C2_nt4v100Ev();
extern void _ZN10S3221C2_nt4v101Ev();
extern void _ZN10S3221C2_nt4v102Ev();
extern void _ZN10S3221C2_nt4v103Ev();
extern void _ZN10S3221C2_nt4v104Ev();
extern void _ZN10S3221C2_nt4v105Ev();
extern void _ZN10S3221C2_nt4v106Ev();
extern void _ZN10S3221C2_nt4v107Ev();
extern void _ZN10S3221C2_nt4v108Ev();
extern void _ZN10S3221C2_nt4v109Ev();
extern void _ZN10S3221C2_nt4v110Ev();
extern void _ZN10S3221C2_nt4v111Ev();
extern void _ZN10S3221C2_nt4v112Ev();
extern void _ZN10S3221C2_nt4v113Ev();
extern void _ZN10S3221C2_nt4v114Ev();
extern void _ZN10S3221C2_nt4v115Ev();
extern void _ZN10S3221C2_nt4v116Ev();
extern void _ZN10S3221C2_nt4v117Ev();
extern void _ZN10S3221C2_nt4v118Ev();
extern void _ZN10S3221C2_nt4v119Ev();
extern void _ZN10S3221C2_nt4v120Ev();
extern void _ZN10S3221C2_nt4v121Ev();
extern void _ZN10S3221C2_nt4v122Ev();
extern void _ZN10S3221C2_nt4v123Ev();
extern void _ZN10S3221C2_nt4v124Ev();
extern void _ZN10S3221C2_nt4v125Ev();
extern void _ZN10S3221C2_nt4v126Ev();
extern void _ZN10S3221C2_nt4v127Ev();
extern void _ZN10S3221C2_nt4v128Ev();
extern void _ZN10S3221C2_nt4v129Ev();
extern void _ZN10S3221C2_nt4v130Ev();
extern void _ZN10S3221C2_nt4v131Ev();
extern void _ZN10S3221C2_nt4v132Ev();
extern void _ZN10S3221C2_nt4v133Ev();
extern void _ZN10S3221C2_nt4v134Ev();
extern void _ZN10S3221C2_nt4v135Ev();
extern void _ZN10S3221C2_nt4v136Ev();
extern void _ZN10S3221C2_nt4v137Ev();
extern void _ZN10S3221C2_nt4v138Ev();
extern void _ZN10S3221C2_nt4v139Ev();
extern void _ZN10S3221C2_nt4v140Ev();
extern void _ZN10S3221C2_nt4v141Ev();
extern void _ZN10S3221C2_nt4v142Ev();
extern void _ZN10S3221C2_nt4v143Ev();
extern void _ZN10S3221C2_nt4v144Ev();
extern void _ZN10S3221C2_nt4v145Ev();
extern void _ZN10S3221C2_nt4v146Ev();
extern void _ZN10S3221C2_nt4v147Ev();
extern void _ZN10S3221C2_nt4v148Ev();
extern void _ZN10S3221C2_nt4v149Ev();
extern void _ZN10S3221C2_nt4v150Ev();
extern void _ZN10S3221C2_nt4v151Ev();
extern void _ZN10S3221C2_nt4v152Ev();
extern void _ZN10S3221C2_nt4v153Ev();
extern void _ZN10S3221C2_nt4v154Ev();
extern void _ZN10S3221C2_nt4v155Ev();
extern void _ZN10S3221C2_nt4v156Ev();
extern void _ZN10S3221C2_nt4v157Ev();
extern void _ZN10S3221C2_nt4v158Ev();
extern void _ZN10S3221C2_nt4v159Ev();
extern void _ZN10S3221C2_nt4v160Ev();
extern void _ZN10S3221C2_nt4v161Ev();
extern void _ZN10S3221C2_nt4v162Ev();
extern void _ZN10S3221C2_nt4v163Ev();
extern void _ZN10S3221C2_nt4v164Ev();
extern void _ZN10S3221C2_nt4v165Ev();
extern void _ZN10S3221C2_nt4v166Ev();
extern void _ZN10S3221C2_nt4v167Ev();
extern void _ZN10S3221C2_nt4v168Ev();
extern void _ZN10S3221C2_nt4v169Ev();
extern void _ZN10S3221C2_nt4v170Ev();
extern void _ZN10S3221C2_nt4v171Ev();
extern void _ZN10S3221C2_nt4v172Ev();
extern void _ZN10S3221C2_nt4v173Ev();
extern void _ZN10S3221C2_nt4v174Ev();
extern void _ZN10S3221C2_nt4v175Ev();
extern void _ZN10S3221C2_nt4v176Ev();
extern void _ZN10S3221C2_nt4v177Ev();
extern void _ZN10S3221C2_nt4v178Ev();
extern void _ZN10S3221C2_nt4v179Ev();
extern void _ZN10S3221C2_nt4v180Ev();
extern void _ZN10S3221C2_nt4v181Ev();
extern void _ZN10S3221C2_nt4v182Ev();
extern void _ZN10S3221C2_nt4v183Ev();
extern void _ZN10S3221C2_nt4v184Ev();
extern void _ZN10S3221C2_nt4v185Ev();
extern void _ZN10S3221C2_nt4v186Ev();
extern void _ZN10S3221C2_nt4v187Ev();
extern void _ZN10S3221C2_nt4v188Ev();
extern void _ZN10S3221C2_nt4v189Ev();
extern void _ZN10S3221C2_nt4v190Ev();
extern void _ZN10S3221C2_nt4v191Ev();
extern void _ZN10S3221C2_nt4v192Ev();
extern void _ZN10S3221C2_nt4v193Ev();
extern void _ZN10S3221C2_nt4v194Ev();
extern void _ZN10S3221C2_nt4v195Ev();
extern void _ZN10S3221C2_nt4v196Ev();
extern void _ZN10S3221C2_nt4v197Ev();
extern void _ZN10S3221C2_nt4v198Ev();
extern void _ZN10S3221C2_nt4v199Ev();
extern void _ZN10S3221C2_nt4v200Ev();
extern void _ZN10S3221C2_nt4v201Ev();
extern void _ZN10S3221C2_nt4v202Ev();
extern void _ZN10S3221C2_nt4v203Ev();
extern void _ZN10S3221C2_nt4v204Ev();
extern void _ZN10S3221C2_nt4v205Ev();
extern void _ZN10S3221C2_nt4v206Ev();
extern void _ZN10S3221C2_nt4v207Ev();
extern void _ZN10S3221C2_nt4v208Ev();
extern void _ZN10S3221C2_nt4v209Ev();
extern void _ZN10S3221C2_nt4v210Ev();
static  VTBL_ENTRY vtc_S3221C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3221C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3221C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v210Ev,
};
extern VTBL_ENTRY _ZTI10S3221C2_nt[];
VTBL_ENTRY *P__ZTI10S3221C2_nt = _ZTI10S3221C2_nt; 
extern  VTBL_ENTRY _ZTV10S3221C2_nt[];
Class_Descriptor cd_S3221C2_nt = {  "S3221C2_nt", // class name
  bases_S3221C2_nt, 1,
  &(vtc_S3221C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI10S3221C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3221C2_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  S3221C1  : S3221C2_nt {
  void *s3221c1f0;
  unsigned int s3221c1f1:1;
  virtual  ~S3221C1(); // _ZN7S3221C1D1Ev
  virtual void  v1(); // _ZN7S3221C12v1Ev
  virtual void  v2(); // _ZN7S3221C12v2Ev
  virtual void  v3(); // _ZN7S3221C12v3Ev
  S3221C1(); // tgen
};
//SIG(1 S3221C1) 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]} vd 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 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 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 Fp Fi:1}


 S3221C1 ::~S3221C1(){ note_dtor("S3221C1", this);}
void  S3221C1 ::v1(){vfunc_called(this, "_ZN7S3221C12v1Ev");}
void  S3221C1 ::v2(){vfunc_called(this, "_ZN7S3221C12v2Ev");}
void  S3221C1 ::v3(){vfunc_called(this, "_ZN7S3221C12v3Ev");}
S3221C1 ::S3221C1(){ note_ctor("S3221C1", this);} // tgen

static void Test_S3221C1()
{
  extern Class_Descriptor cd_S3221C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(74,112)];
    init_test(&cd_S3221C1, buf);
    S3221C1 *dp, &lv = *(dp=new (buf) S3221C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(584,444), "sizeof(S3221C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3221C1)");
    check_base_class_offset(lv, (S3221C3_nt*)(S3221C2_nt*), 0, "S3221C1");
    check_base_class_offset(lv, (S3221C2_nt*), 0, "S3221C1");
    check_field_offset(lv, s3221c1f0, ABISELECT(568,436), "S3221C1.s3221c1f0");
    set_bf_and_test(lv, s3221c1f1, ABISELECT(576,440), 0, 1, 1, "S3221C1");
    test_class_info(&lv, &cd_S3221C1);
    dp->~S3221C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3221C1(Test_S3221C1, "S3221C1", ABISELECT(584,444));

#else // __cplusplus

extern void _ZN7S3221C1C1Ev();
extern void _ZN7S3221C1D1Ev();
Name_Map name_map_S3221C1[] = {
  NSPAIR(_ZN7S3221C1C1Ev),
  NSPAIR(_ZN7S3221C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C3_nt;
extern VTBL_ENTRY _ZTI10S3221C3_nt[];
extern  VTBL_ENTRY _ZTV10S3221C3_nt[];
extern Class_Descriptor cd_S3221C2_nt;
extern VTBL_ENTRY _ZTI10S3221C2_nt[];
extern  VTBL_ENTRY _ZTV10S3221C2_nt[];
static Base_Class bases_S3221C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3221C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3221C1[];
extern void _ZN7S3221C1D1Ev();
extern void _ZN7S3221C1D0Ev();
extern void _ZN10S3221C3_nt2v4Ev();
extern void _ZN10S3221C3_nt2v5Ev();
extern void _ZN10S3221C3_nt2v6Ev();
extern void _ZN10S3221C3_nt2v7Ev();
extern void _ZN10S3221C3_nt2v8Ev();
extern void _ZN10S3221C3_nt2v9Ev();
extern void _ZN10S3221C3_nt3v10Ev();
extern void _ZN10S3221C3_nt3v11Ev();
extern void _ZN10S3221C3_nt3v12Ev();
extern void _ZN10S3221C3_nt3v13Ev();
extern void _ZN10S3221C3_nt3v14Ev();
extern void _ZN10S3221C3_nt3v15Ev();
extern void _ZN10S3221C3_nt3v16Ev();
extern void _ZN10S3221C3_nt3v17Ev();
extern void _ZN10S3221C3_nt3v18Ev();
extern void _ZN10S3221C3_nt3v19Ev();
extern void _ZN10S3221C3_nt3v20Ev();
extern void _ZN10S3221C3_nt3v21Ev();
extern void _ZN10S3221C3_nt3v22Ev();
extern void _ZN10S3221C3_nt3v23Ev();
extern void _ZN10S3221C3_nt3v24Ev();
extern void _ZN10S3221C3_nt3v25Ev();
extern void _ZN10S3221C3_nt3v26Ev();
extern void _ZN10S3221C3_nt3v27Ev();
extern void _ZN10S3221C3_nt3v28Ev();
extern void _ZN10S3221C3_nt3v29Ev();
extern void _ZN10S3221C3_nt3v30Ev();
extern void _ZN10S3221C3_nt3v31Ev();
extern void _ZN10S3221C3_nt3v32Ev();
extern void _ZN10S3221C3_nt3v33Ev();
extern void _ZN10S3221C3_nt3v34Ev();
extern void _ZN10S3221C3_nt3v35Ev();
extern void _ZN10S3221C3_nt3v36Ev();
extern void _ZN10S3221C3_nt3v37Ev();
extern void _ZN10S3221C3_nt3v38Ev();
extern void _ZN10S3221C3_nt3v39Ev();
extern void _ZN10S3221C3_nt3v40Ev();
extern void _ZN10S3221C3_nt3v41Ev();
extern void _ZN10S3221C3_nt3v42Ev();
extern void _ZN10S3221C3_nt3v43Ev();
extern void _ZN10S3221C3_nt3v44Ev();
extern void _ZN10S3221C3_nt3v45Ev();
extern void _ZN10S3221C3_nt3v46Ev();
extern void _ZN10S3221C3_nt3v47Ev();
extern void _ZN10S3221C3_nt3v48Ev();
extern void _ZN10S3221C3_nt3v49Ev();
extern void _ZN10S3221C3_nt3v50Ev();
extern void _ZN10S3221C3_nt3v51Ev();
extern void _ZN10S3221C3_nt3v52Ev();
extern void _ZN10S3221C3_nt3v53Ev();
extern void _ZN10S3221C3_nt3v54Ev();
extern void _ZN10S3221C3_nt3v55Ev();
extern void _ZN10S3221C3_nt3v56Ev();
extern void _ZN10S3221C3_nt3v57Ev();
extern void _ZN10S3221C3_nt3v58Ev();
extern void _ZN10S3221C3_nt3v59Ev();
extern void _ZN10S3221C3_nt3v60Ev();
extern void _ZN10S3221C3_nt3v61Ev();
extern void _ZN10S3221C3_nt3v62Ev();
extern void _ZN10S3221C3_nt3v63Ev();
extern void _ZN10S3221C3_nt3v64Ev();
extern void _ZN10S3221C3_nt3v65Ev();
extern void _ZN10S3221C3_nt3v66Ev();
extern void _ZN10S3221C3_nt3v67Ev();
extern void _ZN10S3221C2_nt3v68Ev();
extern void _ZN10S3221C2_nt3v69Ev();
extern void _ZN10S3221C2_nt3v70Ev();
extern void _ZN10S3221C2_nt3v71Ev();
extern void _ZN10S3221C2_nt3v72Ev();
extern void _ZN10S3221C2_nt3v73Ev();
extern void _ZN10S3221C2_nt3v74Ev();
extern void _ZN10S3221C2_nt3v75Ev();
extern void _ZN10S3221C2_nt3v76Ev();
extern void _ZN10S3221C2_nt3v77Ev();
extern void _ZN10S3221C2_nt3v78Ev();
extern void _ZN10S3221C2_nt3v79Ev();
extern void _ZN10S3221C2_nt3v80Ev();
extern void _ZN10S3221C2_nt3v81Ev();
extern void _ZN10S3221C2_nt3v82Ev();
extern void _ZN10S3221C2_nt3v83Ev();
extern void _ZN10S3221C2_nt3v84Ev();
extern void _ZN10S3221C2_nt3v85Ev();
extern void _ZN10S3221C2_nt3v86Ev();
extern void _ZN10S3221C2_nt3v87Ev();
extern void _ZN10S3221C2_nt3v88Ev();
extern void _ZN10S3221C2_nt3v89Ev();
extern void _ZN10S3221C2_nt3v90Ev();
extern void _ZN10S3221C2_nt3v91Ev();
extern void _ZN10S3221C2_nt3v92Ev();
extern void _ZN10S3221C2_nt3v93Ev();
extern void _ZN10S3221C2_nt3v94Ev();
extern void _ZN10S3221C2_nt3v95Ev();
extern void _ZN10S3221C2_nt3v96Ev();
extern void _ZN10S3221C2_nt3v97Ev();
extern void _ZN10S3221C2_nt3v98Ev();
extern void _ZN10S3221C2_nt3v99Ev();
extern void _ZN10S3221C2_nt4v100Ev();
extern void _ZN10S3221C2_nt4v101Ev();
extern void _ZN10S3221C2_nt4v102Ev();
extern void _ZN10S3221C2_nt4v103Ev();
extern void _ZN10S3221C2_nt4v104Ev();
extern void _ZN10S3221C2_nt4v105Ev();
extern void _ZN10S3221C2_nt4v106Ev();
extern void _ZN10S3221C2_nt4v107Ev();
extern void _ZN10S3221C2_nt4v108Ev();
extern void _ZN10S3221C2_nt4v109Ev();
extern void _ZN10S3221C2_nt4v110Ev();
extern void _ZN10S3221C2_nt4v111Ev();
extern void _ZN10S3221C2_nt4v112Ev();
extern void _ZN10S3221C2_nt4v113Ev();
extern void _ZN10S3221C2_nt4v114Ev();
extern void _ZN10S3221C2_nt4v115Ev();
extern void _ZN10S3221C2_nt4v116Ev();
extern void _ZN10S3221C2_nt4v117Ev();
extern void _ZN10S3221C2_nt4v118Ev();
extern void _ZN10S3221C2_nt4v119Ev();
extern void _ZN10S3221C2_nt4v120Ev();
extern void _ZN10S3221C2_nt4v121Ev();
extern void _ZN10S3221C2_nt4v122Ev();
extern void _ZN10S3221C2_nt4v123Ev();
extern void _ZN10S3221C2_nt4v124Ev();
extern void _ZN10S3221C2_nt4v125Ev();
extern void _ZN10S3221C2_nt4v126Ev();
extern void _ZN10S3221C2_nt4v127Ev();
extern void _ZN10S3221C2_nt4v128Ev();
extern void _ZN10S3221C2_nt4v129Ev();
extern void _ZN10S3221C2_nt4v130Ev();
extern void _ZN10S3221C2_nt4v131Ev();
extern void _ZN10S3221C2_nt4v132Ev();
extern void _ZN10S3221C2_nt4v133Ev();
extern void _ZN10S3221C2_nt4v134Ev();
extern void _ZN10S3221C2_nt4v135Ev();
extern void _ZN10S3221C2_nt4v136Ev();
extern void _ZN10S3221C2_nt4v137Ev();
extern void _ZN10S3221C2_nt4v138Ev();
extern void _ZN10S3221C2_nt4v139Ev();
extern void _ZN10S3221C2_nt4v140Ev();
extern void _ZN10S3221C2_nt4v141Ev();
extern void _ZN10S3221C2_nt4v142Ev();
extern void _ZN10S3221C2_nt4v143Ev();
extern void _ZN10S3221C2_nt4v144Ev();
extern void _ZN10S3221C2_nt4v145Ev();
extern void _ZN10S3221C2_nt4v146Ev();
extern void _ZN10S3221C2_nt4v147Ev();
extern void _ZN10S3221C2_nt4v148Ev();
extern void _ZN10S3221C2_nt4v149Ev();
extern void _ZN10S3221C2_nt4v150Ev();
extern void _ZN10S3221C2_nt4v151Ev();
extern void _ZN10S3221C2_nt4v152Ev();
extern void _ZN10S3221C2_nt4v153Ev();
extern void _ZN10S3221C2_nt4v154Ev();
extern void _ZN10S3221C2_nt4v155Ev();
extern void _ZN10S3221C2_nt4v156Ev();
extern void _ZN10S3221C2_nt4v157Ev();
extern void _ZN10S3221C2_nt4v158Ev();
extern void _ZN10S3221C2_nt4v159Ev();
extern void _ZN10S3221C2_nt4v160Ev();
extern void _ZN10S3221C2_nt4v161Ev();
extern void _ZN10S3221C2_nt4v162Ev();
extern void _ZN10S3221C2_nt4v163Ev();
extern void _ZN10S3221C2_nt4v164Ev();
extern void _ZN10S3221C2_nt4v165Ev();
extern void _ZN10S3221C2_nt4v166Ev();
extern void _ZN10S3221C2_nt4v167Ev();
extern void _ZN10S3221C2_nt4v168Ev();
extern void _ZN10S3221C2_nt4v169Ev();
extern void _ZN10S3221C2_nt4v170Ev();
extern void _ZN10S3221C2_nt4v171Ev();
extern void _ZN10S3221C2_nt4v172Ev();
extern void _ZN10S3221C2_nt4v173Ev();
extern void _ZN10S3221C2_nt4v174Ev();
extern void _ZN10S3221C2_nt4v175Ev();
extern void _ZN10S3221C2_nt4v176Ev();
extern void _ZN10S3221C2_nt4v177Ev();
extern void _ZN10S3221C2_nt4v178Ev();
extern void _ZN10S3221C2_nt4v179Ev();
extern void _ZN10S3221C2_nt4v180Ev();
extern void _ZN10S3221C2_nt4v181Ev();
extern void _ZN10S3221C2_nt4v182Ev();
extern void _ZN10S3221C2_nt4v183Ev();
extern void _ZN10S3221C2_nt4v184Ev();
extern void _ZN10S3221C2_nt4v185Ev();
extern void _ZN10S3221C2_nt4v186Ev();
extern void _ZN10S3221C2_nt4v187Ev();
extern void _ZN10S3221C2_nt4v188Ev();
extern void _ZN10S3221C2_nt4v189Ev();
extern void _ZN10S3221C2_nt4v190Ev();
extern void _ZN10S3221C2_nt4v191Ev();
extern void _ZN10S3221C2_nt4v192Ev();
extern void _ZN10S3221C2_nt4v193Ev();
extern void _ZN10S3221C2_nt4v194Ev();
extern void _ZN10S3221C2_nt4v195Ev();
extern void _ZN10S3221C2_nt4v196Ev();
extern void _ZN10S3221C2_nt4v197Ev();
extern void _ZN10S3221C2_nt4v198Ev();
extern void _ZN10S3221C2_nt4v199Ev();
extern void _ZN10S3221C2_nt4v200Ev();
extern void _ZN10S3221C2_nt4v201Ev();
extern void _ZN10S3221C2_nt4v202Ev();
extern void _ZN10S3221C2_nt4v203Ev();
extern void _ZN10S3221C2_nt4v204Ev();
extern void _ZN10S3221C2_nt4v205Ev();
extern void _ZN10S3221C2_nt4v206Ev();
extern void _ZN10S3221C2_nt4v207Ev();
extern void _ZN10S3221C2_nt4v208Ev();
extern void _ZN10S3221C2_nt4v209Ev();
extern void _ZN10S3221C2_nt4v210Ev();
extern void _ZN7S3221C12v1Ev();
extern void _ZN7S3221C12v2Ev();
extern void _ZN7S3221C12v3Ev();
static  VTBL_ENTRY vtc_S3221C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3221C1[0]),
  (VTBL_ENTRY)&_ZN7S3221C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3221C1D0Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3221C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S3221C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN7S3221C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3221C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3221C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3221C1[];
extern  VTBL_ENTRY _ZTV7S3221C1[];
Class_Descriptor cd_S3221C1 = {  "S3221C1", // class name
  bases_S3221C1, 2,
  &(vtc_S3221C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(584,444), // object size
  NSPAIRA(_ZTI7S3221C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3221C1),214, //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  S3168C3  {
  int s3168c3f0;
  __tsi64 s3168c3f1;
  void *s3168c3f2[4];
  int s3168c3f3[2];
  void *s3168c3f4;
  ::S3221C4_nt s3168c3f5;
  void *s3168c3f6[2];
  virtual  ~S3168C3(); // _ZN7S3168C3D1Ev
  virtual void  v3(); // _ZN7S3168C32v3Ev
  virtual void  v4(); // _ZN7S3168C32v4Ev
  virtual void  v5(); // _ZN7S3168C32v5Ev
  virtual void  v6(); // _ZN7S3168C32v6Ev
  virtual void  v7(); // _ZN7S3168C32v7Ev
  virtual void  v8(); // _ZN7S3168C32v8Ev
  virtual void  v9(); // _ZN7S3168C32v9Ev
  virtual void  v10(); // _ZN7S3168C33v10Ev
  virtual void  v11(); // _ZN7S3168C33v11Ev
  virtual void  v12(); // _ZN7S3168C33v12Ev
  virtual void  v13(); // _ZN7S3168C33v13Ev
  virtual void  v14(); // _ZN7S3168C33v14Ev
  virtual void  v15(); // _ZN7S3168C33v15Ev
  virtual void  v16(); // _ZN7S3168C33v16Ev
  virtual void  v17(); // _ZN7S3168C33v17Ev
  virtual void  v18(); // _ZN7S3168C33v18Ev
  virtual void  v19(); // _ZN7S3168C33v19Ev
  virtual void  v20(); // _ZN7S3168C33v20Ev
  virtual void  v21(); // _ZN7S3168C33v21Ev
  virtual void  v22(); // _ZN7S3168C33v22Ev
  virtual void  v23(); // _ZN7S3168C33v23Ev
  virtual void  v24(); // _ZN7S3168C33v24Ev
  virtual void  v25(); // _ZN7S3168C33v25Ev
  virtual void  v26(); // _ZN7S3168C33v26Ev
  virtual void  v27(); // _ZN7S3168C33v27Ev
  virtual void  v28(); // _ZN7S3168C33v28Ev
  virtual void  v29(); // _ZN7S3168C33v29Ev
  virtual void  v30(); // _ZN7S3168C33v30Ev
  virtual void  v31(); // _ZN7S3168C33v31Ev
  virtual void  v32(); // _ZN7S3168C33v32Ev
  virtual void  v33(); // _ZN7S3168C33v33Ev
  virtual void  v34(); // _ZN7S3168C33v34Ev
  virtual void  v35(); // _ZN7S3168C33v35Ev
  virtual void  v36(); // _ZN7S3168C33v36Ev
  virtual void  v37(); // _ZN7S3168C33v37Ev
  virtual void  v38(); // _ZN7S3168C33v38Ev
  virtual void  v39(); // _ZN7S3168C33v39Ev
  virtual void  v40(); // _ZN7S3168C33v40Ev
  virtual void  v41(); // _ZN7S3168C33v41Ev
  virtual void  v42(); // _ZN7S3168C33v42Ev
  virtual void  v43(); // _ZN7S3168C33v43Ev
  virtual void  v44(); // _ZN7S3168C33v44Ev
  virtual void  v45(); // _ZN7S3168C33v45Ev
  virtual void  v46(); // _ZN7S3168C33v46Ev
  virtual void  v47(); // _ZN7S3168C33v47Ev
  virtual void  v48(); // _ZN7S3168C33v48Ev
  virtual void  v49(); // _ZN7S3168C33v49Ev
  virtual void  v50(); // _ZN7S3168C33v50Ev
  virtual void  v51(); // _ZN7S3168C33v51Ev
  virtual void  v52(); // _ZN7S3168C33v52Ev
  virtual void  v53(); // _ZN7S3168C33v53Ev
  virtual void  v54(); // _ZN7S3168C33v54Ev
  virtual void  v55(); // _ZN7S3168C33v55Ev
  virtual void  v56(); // _ZN7S3168C33v56Ev
  virtual void  v57(); // _ZN7S3168C33v57Ev
  virtual void  v58(); // _ZN7S3168C33v58Ev
  virtual void  v59(); // _ZN7S3168C33v59Ev
  virtual void  v60(); // _ZN7S3168C33v60Ev
  virtual void  v61(); // _ZN7S3168C33v61Ev
  virtual void  v62(); // _ZN7S3168C33v62Ev
  virtual void  v63(); // _ZN7S3168C33v63Ev
  virtual void  v64(); // _ZN7S3168C33v64Ev
  virtual void  v65(); // _ZN7S3168C33v65Ev
  virtual void  v66(); // _ZN7S3168C33v66Ev
  S3168C3(); // tgen
};
//SIG(-1 S3168C3) 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]}


 S3168C3 ::~S3168C3(){ note_dtor("S3168C3", this);}
void  S3168C3 ::v3(){vfunc_called(this, "_ZN7S3168C32v3Ev");}
void  S3168C3 ::v4(){vfunc_called(this, "_ZN7S3168C32v4Ev");}
void  S3168C3 ::v5(){vfunc_called(this, "_ZN7S3168C32v5Ev");}
void  S3168C3 ::v6(){vfunc_called(this, "_ZN7S3168C32v6Ev");}
void  S3168C3 ::v7(){vfunc_called(this, "_ZN7S3168C32v7Ev");}
void  S3168C3 ::v8(){vfunc_called(this, "_ZN7S3168C32v8Ev");}
void  S3168C3 ::v9(){vfunc_called(this, "_ZN7S3168C32v9Ev");}
void  S3168C3 ::v10(){vfunc_called(this, "_ZN7S3168C33v10Ev");}
void  S3168C3 ::v11(){vfunc_called(this, "_ZN7S3168C33v11Ev");}
void  S3168C3 ::v12(){vfunc_called(this, "_ZN7S3168C33v12Ev");}
void  S3168C3 ::v13(){vfunc_called(this, "_ZN7S3168C33v13Ev");}
void  S3168C3 ::v14(){vfunc_called(this, "_ZN7S3168C33v14Ev");}
void  S3168C3 ::v15(){vfunc_called(this, "_ZN7S3168C33v15Ev");}
void  S3168C3 ::v16(){vfunc_called(this, "_ZN7S3168C33v16Ev");}
void  S3168C3 ::v17(){vfunc_called(this, "_ZN7S3168C33v17Ev");}
void  S3168C3 ::v18(){vfunc_called(this, "_ZN7S3168C33v18Ev");}
void  S3168C3 ::v19(){vfunc_called(this, "_ZN7S3168C33v19Ev");}
void  S3168C3 ::v20(){vfunc_called(this, "_ZN7S3168C33v20Ev");}
void  S3168C3 ::v21(){vfunc_called(this, "_ZN7S3168C33v21Ev");}
void  S3168C3 ::v22(){vfunc_called(this, "_ZN7S3168C33v22Ev");}
void  S3168C3 ::v23(){vfunc_called(this, "_ZN7S3168C33v23Ev");}
void  S3168C3 ::v24(){vfunc_called(this, "_ZN7S3168C33v24Ev");}
void  S3168C3 ::v25(){vfunc_called(this, "_ZN7S3168C33v25Ev");}
void  S3168C3 ::v26(){vfunc_called(this, "_ZN7S3168C33v26Ev");}
void  S3168C3 ::v27(){vfunc_called(this, "_ZN7S3168C33v27Ev");}
void  S3168C3 ::v28(){vfunc_called(this, "_ZN7S3168C33v28Ev");}
void  S3168C3 ::v29(){vfunc_called(this, "_ZN7S3168C33v29Ev");}
void  S3168C3 ::v30(){vfunc_called(this, "_ZN7S3168C33v30Ev");}
void  S3168C3 ::v31(){vfunc_called(this, "_ZN7S3168C33v31Ev");}
void  S3168C3 ::v32(){vfunc_called(this, "_ZN7S3168C33v32Ev");}
void  S3168C3 ::v33(){vfunc_called(this, "_ZN7S3168C33v33Ev");}
void  S3168C3 ::v34(){vfunc_called(this, "_ZN7S3168C33v34Ev");}
void  S3168C3 ::v35(){vfunc_called(this, "_ZN7S3168C33v35Ev");}
void  S3168C3 ::v36(){vfunc_called(this, "_ZN7S3168C33v36Ev");}
void  S3168C3 ::v37(){vfunc_called(this, "_ZN7S3168C33v37Ev");}
void  S3168C3 ::v38(){vfunc_called(this, "_ZN7S3168C33v38Ev");}
void  S3168C3 ::v39(){vfunc_called(this, "_ZN7S3168C33v39Ev");}
void  S3168C3 ::v40(){vfunc_called(this, "_ZN7S3168C33v40Ev");}
void  S3168C3 ::v41(){vfunc_called(this, "_ZN7S3168C33v41Ev");}
void  S3168C3 ::v42(){vfunc_called(this, "_ZN7S3168C33v42Ev");}
void  S3168C3 ::v43(){vfunc_called(this, "_ZN7S3168C33v43Ev");}
void  S3168C3 ::v44(){vfunc_called(this, "_ZN7S3168C33v44Ev");}
void  S3168C3 ::v45(){vfunc_called(this, "_ZN7S3168C33v45Ev");}
void  S3168C3 ::v46(){vfunc_called(this, "_ZN7S3168C33v46Ev");}
void  S3168C3 ::v47(){vfunc_called(this, "_ZN7S3168C33v47Ev");}
void  S3168C3 ::v48(){vfunc_called(this, "_ZN7S3168C33v48Ev");}
void  S3168C3 ::v49(){vfunc_called(this, "_ZN7S3168C33v49Ev");}
void  S3168C3 ::v50(){vfunc_called(this, "_ZN7S3168C33v50Ev");}
void  S3168C3 ::v51(){vfunc_called(this, "_ZN7S3168C33v51Ev");}
void  S3168C3 ::v52(){vfunc_called(this, "_ZN7S3168C33v52Ev");}
void  S3168C3 ::v53(){vfunc_called(this, "_ZN7S3168C33v53Ev");}
void  S3168C3 ::v54(){vfunc_called(this, "_ZN7S3168C33v54Ev");}
void  S3168C3 ::v55(){vfunc_called(this, "_ZN7S3168C33v55Ev");}
void  S3168C3 ::v56(){vfunc_called(this, "_ZN7S3168C33v56Ev");}
void  S3168C3 ::v57(){vfunc_called(this, "_ZN7S3168C33v57Ev");}
void  S3168C3 ::v58(){vfunc_called(this, "_ZN7S3168C33v58Ev");}
void  S3168C3 ::v59(){vfunc_called(this, "_ZN7S3168C33v59Ev");}
void  S3168C3 ::v60(){vfunc_called(this, "_ZN7S3168C33v60Ev");}
void  S3168C3 ::v61(){vfunc_called(this, "_ZN7S3168C33v61Ev");}
void  S3168C3 ::v62(){vfunc_called(this, "_ZN7S3168C33v62Ev");}
void  S3168C3 ::v63(){vfunc_called(this, "_ZN7S3168C33v63Ev");}
void  S3168C3 ::v64(){vfunc_called(this, "_ZN7S3168C33v64Ev");}
void  S3168C3 ::v65(){vfunc_called(this, "_ZN7S3168C33v65Ev");}
void  S3168C3 ::v66(){vfunc_called(this, "_ZN7S3168C33v66Ev");}
S3168C3 ::S3168C3(){ note_ctor("S3168C3", this);} // tgen

static void Test_S3168C3()
{
  extern Class_Descriptor cd_S3168C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3168C3, buf);
    S3168C3 *dp, &lv = *(dp=new (buf) S3168C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3168C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3168C3)");
    check_field_offset(lv, s3168c3f0, ABISELECT(8,4), "S3168C3.s3168c3f0");
    check_field_offset(lv, s3168c3f1, ABISELECT(16,8), "S3168C3.s3168c3f1");
    check_field_offset(lv, s3168c3f2, ABISELECT(24,16), "S3168C3.s3168c3f2");
    check_field_offset(lv, s3168c3f3, ABISELECT(56,32), "S3168C3.s3168c3f3");
    check_field_offset(lv, s3168c3f4, ABISELECT(64,40), "S3168C3.s3168c3f4");
    check_field_offset(lv, s3168c3f5, ABISELECT(72,44), "S3168C3.s3168c3f5");
    check_field_offset(lv, s3168c3f6, ABISELECT(80,52), "S3168C3.s3168c3f6");
    test_class_info(&lv, &cd_S3168C3);
    dp->~S3168C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3168C3(Test_S3168C3, "S3168C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3168C3C1Ev();
extern void _ZN7S3168C3D1Ev();
Name_Map name_map_S3168C3[] = {
  NSPAIR(_ZN7S3168C3C1Ev),
  NSPAIR(_ZN7S3168C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3168C3[];
extern void _ZN7S3168C3D1Ev();
extern void _ZN7S3168C3D0Ev();
extern void _ZN7S3168C32v3Ev();
extern void _ZN7S3168C32v4Ev();
extern void _ZN7S3168C32v5Ev();
extern void _ZN7S3168C32v6Ev();
extern void _ZN7S3168C32v7Ev();
extern void _ZN7S3168C32v8Ev();
extern void _ZN7S3168C32v9Ev();
extern void _ZN7S3168C33v10Ev();
extern void _ZN7S3168C33v11Ev();
extern void _ZN7S3168C33v12Ev();
extern void _ZN7S3168C33v13Ev();
extern void _ZN7S3168C33v14Ev();
extern void _ZN7S3168C33v15Ev();
extern void _ZN7S3168C33v16Ev();
extern void _ZN7S3168C33v17Ev();
extern void _ZN7S3168C33v18Ev();
extern void _ZN7S3168C33v19Ev();
extern void _ZN7S3168C33v20Ev();
extern void _ZN7S3168C33v21Ev();
extern void _ZN7S3168C33v22Ev();
extern void _ZN7S3168C33v23Ev();
extern void _ZN7S3168C33v24Ev();
extern void _ZN7S3168C33v25Ev();
extern void _ZN7S3168C33v26Ev();
extern void _ZN7S3168C33v27Ev();
extern void _ZN7S3168C33v28Ev();
extern void _ZN7S3168C33v29Ev();
extern void _ZN7S3168C33v30Ev();
extern void _ZN7S3168C33v31Ev();
extern void _ZN7S3168C33v32Ev();
extern void _ZN7S3168C33v33Ev();
extern void _ZN7S3168C33v34Ev();
extern void _ZN7S3168C33v35Ev();
extern void _ZN7S3168C33v36Ev();
extern void _ZN7S3168C33v37Ev();
extern void _ZN7S3168C33v38Ev();
extern void _ZN7S3168C33v39Ev();
extern void _ZN7S3168C33v40Ev();
extern void _ZN7S3168C33v41Ev();
extern void _ZN7S3168C33v42Ev();
extern void _ZN7S3168C33v43Ev();
extern void _ZN7S3168C33v44Ev();
extern void _ZN7S3168C33v45Ev();
extern void _ZN7S3168C33v46Ev();
extern void _ZN7S3168C33v47Ev();
extern void _ZN7S3168C33v48Ev();
extern void _ZN7S3168C33v49Ev();
extern void _ZN7S3168C33v50Ev();
extern void _ZN7S3168C33v51Ev();
extern void _ZN7S3168C33v52Ev();
extern void _ZN7S3168C33v53Ev();
extern void _ZN7S3168C33v54Ev();
extern void _ZN7S3168C33v55Ev();
extern void _ZN7S3168C33v56Ev();
extern void _ZN7S3168C33v57Ev();
extern void _ZN7S3168C33v58Ev();
extern void _ZN7S3168C33v59Ev();
extern void _ZN7S3168C33v60Ev();
extern void _ZN7S3168C33v61Ev();
extern void _ZN7S3168C33v62Ev();
extern void _ZN7S3168C33v63Ev();
extern void _ZN7S3168C33v64Ev();
extern void _ZN7S3168C33v65Ev();
extern void _ZN7S3168C33v66Ev();
static  VTBL_ENTRY vtc_S3168C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3168C3[0]),
  (VTBL_ENTRY)&_ZN7S3168C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3168C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v66Ev,
};
extern VTBL_ENTRY _ZTI7S3168C3[];
extern  VTBL_ENTRY _ZTV7S3168C3[];
Class_Descriptor cd_S3168C3 = {  "S3168C3", // class name
  0,0,//no base classes
  &(vtc_S3168C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3168C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3168C3),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  S3168C14_nt  {
  int s3168c14f0[3];
  void  mf3168c14(); // _ZN11S3168C14_nt9mf3168c14Ev
};
//SIG(-1 S3168C14_nt) C1{ m Fi[3]}


void  S3168C14_nt ::mf3168c14(){}

//skip512 S3168C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S3168C16()
{
  extern Class_Descriptor cd_S3168C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3168C16, buf);
    S3168C16 &lv = *(new (buf) S3168C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3168C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3168C16)");
    check_base_class_offset(lv, (S3221C7_nt*), 0, "S3168C16");
    test_class_info(&lv, &cd_S3168C16);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3168C16(Test_S3168C16, "S3168C16", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
static Base_Class bases_S3168C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3168C16 = {  "S3168C16", // class name
  bases_S3168C16, 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  S3168C15_nt  : S3168C16 {
};
//SIG(-1 S3168C15_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S3168C15_nt

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
extern Class_Descriptor cd_S3168C16;
static Base_Class bases_S3168C15_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3168C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S3168C20  : S3221C7_nt {
};
//SIG(-1 S3168C20) C1{ BC2{ m Fp Fi[2]}}



static void Test_S3168C20()
{
  extern Class_Descriptor cd_S3168C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3168C20, buf);
    S3168C20 &lv = *(new (buf) S3168C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3168C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3168C20)");
    check_base_class_offset(lv, (S3221C7_nt*), 0, "S3168C20");
    test_class_info(&lv, &cd_S3168C20);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3168C20(Test_S3168C20, "S3168C20", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
static Base_Class bases_S3168C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3168C20 = {  "S3168C20", // class name
  bases_S3168C20, 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  S3168C19  : S3168C20 {
};
//SIG(-1 S3168C19) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S3168C19()
{
  extern Class_Descriptor cd_S3168C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3168C19, buf);
    S3168C19 &lv = *(new (buf) S3168C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3168C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3168C19)");
    check_base_class_offset(lv, (S3221C7_nt*)(S3168C20*), 0, "S3168C19");
    check_base_class_offset(lv, (S3168C20*), 0, "S3168C19");
    test_class_info(&lv, &cd_S3168C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3168C19(Test_S3168C19, "S3168C19", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
extern Class_Descriptor cd_S3168C20;
static Base_Class bases_S3168C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3168C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3168C19 = {  "S3168C19", // class name
  bases_S3168C19, 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  S3168C2  : S3168C3 {
  ::S3221C17 s3168c2f0;
  ::S3221C17 s3168c2f1;
  ::S3221C8_nt s3168c2f2;
  int s3168c2f3;
  char s3168c2f4[4];
  void *s3168c2f5[2];
  ::S3221C11 s3168c2f6;
  unsigned int s3168c2f7:1;
  unsigned int s3168c2f8:1;
  unsigned int s3168c2f9:1;
  unsigned int s3168c2f10:1;
  unsigned int s3168c2f11:1;
  unsigned int s3168c2f12:1;
  unsigned int s3168c2f13:1;
  unsigned int s3168c2f14:1;
  unsigned int s3168c2f15:1;
  unsigned int s3168c2f16:1;
  unsigned int s3168c2f17:1;
  unsigned int s3168c2f18:1;
  unsigned int s3168c2f19:1;
  unsigned int s3168c2f20:1;
  unsigned int s3168c2f21:1;
  unsigned int s3168c2f22:1;
  unsigned int s3168c2f23:1;
  unsigned int s3168c2f24:1;
  unsigned int s3168c2f25:1;
  unsigned int s3168c2f26:1;
  unsigned int s3168c2f27:1;
  unsigned int s3168c2f28:1;
  unsigned int s3168c2f29:1;
  unsigned int s3168c2f30:1;
  unsigned int s3168c2f31:1;
  unsigned int s3168c2f32:1;
  unsigned int s3168c2f33:1;
  unsigned int s3168c2f34:1;
  unsigned int s3168c2f35:1;
  unsigned int s3168c2f36:1;
  unsigned int s3168c2f37:1;
  unsigned int s3168c2f38:1;
  unsigned int s3168c2f39:1;
  unsigned int s3168c2f40:1;
  unsigned int s3168c2f41:1;
  unsigned int s3168c2f42:1;
  unsigned int s3168c2f43:1;
  unsigned int s3168c2f44:1;
  unsigned int s3168c2f45:1;
  unsigned int s3168c2f46:1;
  unsigned int s3168c2f47:1;
  unsigned int s3168c2f48:1;
  unsigned int s3168c2f49:1;
  unsigned int s3168c2f50:1;
  unsigned int s3168c2f51:1;
  unsigned int s3168c2f52:1;
  unsigned int s3168c2f53:1;
  unsigned int s3168c2f54:1;
  unsigned int s3168c2f55:1;
  unsigned int s3168c2f56:1;
  unsigned int s3168c2f57:1;
  unsigned int s3168c2f58:1;
  unsigned int s3168c2f59:1;
  unsigned int s3168c2f60:1;
  unsigned int s3168c2f61:1;
  unsigned int s3168c2f62:1;
  unsigned int s3168c2f63:1;
  unsigned int s3168c2f64:1;
  unsigned int s3168c2f65:1;
  unsigned int s3168c2f66:1;
  unsigned int s3168c2f67:1;
  unsigned int s3168c2f68:1;
  unsigned int s3168c2f69:1;
  unsigned int s3168c2f70:1;
  unsigned int s3168c2f71:1;
  unsigned int s3168c2f72:1;
  unsigned int s3168c2f73:1;
  unsigned int s3168c2f74:1;
  unsigned int s3168c2f75:1;
  unsigned int s3168c2f76:1;
  unsigned int s3168c2f77:1;
  unsigned int s3168c2f78:1;
  unsigned int s3168c2f79:1;
  unsigned int s3168c2f80:1;
  unsigned int s3168c2f81:1;
  unsigned int s3168c2f82:1;
  unsigned int s3168c2f83:1;
  int s3168c2f84[5];
  void *s3168c2f85[2];
  int s3168c2f86[3];
  ::S3221C4_nt s3168c2f87;
  ::S3221C4_nt s3168c2f88;
  ::S3221C4_nt s3168c2f89;
  ::S3221C5_nt s3168c2f90;
  ::S3221C5_nt s3168c2f91;
  int s3168c2f92;
  void *s3168c2f93[2];
  ::S3221C13_nt s3168c2f94;
  ::S3168C14_nt s3168c2f95;
  ::S3221C13_nt s3168c2f96;
  ::S3221C13_nt s3168c2f97;
  void *s3168c2f98;
  ::S3221C4_nt s3168c2f99;
  ::S3221C5_nt s3168c2f100;
  ::S3221C13_nt s3168c2f101;
  ::S3168C14_nt s3168c2f102;
  int s3168c2f103;
  ::S3221C13_nt s3168c2f104;
  ::S3221C13_nt s3168c2f105;
  void *s3168c2f106;
  int s3168c2f107;
  char s3168c2f108;
  ::S3168C14_nt s3168c2f109;
  ::S3168C14_nt s3168c2f110;
  void *s3168c2f111;
  int s3168c2f112;
  void *s3168c2f113;
  ::S3168C15_nt s3168c2f114;
  ::S3168C15_nt s3168c2f115;
  ::S3168C19 s3168c2f116;
  virtual  ~S3168C2(); // _ZN7S3168C2D1Ev
  virtual void  v67(); // _ZN7S3168C23v67Ev
  virtual void  v68(); // _ZN7S3168C23v68Ev
  virtual void  v69(); // _ZN7S3168C23v69Ev
  virtual void  v70(); // _ZN7S3168C23v70Ev
  virtual void  v71(); // _ZN7S3168C23v71Ev
  virtual void  v72(); // _ZN7S3168C23v72Ev
  virtual void  v73(); // _ZN7S3168C23v73Ev
  virtual void  v74(); // _ZN7S3168C23v74Ev
  virtual void  v75(); // _ZN7S3168C23v75Ev
  virtual void  v76(); // _ZN7S3168C23v76Ev
  virtual void  v77(); // _ZN7S3168C23v77Ev
  virtual void  v78(); // _ZN7S3168C23v78Ev
  virtual void  v79(); // _ZN7S3168C23v79Ev
  virtual void  v80(); // _ZN7S3168C23v80Ev
  virtual void  v81(); // _ZN7S3168C23v81Ev
  virtual void  v82(); // _ZN7S3168C23v82Ev
  virtual void  v83(); // _ZN7S3168C23v83Ev
  virtual void  v84(); // _ZN7S3168C23v84Ev
  virtual void  v85(); // _ZN7S3168C23v85Ev
  virtual void  v86(); // _ZN7S3168C23v86Ev
  virtual void  v87(); // _ZN7S3168C23v87Ev
  virtual void  v88(); // _ZN7S3168C23v88Ev
  virtual void  v89(); // _ZN7S3168C23v89Ev
  virtual void  v90(); // _ZN7S3168C23v90Ev
  virtual void  v91(); // _ZN7S3168C23v91Ev
  virtual void  v92(); // _ZN7S3168C23v92Ev
  virtual void  v93(); // _ZN7S3168C23v93Ev
  virtual void  v94(); // _ZN7S3168C23v94Ev
  virtual void  v95(); // _ZN7S3168C23v95Ev
  virtual void  v96(); // _ZN7S3168C23v96Ev
  virtual void  v97(); // _ZN7S3168C23v97Ev
  virtual void  v98(); // _ZN7S3168C23v98Ev
  virtual void  v99(); // _ZN7S3168C23v99Ev
  virtual void  v100(); // _ZN7S3168C24v100Ev
  virtual void  v101(); // _ZN7S3168C24v101Ev
  virtual void  v102(); // _ZN7S3168C24v102Ev
  virtual void  v103(); // _ZN7S3168C24v103Ev
  virtual void  v104(); // _ZN7S3168C24v104Ev
  virtual void  v105(); // _ZN7S3168C24v105Ev
  virtual void  v106(); // _ZN7S3168C24v106Ev
  virtual void  v107(); // _ZN7S3168C24v107Ev
  virtual void  v108(); // _ZN7S3168C24v108Ev
  virtual void  v109(); // _ZN7S3168C24v109Ev
  virtual void  v110(); // _ZN7S3168C24v110Ev
  virtual void  v111(); // _ZN7S3168C24v111Ev
  virtual void  v112(); // _ZN7S3168C24v112Ev
  virtual void  v113(); // _ZN7S3168C24v113Ev
  virtual void  v114(); // _ZN7S3168C24v114Ev
  virtual void  v115(); // _ZN7S3168C24v115Ev
  virtual void  v116(); // _ZN7S3168C24v116Ev
  virtual void  v117(); // _ZN7S3168C24v117Ev
  virtual void  v118(); // _ZN7S3168C24v118Ev
  virtual void  v119(); // _ZN7S3168C24v119Ev
  virtual void  v120(); // _ZN7S3168C24v120Ev
  virtual void  v121(); // _ZN7S3168C24v121Ev
  virtual void  v122(); // _ZN7S3168C24v122Ev
  virtual void  v123(); // _ZN7S3168C24v123Ev
  virtual void  v124(); // _ZN7S3168C24v124Ev
  virtual void  v125(); // _ZN7S3168C24v125Ev
  virtual void  v126(); // _ZN7S3168C24v126Ev
  virtual void  v127(); // _ZN7S3168C24v127Ev
  virtual void  v128(); // _ZN7S3168C24v128Ev
  virtual void  v129(); // _ZN7S3168C24v129Ev
  virtual void  v130(); // _ZN7S3168C24v130Ev
  virtual void  v131(); // _ZN7S3168C24v131Ev
  virtual void  v132(); // _ZN7S3168C24v132Ev
  virtual void  v133(); // _ZN7S3168C24v133Ev
  virtual void  v134(); // _ZN7S3168C24v134Ev
  virtual void  v135(); // _ZN7S3168C24v135Ev
  virtual void  v136(); // _ZN7S3168C24v136Ev
  virtual void  v137(); // _ZN7S3168C24v137Ev
  virtual void  v138(); // _ZN7S3168C24v138Ev
  virtual void  v139(); // _ZN7S3168C24v139Ev
  virtual void  v140(); // _ZN7S3168C24v140Ev
  virtual void  v141(); // _ZN7S3168C24v141Ev
  virtual void  v142(); // _ZN7S3168C24v142Ev
  virtual void  v143(); // _ZN7S3168C24v143Ev
  virtual void  v144(); // _ZN7S3168C24v144Ev
  virtual void  v145(); // _ZN7S3168C24v145Ev
  virtual void  v146(); // _ZN7S3168C24v146Ev
  virtual void  v147(); // _ZN7S3168C24v147Ev
  virtual void  v148(); // _ZN7S3168C24v148Ev
  virtual void  v149(); // _ZN7S3168C24v149Ev
  virtual void  v150(); // _ZN7S3168C24v150Ev
  virtual void  v151(); // _ZN7S3168C24v151Ev
  virtual void  v152(); // _ZN7S3168C24v152Ev
  virtual void  v153(); // _ZN7S3168C24v153Ev
  virtual void  v154(); // _ZN7S3168C24v154Ev
  virtual void  v155(); // _ZN7S3168C24v155Ev
  virtual void  v156(); // _ZN7S3168C24v156Ev
  virtual void  v157(); // _ZN7S3168C24v157Ev
  virtual void  v158(); // _ZN7S3168C24v158Ev
  virtual void  v159(); // _ZN7S3168C24v159Ev
  virtual void  v160(); // _ZN7S3168C24v160Ev
  virtual void  v161(); // _ZN7S3168C24v161Ev
  virtual void  v162(); // _ZN7S3168C24v162Ev
  virtual void  v163(); // _ZN7S3168C24v163Ev
  virtual void  v164(); // _ZN7S3168C24v164Ev
  virtual void  v165(); // _ZN7S3168C24v165Ev
  virtual void  v166(); // _ZN7S3168C24v166Ev
  virtual void  v167(); // _ZN7S3168C24v167Ev
  virtual void  v168(); // _ZN7S3168C24v168Ev
  virtual void  v169(); // _ZN7S3168C24v169Ev
  virtual void  v170(); // _ZN7S3168C24v170Ev
  virtual void  v171(); // _ZN7S3168C24v171Ev
  virtual void  v172(); // _ZN7S3168C24v172Ev
  virtual void  v173(); // _ZN7S3168C24v173Ev
  virtual void  v174(); // _ZN7S3168C24v174Ev
  virtual void  v175(); // _ZN7S3168C24v175Ev
  virtual void  v176(); // _ZN7S3168C24v176Ev
  virtual void  v177(); // _ZN7S3168C24v177Ev
  virtual void  v178(); // _ZN7S3168C24v178Ev
  virtual void  v179(); // _ZN7S3168C24v179Ev
  virtual void  v180(); // _ZN7S3168C24v180Ev
  virtual void  v181(); // _ZN7S3168C24v181Ev
  virtual void  v182(); // _ZN7S3168C24v182Ev
  virtual void  v183(); // _ZN7S3168C24v183Ev
  virtual void  v184(); // _ZN7S3168C24v184Ev
  virtual void  v185(); // _ZN7S3168C24v185Ev
  virtual void  v186(); // _ZN7S3168C24v186Ev
  virtual void  v187(); // _ZN7S3168C24v187Ev
  virtual void  v188(); // _ZN7S3168C24v188Ev
  virtual void  v189(); // _ZN7S3168C24v189Ev
  virtual void  v190(); // _ZN7S3168C24v190Ev
  virtual void  v191(); // _ZN7S3168C24v191Ev
  virtual void  v192(); // _ZN7S3168C24v192Ev
  virtual void  v193(); // _ZN7S3168C24v193Ev
  virtual void  v194(); // _ZN7S3168C24v194Ev
  virtual void  v195(); // _ZN7S3168C24v195Ev
  virtual void  v196(); // _ZN7S3168C24v196Ev
  virtual void  v197(); // _ZN7S3168C24v197Ev
  virtual void  v198(); // _ZN7S3168C24v198Ev
  virtual void  v199(); // _ZN7S3168C24v199Ev
  virtual void  v200(); // _ZN7S3168C24v200Ev
  virtual void  v201(); // _ZN7S3168C24v201Ev
  virtual void  v202(); // _ZN7S3168C24v202Ev
  virtual void  v203(); // _ZN7S3168C24v203Ev
  virtual void  v204(); // _ZN7S3168C24v204Ev
  virtual void  v205(); // _ZN7S3168C24v205Ev
  virtual void  v206(); // _ZN7S3168C24v206Ev
  virtual void  v207(); // _ZN7S3168C24v207Ev
  virtual void  v208(); // _ZN7S3168C24v208Ev
  virtual void  v209(); // _ZN7S3168C24v209Ev
  S3168C2(); // tgen
};
//SIG(-1 S3168C2) 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] FC8{ BC9{ BC6}} Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi: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 FC10{ BC11{ BC6}} FC10 Fi Fp[2] FC12{ m Fi[3]} FC13{ m Fi[3]} FC12 FC12 Fp FC3 FC10 FC12 FC13 Fi FC12 FC12 Fp Fi Fc FC13 FC13 Fp Fi Fp FC14{ BC15{ BC6}} FC14 FC16{ BC17{ BC6}}}


 S3168C2 ::~S3168C2(){ note_dtor("S3168C2", this);}
void  S3168C2 ::v67(){vfunc_called(this, "_ZN7S3168C23v67Ev");}
void  S3168C2 ::v68(){vfunc_called(this, "_ZN7S3168C23v68Ev");}
void  S3168C2 ::v69(){vfunc_called(this, "_ZN7S3168C23v69Ev");}
void  S3168C2 ::v70(){vfunc_called(this, "_ZN7S3168C23v70Ev");}
void  S3168C2 ::v71(){vfunc_called(this, "_ZN7S3168C23v71Ev");}
void  S3168C2 ::v72(){vfunc_called(this, "_ZN7S3168C23v72Ev");}
void  S3168C2 ::v73(){vfunc_called(this, "_ZN7S3168C23v73Ev");}
void  S3168C2 ::v74(){vfunc_called(this, "_ZN7S3168C23v74Ev");}
void  S3168C2 ::v75(){vfunc_called(this, "_ZN7S3168C23v75Ev");}
void  S3168C2 ::v76(){vfunc_called(this, "_ZN7S3168C23v76Ev");}
void  S3168C2 ::v77(){vfunc_called(this, "_ZN7S3168C23v77Ev");}
void  S3168C2 ::v78(){vfunc_called(this, "_ZN7S3168C23v78Ev");}
void  S3168C2 ::v79(){vfunc_called(this, "_ZN7S3168C23v79Ev");}
void  S3168C2 ::v80(){vfunc_called(this, "_ZN7S3168C23v80Ev");}
void  S3168C2 ::v81(){vfunc_called(this, "_ZN7S3168C23v81Ev");}
void  S3168C2 ::v82(){vfunc_called(this, "_ZN7S3168C23v82Ev");}
void  S3168C2 ::v83(){vfunc_called(this, "_ZN7S3168C23v83Ev");}
void  S3168C2 ::v84(){vfunc_called(this, "_ZN7S3168C23v84Ev");}
void  S3168C2 ::v85(){vfunc_called(this, "_ZN7S3168C23v85Ev");}
void  S3168C2 ::v86(){vfunc_called(this, "_ZN7S3168C23v86Ev");}
void  S3168C2 ::v87(){vfunc_called(this, "_ZN7S3168C23v87Ev");}
void  S3168C2 ::v88(){vfunc_called(this, "_ZN7S3168C23v88Ev");}
void  S3168C2 ::v89(){vfunc_called(this, "_ZN7S3168C23v89Ev");}
void  S3168C2 ::v90(){vfunc_called(this, "_ZN7S3168C23v90Ev");}
void  S3168C2 ::v91(){vfunc_called(this, "_ZN7S3168C23v91Ev");}
void  S3168C2 ::v92(){vfunc_called(this, "_ZN7S3168C23v92Ev");}
void  S3168C2 ::v93(){vfunc_called(this, "_ZN7S3168C23v93Ev");}
void  S3168C2 ::v94(){vfunc_called(this, "_ZN7S3168C23v94Ev");}
void  S3168C2 ::v95(){vfunc_called(this, "_ZN7S3168C23v95Ev");}
void  S3168C2 ::v96(){vfunc_called(this, "_ZN7S3168C23v96Ev");}
void  S3168C2 ::v97(){vfunc_called(this, "_ZN7S3168C23v97Ev");}
void  S3168C2 ::v98(){vfunc_called(this, "_ZN7S3168C23v98Ev");}
void  S3168C2 ::v99(){vfunc_called(this, "_ZN7S3168C23v99Ev");}
void  S3168C2 ::v100(){vfunc_called(this, "_ZN7S3168C24v100Ev");}
void  S3168C2 ::v101(){vfunc_called(this, "_ZN7S3168C24v101Ev");}
void  S3168C2 ::v102(){vfunc_called(this, "_ZN7S3168C24v102Ev");}
void  S3168C2 ::v103(){vfunc_called(this, "_ZN7S3168C24v103Ev");}
void  S3168C2 ::v104(){vfunc_called(this, "_ZN7S3168C24v104Ev");}
void  S3168C2 ::v105(){vfunc_called(this, "_ZN7S3168C24v105Ev");}
void  S3168C2 ::v106(){vfunc_called(this, "_ZN7S3168C24v106Ev");}
void  S3168C2 ::v107(){vfunc_called(this, "_ZN7S3168C24v107Ev");}
void  S3168C2 ::v108(){vfunc_called(this, "_ZN7S3168C24v108Ev");}
void  S3168C2 ::v109(){vfunc_called(this, "_ZN7S3168C24v109Ev");}
void  S3168C2 ::v110(){vfunc_called(this, "_ZN7S3168C24v110Ev");}
void  S3168C2 ::v111(){vfunc_called(this, "_ZN7S3168C24v111Ev");}
void  S3168C2 ::v112(){vfunc_called(this, "_ZN7S3168C24v112Ev");}
void  S3168C2 ::v113(){vfunc_called(this, "_ZN7S3168C24v113Ev");}
void  S3168C2 ::v114(){vfunc_called(this, "_ZN7S3168C24v114Ev");}
void  S3168C2 ::v115(){vfunc_called(this, "_ZN7S3168C24v115Ev");}
void  S3168C2 ::v116(){vfunc_called(this, "_ZN7S3168C24v116Ev");}
void  S3168C2 ::v117(){vfunc_called(this, "_ZN7S3168C24v117Ev");}
void  S3168C2 ::v118(){vfunc_called(this, "_ZN7S3168C24v118Ev");}
void  S3168C2 ::v119(){vfunc_called(this, "_ZN7S3168C24v119Ev");}
void  S3168C2 ::v120(){vfunc_called(this, "_ZN7S3168C24v120Ev");}
void  S3168C2 ::v121(){vfunc_called(this, "_ZN7S3168C24v121Ev");}
void  S3168C2 ::v122(){vfunc_called(this, "_ZN7S3168C24v122Ev");}
void  S3168C2 ::v123(){vfunc_called(this, "_ZN7S3168C24v123Ev");}
void  S3168C2 ::v124(){vfunc_called(this, "_ZN7S3168C24v124Ev");}
void  S3168C2 ::v125(){vfunc_called(this, "_ZN7S3168C24v125Ev");}
void  S3168C2 ::v126(){vfunc_called(this, "_ZN7S3168C24v126Ev");}
void  S3168C2 ::v127(){vfunc_called(this, "_ZN7S3168C24v127Ev");}
void  S3168C2 ::v128(){vfunc_called(this, "_ZN7S3168C24v128Ev");}
void  S3168C2 ::v129(){vfunc_called(this, "_ZN7S3168C24v129Ev");}
void  S3168C2 ::v130(){vfunc_called(this, "_ZN7S3168C24v130Ev");}
void  S3168C2 ::v131(){vfunc_called(this, "_ZN7S3168C24v131Ev");}
void  S3168C2 ::v132(){vfunc_called(this, "_ZN7S3168C24v132Ev");}
void  S3168C2 ::v133(){vfunc_called(this, "_ZN7S3168C24v133Ev");}
void  S3168C2 ::v134(){vfunc_called(this, "_ZN7S3168C24v134Ev");}
void  S3168C2 ::v135(){vfunc_called(this, "_ZN7S3168C24v135Ev");}
void  S3168C2 ::v136(){vfunc_called(this, "_ZN7S3168C24v136Ev");}
void  S3168C2 ::v137(){vfunc_called(this, "_ZN7S3168C24v137Ev");}
void  S3168C2 ::v138(){vfunc_called(this, "_ZN7S3168C24v138Ev");}
void  S3168C2 ::v139(){vfunc_called(this, "_ZN7S3168C24v139Ev");}
void  S3168C2 ::v140(){vfunc_called(this, "_ZN7S3168C24v140Ev");}
void  S3168C2 ::v141(){vfunc_called(this, "_ZN7S3168C24v141Ev");}
void  S3168C2 ::v142(){vfunc_called(this, "_ZN7S3168C24v142Ev");}
void  S3168C2 ::v143(){vfunc_called(this, "_ZN7S3168C24v143Ev");}
void  S3168C2 ::v144(){vfunc_called(this, "_ZN7S3168C24v144Ev");}
void  S3168C2 ::v145(){vfunc_called(this, "_ZN7S3168C24v145Ev");}
void  S3168C2 ::v146(){vfunc_called(this, "_ZN7S3168C24v146Ev");}
void  S3168C2 ::v147(){vfunc_called(this, "_ZN7S3168C24v147Ev");}
void  S3168C2 ::v148(){vfunc_called(this, "_ZN7S3168C24v148Ev");}
void  S3168C2 ::v149(){vfunc_called(this, "_ZN7S3168C24v149Ev");}
void  S3168C2 ::v150(){vfunc_called(this, "_ZN7S3168C24v150Ev");}
void  S3168C2 ::v151(){vfunc_called(this, "_ZN7S3168C24v151Ev");}
void  S3168C2 ::v152(){vfunc_called(this, "_ZN7S3168C24v152Ev");}
void  S3168C2 ::v153(){vfunc_called(this, "_ZN7S3168C24v153Ev");}
void  S3168C2 ::v154(){vfunc_called(this, "_ZN7S3168C24v154Ev");}
void  S3168C2 ::v155(){vfunc_called(this, "_ZN7S3168C24v155Ev");}
void  S3168C2 ::v156(){vfunc_called(this, "_ZN7S3168C24v156Ev");}
void  S3168C2 ::v157(){vfunc_called(this, "_ZN7S3168C24v157Ev");}
void  S3168C2 ::v158(){vfunc_called(this, "_ZN7S3168C24v158Ev");}
void  S3168C2 ::v159(){vfunc_called(this, "_ZN7S3168C24v159Ev");}
void  S3168C2 ::v160(){vfunc_called(this, "_ZN7S3168C24v160Ev");}
void  S3168C2 ::v161(){vfunc_called(this, "_ZN7S3168C24v161Ev");}
void  S3168C2 ::v162(){vfunc_called(this, "_ZN7S3168C24v162Ev");}
void  S3168C2 ::v163(){vfunc_called(this, "_ZN7S3168C24v163Ev");}
void  S3168C2 ::v164(){vfunc_called(this, "_ZN7S3168C24v164Ev");}
void  S3168C2 ::v165(){vfunc_called(this, "_ZN7S3168C24v165Ev");}
void  S3168C2 ::v166(){vfunc_called(this, "_ZN7S3168C24v166Ev");}
void  S3168C2 ::v167(){vfunc_called(this, "_ZN7S3168C24v167Ev");}
void  S3168C2 ::v168(){vfunc_called(this, "_ZN7S3168C24v168Ev");}
void  S3168C2 ::v169(){vfunc_called(this, "_ZN7S3168C24v169Ev");}
void  S3168C2 ::v170(){vfunc_called(this, "_ZN7S3168C24v170Ev");}
void  S3168C2 ::v171(){vfunc_called(this, "_ZN7S3168C24v171Ev");}
void  S3168C2 ::v172(){vfunc_called(this, "_ZN7S3168C24v172Ev");}
void  S3168C2 ::v173(){vfunc_called(this, "_ZN7S3168C24v173Ev");}
void  S3168C2 ::v174(){vfunc_called(this, "_ZN7S3168C24v174Ev");}
void  S3168C2 ::v175(){vfunc_called(this, "_ZN7S3168C24v175Ev");}
void  S3168C2 ::v176(){vfunc_called(this, "_ZN7S3168C24v176Ev");}
void  S3168C2 ::v177(){vfunc_called(this, "_ZN7S3168C24v177Ev");}
void  S3168C2 ::v178(){vfunc_called(this, "_ZN7S3168C24v178Ev");}
void  S3168C2 ::v179(){vfunc_called(this, "_ZN7S3168C24v179Ev");}
void  S3168C2 ::v180(){vfunc_called(this, "_ZN7S3168C24v180Ev");}
void  S3168C2 ::v181(){vfunc_called(this, "_ZN7S3168C24v181Ev");}
void  S3168C2 ::v182(){vfunc_called(this, "_ZN7S3168C24v182Ev");}
void  S3168C2 ::v183(){vfunc_called(this, "_ZN7S3168C24v183Ev");}
void  S3168C2 ::v184(){vfunc_called(this, "_ZN7S3168C24v184Ev");}
void  S3168C2 ::v185(){vfunc_called(this, "_ZN7S3168C24v185Ev");}
void  S3168C2 ::v186(){vfunc_called(this, "_ZN7S3168C24v186Ev");}
void  S3168C2 ::v187(){vfunc_called(this, "_ZN7S3168C24v187Ev");}
void  S3168C2 ::v188(){vfunc_called(this, "_ZN7S3168C24v188Ev");}
void  S3168C2 ::v189(){vfunc_called(this, "_ZN7S3168C24v189Ev");}
void  S3168C2 ::v190(){vfunc_called(this, "_ZN7S3168C24v190Ev");}
void  S3168C2 ::v191(){vfunc_called(this, "_ZN7S3168C24v191Ev");}
void  S3168C2 ::v192(){vfunc_called(this, "_ZN7S3168C24v192Ev");}
void  S3168C2 ::v193(){vfunc_called(this, "_ZN7S3168C24v193Ev");}
void  S3168C2 ::v194(){vfunc_called(this, "_ZN7S3168C24v194Ev");}
void  S3168C2 ::v195(){vfunc_called(this, "_ZN7S3168C24v195Ev");}
void  S3168C2 ::v196(){vfunc_called(this, "_ZN7S3168C24v196Ev");}
void  S3168C2 ::v197(){vfunc_called(this, "_ZN7S3168C24v197Ev");}
void  S3168C2 ::v198(){vfunc_called(this, "_ZN7S3168C24v198Ev");}
void  S3168C2 ::v199(){vfunc_called(this, "_ZN7S3168C24v199Ev");}
void  S3168C2 ::v200(){vfunc_called(this, "_ZN7S3168C24v200Ev");}
void  S3168C2 ::v201(){vfunc_called(this, "_ZN7S3168C24v201Ev");}
void  S3168C2 ::v202(){vfunc_called(this, "_ZN7S3168C24v202Ev");}
void  S3168C2 ::v203(){vfunc_called(this, "_ZN7S3168C24v203Ev");}
void  S3168C2 ::v204(){vfunc_called(this, "_ZN7S3168C24v204Ev");}
void  S3168C2 ::v205(){vfunc_called(this, "_ZN7S3168C24v205Ev");}
void  S3168C2 ::v206(){vfunc_called(this, "_ZN7S3168C24v206Ev");}
void  S3168C2 ::v207(){vfunc_called(this, "_ZN7S3168C24v207Ev");}
void  S3168C2 ::v208(){vfunc_called(this, "_ZN7S3168C24v208Ev");}
void  S3168C2 ::v209(){vfunc_called(this, "_ZN7S3168C24v209Ev");}
S3168C2 ::S3168C2(){ note_ctor("S3168C2", this);} // tgen

static void Test_S3168C2()
{
  extern Class_Descriptor cd_S3168C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(72,110)];
    init_test(&cd_S3168C2, buf);
    S3168C2 *dp, &lv = *(dp=new (buf) S3168C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(568,436), "sizeof(S3168C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3168C2)");
    check_base_class_offset(lv, (S3168C3*), 0, "S3168C2");
    check_field_offset(lv, s3168c2f0, ABISELECT(96,60), "S3168C2.s3168c2f0");
    check_field_offset(lv, s3168c2f1, ABISELECT(112,72), "S3168C2.s3168c2f1");
    check_field_offset(lv, s3168c2f2, ABISELECT(128,84), "S3168C2.s3168c2f2");
    check_field_offset(lv, s3168c2f3, ABISELECT(132,88), "S3168C2.s3168c2f3");
    check_field_offset(lv, s3168c2f4, ABISELECT(136,92), "S3168C2.s3168c2f4");
    check_field_offset(lv, s3168c2f5, ABISELECT(144,96), "S3168C2.s3168c2f5");
    check_field_offset(lv, s3168c2f6, ABISELECT(160,104), "S3168C2.s3168c2f6");
    set_bf_and_test(lv, s3168c2f7, ABISELECT(176,116), 0, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f8, ABISELECT(176,116), 1, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f9, ABISELECT(176,116), 2, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f10, ABISELECT(176,116), 3, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f11, ABISELECT(176,116), 4, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f12, ABISELECT(176,116), 5, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f13, ABISELECT(176,116), 6, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f14, ABISELECT(176,116), 7, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f15, ABISELECT(177,117), 0, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f16, ABISELECT(177,117), 1, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f17, ABISELECT(177,117), 2, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f18, ABISELECT(177,117), 3, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f19, ABISELECT(177,117), 4, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f20, ABISELECT(177,117), 5, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f21, ABISELECT(177,117), 6, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f22, ABISELECT(177,117), 7, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f23, ABISELECT(178,118), 0, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f24, ABISELECT(178,118), 1, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f25, ABISELECT(178,118), 2, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f26, ABISELECT(178,118), 3, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f27, ABISELECT(178,118), 4, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f28, ABISELECT(178,118), 5, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f29, ABISELECT(178,118), 6, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f30, ABISELECT(178,118), 7, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f31, ABISELECT(179,119), 0, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f32, ABISELECT(179,119), 1, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f33, ABISELECT(179,119), 2, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f34, ABISELECT(179,119), 3, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f35, ABISELECT(179,119), 4, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f36, ABISELECT(179,119), 5, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f37, ABISELECT(179,119), 6, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f38, ABISELECT(179,119), 7, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f39, ABISELECT(180,120), 0, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f40, ABISELECT(180,120), 1, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f41, ABISELECT(180,120), 2, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f42, ABISELECT(180,120), 3, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f43, ABISELECT(180,120), 4, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f44, ABISELECT(180,120), 5, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f45, ABISELECT(180,120), 6, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f46, ABISELECT(180,120), 7, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f47, ABISELECT(181,121), 0, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f48, ABISELECT(181,121), 1, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f49, ABISELECT(181,121), 2, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f50, ABISELECT(181,121), 3, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f51, ABISELECT(181,121), 4, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f52, ABISELECT(181,121), 5, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f53, ABISELECT(181,121), 6, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f54, ABISELECT(181,121), 7, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f55, ABISELECT(182,122), 0, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f56, ABISELECT(182,122), 1, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f57, ABISELECT(182,122), 2, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f58, ABISELECT(182,122), 3, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f59, ABISELECT(182,122), 4, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f60, ABISELECT(182,122), 5, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f61, ABISELECT(182,122), 6, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f62, ABISELECT(182,122), 7, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f63, ABISELECT(183,123), 0, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f64, ABISELECT(183,123), 1, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f65, ABISELECT(183,123), 2, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f66, ABISELECT(183,123), 3, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f67, ABISELECT(183,123), 4, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f68, ABISELECT(183,123), 5, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f69, ABISELECT(183,123), 6, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f70, ABISELECT(183,123), 7, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f71, ABISELECT(184,124), 0, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f72, ABISELECT(184,124), 1, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f73, ABISELECT(184,124), 2, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f74, ABISELECT(184,124), 3, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f75, ABISELECT(184,124), 4, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f76, ABISELECT(184,124), 5, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f77, ABISELECT(184,124), 6, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f78, ABISELECT(184,124), 7, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f79, ABISELECT(185,125), 0, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f80, ABISELECT(185,125), 1, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f81, ABISELECT(185,125), 2, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f82, ABISELECT(185,125), 3, 1, 1, "S3168C2");
    set_bf_and_test(lv, s3168c2f83, ABISELECT(185,125), 4, 1, 1, "S3168C2");
    check_field_offset(lv, s3168c2f84, ABISELECT(188,128), "S3168C2.s3168c2f84");
    check_field_offset(lv, s3168c2f85, ABISELECT(208,148), "S3168C2.s3168c2f85");
    check_field_offset(lv, s3168c2f86, ABISELECT(224,156), "S3168C2.s3168c2f86");
    check_field_offset(lv, s3168c2f87, ABISELECT(236,168), "S3168C2.s3168c2f87");
    check_field_offset(lv, s3168c2f88, ABISELECT(244,176), "S3168C2.s3168c2f88");
    check_field_offset(lv, s3168c2f89, ABISELECT(252,184), "S3168C2.s3168c2f89");
    check_field_offset(lv, s3168c2f90, ABISELECT(264,192), "S3168C2.s3168c2f90");
    check_field_offset(lv, s3168c2f91, ABISELECT(280,204), "S3168C2.s3168c2f91");
    check_field_offset(lv, s3168c2f92, ABISELECT(296,216), "S3168C2.s3168c2f92");
    check_field_offset(lv, s3168c2f93, ABISELECT(304,220), "S3168C2.s3168c2f93");
    check_field_offset(lv, s3168c2f94, ABISELECT(320,228), "S3168C2.s3168c2f94");
    check_field_offset(lv, s3168c2f95, ABISELECT(332,240), "S3168C2.s3168c2f95");
    check_field_offset(lv, s3168c2f96, ABISELECT(344,252), "S3168C2.s3168c2f96");
    check_field_offset(lv, s3168c2f97, ABISELECT(356,264), "S3168C2.s3168c2f97");
    check_field_offset(lv, s3168c2f98, ABISELECT(368,276), "S3168C2.s3168c2f98");
    check_field_offset(lv, s3168c2f99, ABISELECT(376,280), "S3168C2.s3168c2f99");
    check_field_offset(lv, s3168c2f100, ABISELECT(384,288), "S3168C2.s3168c2f100");
    check_field_offset(lv, s3168c2f101, ABISELECT(400,300), "S3168C2.s3168c2f101");
    check_field_offset(lv, s3168c2f102, ABISELECT(412,312), "S3168C2.s3168c2f102");
    check_field_offset(lv, s3168c2f103, ABISELECT(424,324), "S3168C2.s3168c2f103");
    check_field_offset(lv, s3168c2f104, ABISELECT(428,328), "S3168C2.s3168c2f104");
    check_field_offset(lv, s3168c2f105, ABISELECT(440,340), "S3168C2.s3168c2f105");
    check_field_offset(lv, s3168c2f106, ABISELECT(456,352), "S3168C2.s3168c2f106");
    check_field_offset(lv, s3168c2f107, ABISELECT(464,356), "S3168C2.s3168c2f107");
    check_field_offset(lv, s3168c2f108, ABISELECT(468,360), "S3168C2.s3168c2f108");
    check_field_offset(lv, s3168c2f109, ABISELECT(472,364), "S3168C2.s3168c2f109");
    check_field_offset(lv, s3168c2f110, ABISELECT(484,376), "S3168C2.s3168c2f110");
    check_field_offset(lv, s3168c2f111, ABISELECT(496,388), "S3168C2.s3168c2f111");
    check_field_offset(lv, s3168c2f112, ABISELECT(504,392), "S3168C2.s3168c2f112");
    check_field_offset(lv, s3168c2f113, ABISELECT(512,396), "S3168C2.s3168c2f113");
    check_field_offset(lv, s3168c2f114, ABISELECT(520,400), "S3168C2.s3168c2f114");
    check_field_offset(lv, s3168c2f115, ABISELECT(536,412), "S3168C2.s3168c2f115");
    check_field_offset(lv, s3168c2f116, ABISELECT(552,424), "S3168C2.s3168c2f116");
    test_class_info(&lv, &cd_S3168C2);
    dp->~S3168C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3168C2(Test_S3168C2, "S3168C2", ABISELECT(568,436));

#else // __cplusplus

extern void _ZN7S3168C2C1Ev();
extern void _ZN7S3168C2D1Ev();
Name_Map name_map_S3168C2[] = {
  NSPAIR(_ZN7S3168C2C1Ev),
  NSPAIR(_ZN7S3168C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3168C3;
extern VTBL_ENTRY _ZTI7S3168C3[];
extern  VTBL_ENTRY _ZTV7S3168C3[];
static Base_Class bases_S3168C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3168C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3168C2[];
extern void _ZN7S3168C2D1Ev();
extern void _ZN7S3168C2D0Ev();
extern void _ZN7S3168C32v3Ev();
extern void _ZN7S3168C32v4Ev();
extern void _ZN7S3168C32v5Ev();
extern void _ZN7S3168C32v6Ev();
extern void _ZN7S3168C32v7Ev();
extern void _ZN7S3168C32v8Ev();
extern void _ZN7S3168C32v9Ev();
extern void _ZN7S3168C33v10Ev();
extern void _ZN7S3168C33v11Ev();
extern void _ZN7S3168C33v12Ev();
extern void _ZN7S3168C33v13Ev();
extern void _ZN7S3168C33v14Ev();
extern void _ZN7S3168C33v15Ev();
extern void _ZN7S3168C33v16Ev();
extern void _ZN7S3168C33v17Ev();
extern void _ZN7S3168C33v18Ev();
extern void _ZN7S3168C33v19Ev();
extern void _ZN7S3168C33v20Ev();
extern void _ZN7S3168C33v21Ev();
extern void _ZN7S3168C33v22Ev();
extern void _ZN7S3168C33v23Ev();
extern void _ZN7S3168C33v24Ev();
extern void _ZN7S3168C33v25Ev();
extern void _ZN7S3168C33v26Ev();
extern void _ZN7S3168C33v27Ev();
extern void _ZN7S3168C33v28Ev();
extern void _ZN7S3168C33v29Ev();
extern void _ZN7S3168C33v30Ev();
extern void _ZN7S3168C33v31Ev();
extern void _ZN7S3168C33v32Ev();
extern void _ZN7S3168C33v33Ev();
extern void _ZN7S3168C33v34Ev();
extern void _ZN7S3168C33v35Ev();
extern void _ZN7S3168C33v36Ev();
extern void _ZN7S3168C33v37Ev();
extern void _ZN7S3168C33v38Ev();
extern void _ZN7S3168C33v39Ev();
extern void _ZN7S3168C33v40Ev();
extern void _ZN7S3168C33v41Ev();
extern void _ZN7S3168C33v42Ev();
extern void _ZN7S3168C33v43Ev();
extern void _ZN7S3168C33v44Ev();
extern void _ZN7S3168C33v45Ev();
extern void _ZN7S3168C33v46Ev();
extern void _ZN7S3168C33v47Ev();
extern void _ZN7S3168C33v48Ev();
extern void _ZN7S3168C33v49Ev();
extern void _ZN7S3168C33v50Ev();
extern void _ZN7S3168C33v51Ev();
extern void _ZN7S3168C33v52Ev();
extern void _ZN7S3168C33v53Ev();
extern void _ZN7S3168C33v54Ev();
extern void _ZN7S3168C33v55Ev();
extern void _ZN7S3168C33v56Ev();
extern void _ZN7S3168C33v57Ev();
extern void _ZN7S3168C33v58Ev();
extern void _ZN7S3168C33v59Ev();
extern void _ZN7S3168C33v60Ev();
extern void _ZN7S3168C33v61Ev();
extern void _ZN7S3168C33v62Ev();
extern void _ZN7S3168C33v63Ev();
extern void _ZN7S3168C33v64Ev();
extern void _ZN7S3168C33v65Ev();
extern void _ZN7S3168C33v66Ev();
extern void _ZN7S3168C23v67Ev();
extern void _ZN7S3168C23v68Ev();
extern void _ZN7S3168C23v69Ev();
extern void _ZN7S3168C23v70Ev();
extern void _ZN7S3168C23v71Ev();
extern void _ZN7S3168C23v72Ev();
extern void _ZN7S3168C23v73Ev();
extern void _ZN7S3168C23v74Ev();
extern void _ZN7S3168C23v75Ev();
extern void _ZN7S3168C23v76Ev();
extern void _ZN7S3168C23v77Ev();
extern void _ZN7S3168C23v78Ev();
extern void _ZN7S3168C23v79Ev();
extern void _ZN7S3168C23v80Ev();
extern void _ZN7S3168C23v81Ev();
extern void _ZN7S3168C23v82Ev();
extern void _ZN7S3168C23v83Ev();
extern void _ZN7S3168C23v84Ev();
extern void _ZN7S3168C23v85Ev();
extern void _ZN7S3168C23v86Ev();
extern void _ZN7S3168C23v87Ev();
extern void _ZN7S3168C23v88Ev();
extern void _ZN7S3168C23v89Ev();
extern void _ZN7S3168C23v90Ev();
extern void _ZN7S3168C23v91Ev();
extern void _ZN7S3168C23v92Ev();
extern void _ZN7S3168C23v93Ev();
extern void _ZN7S3168C23v94Ev();
extern void _ZN7S3168C23v95Ev();
extern void _ZN7S3168C23v96Ev();
extern void _ZN7S3168C23v97Ev();
extern void _ZN7S3168C23v98Ev();
extern void _ZN7S3168C23v99Ev();
extern void _ZN7S3168C24v100Ev();
extern void _ZN7S3168C24v101Ev();
extern void _ZN7S3168C24v102Ev();
extern void _ZN7S3168C24v103Ev();
extern void _ZN7S3168C24v104Ev();
extern void _ZN7S3168C24v105Ev();
extern void _ZN7S3168C24v106Ev();
extern void _ZN7S3168C24v107Ev();
extern void _ZN7S3168C24v108Ev();
extern void _ZN7S3168C24v109Ev();
extern void _ZN7S3168C24v110Ev();
extern void _ZN7S3168C24v111Ev();
extern void _ZN7S3168C24v112Ev();
extern void _ZN7S3168C24v113Ev();
extern void _ZN7S3168C24v114Ev();
extern void _ZN7S3168C24v115Ev();
extern void _ZN7S3168C24v116Ev();
extern void _ZN7S3168C24v117Ev();
extern void _ZN7S3168C24v118Ev();
extern void _ZN7S3168C24v119Ev();
extern void _ZN7S3168C24v120Ev();
extern void _ZN7S3168C24v121Ev();
extern void _ZN7S3168C24v122Ev();
extern void _ZN7S3168C24v123Ev();
extern void _ZN7S3168C24v124Ev();
extern void _ZN7S3168C24v125Ev();
extern void _ZN7S3168C24v126Ev();
extern void _ZN7S3168C24v127Ev();
extern void _ZN7S3168C24v128Ev();
extern void _ZN7S3168C24v129Ev();
extern void _ZN7S3168C24v130Ev();
extern void _ZN7S3168C24v131Ev();
extern void _ZN7S3168C24v132Ev();
extern void _ZN7S3168C24v133Ev();
extern void _ZN7S3168C24v134Ev();
extern void _ZN7S3168C24v135Ev();
extern void _ZN7S3168C24v136Ev();
extern void _ZN7S3168C24v137Ev();
extern void _ZN7S3168C24v138Ev();
extern void _ZN7S3168C24v139Ev();
extern void _ZN7S3168C24v140Ev();
extern void _ZN7S3168C24v141Ev();
extern void _ZN7S3168C24v142Ev();
extern void _ZN7S3168C24v143Ev();
extern void _ZN7S3168C24v144Ev();
extern void _ZN7S3168C24v145Ev();
extern void _ZN7S3168C24v146Ev();
extern void _ZN7S3168C24v147Ev();
extern void _ZN7S3168C24v148Ev();
extern void _ZN7S3168C24v149Ev();
extern void _ZN7S3168C24v150Ev();
extern void _ZN7S3168C24v151Ev();
extern void _ZN7S3168C24v152Ev();
extern void _ZN7S3168C24v153Ev();
extern void _ZN7S3168C24v154Ev();
extern void _ZN7S3168C24v155Ev();
extern void _ZN7S3168C24v156Ev();
extern void _ZN7S3168C24v157Ev();
extern void _ZN7S3168C24v158Ev();
extern void _ZN7S3168C24v159Ev();
extern void _ZN7S3168C24v160Ev();
extern void _ZN7S3168C24v161Ev();
extern void _ZN7S3168C24v162Ev();
extern void _ZN7S3168C24v163Ev();
extern void _ZN7S3168C24v164Ev();
extern void _ZN7S3168C24v165Ev();
extern void _ZN7S3168C24v166Ev();
extern void _ZN7S3168C24v167Ev();
extern void _ZN7S3168C24v168Ev();
extern void _ZN7S3168C24v169Ev();
extern void _ZN7S3168C24v170Ev();
extern void _ZN7S3168C24v171Ev();
extern void _ZN7S3168C24v172Ev();
extern void _ZN7S3168C24v173Ev();
extern void _ZN7S3168C24v174Ev();
extern void _ZN7S3168C24v175Ev();
extern void _ZN7S3168C24v176Ev();
extern void _ZN7S3168C24v177Ev();
extern void _ZN7S3168C24v178Ev();
extern void _ZN7S3168C24v179Ev();
extern void _ZN7S3168C24v180Ev();
extern void _ZN7S3168C24v181Ev();
extern void _ZN7S3168C24v182Ev();
extern void _ZN7S3168C24v183Ev();
extern void _ZN7S3168C24v184Ev();
extern void _ZN7S3168C24v185Ev();
extern void _ZN7S3168C24v186Ev();
extern void _ZN7S3168C24v187Ev();
extern void _ZN7S3168C24v188Ev();
extern void _ZN7S3168C24v189Ev();
extern void _ZN7S3168C24v190Ev();
extern void _ZN7S3168C24v191Ev();
extern void _ZN7S3168C24v192Ev();
extern void _ZN7S3168C24v193Ev();
extern void _ZN7S3168C24v194Ev();
extern void _ZN7S3168C24v195Ev();
extern void _ZN7S3168C24v196Ev();
extern void _ZN7S3168C24v197Ev();
extern void _ZN7S3168C24v198Ev();
extern void _ZN7S3168C24v199Ev();
extern void _ZN7S3168C24v200Ev();
extern void _ZN7S3168C24v201Ev();
extern void _ZN7S3168C24v202Ev();
extern void _ZN7S3168C24v203Ev();
extern void _ZN7S3168C24v204Ev();
extern void _ZN7S3168C24v205Ev();
extern void _ZN7S3168C24v206Ev();
extern void _ZN7S3168C24v207Ev();
extern void _ZN7S3168C24v208Ev();
extern void _ZN7S3168C24v209Ev();
static  VTBL_ENTRY vtc_S3168C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3168C2[0]),
  (VTBL_ENTRY)&_ZN7S3168C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3168C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v67Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v100Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v101Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v102Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v103Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v130Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v131Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v132Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v145Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v146Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v147Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v148Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v149Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v150Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v151Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v152Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v153Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v154Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v155Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v156Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v157Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v158Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v159Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v160Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v161Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v162Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v163Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v164Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v165Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v166Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v167Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v168Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v169Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v170Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v171Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v172Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v173Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v174Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v175Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v176Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v177Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v178Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v179Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v180Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v181Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v182Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v183Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v184Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v185Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v186Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v187Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v188Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v189Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v190Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v191Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v192Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v193Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v194Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v195Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v196Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v197Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v198Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v199Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v200Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v201Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v202Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v203Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v204Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v205Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v206Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v207Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v208Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v209Ev,
};
extern VTBL_ENTRY _ZTI7S3168C2[];
extern  VTBL_ENTRY _ZTV7S3168C2[];
Class_Descriptor cd_S3168C2 = {  "S3168C2", // class name
  bases_S3168C2, 1,
  &(vtc_S3168C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI7S3168C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3168C2),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  S3168C1  : S3168C2 {
  void *s3168c1f0;
  virtual  ~S3168C1(); // _ZN7S3168C1D1Ev
  virtual void  v1(); // _ZN7S3168C12v1Ev
  virtual void  v2(); // _ZN7S3168C12v2Ev
  S3168C1(); // tgen
};
//SIG(1 S3168C1) 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 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 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 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC5 FC8{ m Fi} Fi Fc[4] Fp[2] FC9{ BC10{ BC7}} Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi: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 FC11{ BC12{ BC7}} FC11 Fi Fp[2] FC13{ m Fi[3]} FC14{ m Fi[3]} FC13 FC13 Fp FC4 FC11 FC13 FC14 Fi FC13 FC13 Fp Fi Fc FC14 FC14 Fp Fi Fp FC15{ BC16{ BC7}} FC15 FC17{ BC18{ BC7}}} vd v1 v2 Fp}


 S3168C1 ::~S3168C1(){ note_dtor("S3168C1", this);}
void  S3168C1 ::v1(){vfunc_called(this, "_ZN7S3168C12v1Ev");}
void  S3168C1 ::v2(){vfunc_called(this, "_ZN7S3168C12v2Ev");}
S3168C1 ::S3168C1(){ note_ctor("S3168C1", this);} // tgen

static void Test_S3168C1()
{
  extern Class_Descriptor cd_S3168C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(73,111)];
    init_test(&cd_S3168C1, buf);
    S3168C1 *dp, &lv = *(dp=new (buf) S3168C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,440), "sizeof(S3168C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3168C1)");
    check_base_class_offset(lv, (S3168C3*)(S3168C2*), 0, "S3168C1");
    check_base_class_offset(lv, (S3168C2*), 0, "S3168C1");
    check_field_offset(lv, s3168c1f0, ABISELECT(568,436), "S3168C1.s3168c1f0");
    test_class_info(&lv, &cd_S3168C1);
    dp->~S3168C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3168C1(Test_S3168C1, "S3168C1", ABISELECT(576,440));

#else // __cplusplus

extern void _ZN7S3168C1C1Ev();
extern void _ZN7S3168C1D1Ev();
Name_Map name_map_S3168C1[] = {
  NSPAIR(_ZN7S3168C1C1Ev),
  NSPAIR(_ZN7S3168C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3168C3;
extern VTBL_ENTRY _ZTI7S3168C3[];
extern  VTBL_ENTRY _ZTV7S3168C3[];
extern Class_Descriptor cd_S3168C2;
extern VTBL_ENTRY _ZTI7S3168C2[];
extern  VTBL_ENTRY _ZTV7S3168C2[];
static Base_Class bases_S3168C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3168C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3168C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3168C1[];
extern void _ZN7S3168C1D1Ev();
extern void _ZN7S3168C1D0Ev();
extern void _ZN7S3168C32v3Ev();
extern void _ZN7S3168C32v4Ev();
extern void _ZN7S3168C32v5Ev();
extern void _ZN7S3168C32v6Ev();
extern void _ZN7S3168C32v7Ev();
extern void _ZN7S3168C32v8Ev();
extern void _ZN7S3168C32v9Ev();
extern void _ZN7S3168C33v10Ev();
extern void _ZN7S3168C33v11Ev();
extern void _ZN7S3168C33v12Ev();
extern void _ZN7S3168C33v13Ev();
extern void _ZN7S3168C33v14Ev();
extern void _ZN7S3168C33v15Ev();
extern void _ZN7S3168C33v16Ev();
extern void _ZN7S3168C33v17Ev();
extern void _ZN7S3168C33v18Ev();
extern void _ZN7S3168C33v19Ev();
extern void _ZN7S3168C33v20Ev();
extern void _ZN7S3168C33v21Ev();
extern void _ZN7S3168C33v22Ev();
extern void _ZN7S3168C33v23Ev();
extern void _ZN7S3168C33v24Ev();
extern void _ZN7S3168C33v25Ev();
extern void _ZN7S3168C33v26Ev();
extern void _ZN7S3168C33v27Ev();
extern void _ZN7S3168C33v28Ev();
extern void _ZN7S3168C33v29Ev();
extern void _ZN7S3168C33v30Ev();
extern void _ZN7S3168C33v31Ev();
extern void _ZN7S3168C33v32Ev();
extern void _ZN7S3168C33v33Ev();
extern void _ZN7S3168C33v34Ev();
extern void _ZN7S3168C33v35Ev();
extern void _ZN7S3168C33v36Ev();
extern void _ZN7S3168C33v37Ev();
extern void _ZN7S3168C33v38Ev();
extern void _ZN7S3168C33v39Ev();
extern void _ZN7S3168C33v40Ev();
extern void _ZN7S3168C33v41Ev();
extern void _ZN7S3168C33v42Ev();
extern void _ZN7S3168C33v43Ev();
extern void _ZN7S3168C33v44Ev();
extern void _ZN7S3168C33v45Ev();
extern void _ZN7S3168C33v46Ev();
extern void _ZN7S3168C33v47Ev();
extern void _ZN7S3168C33v48Ev();
extern void _ZN7S3168C33v49Ev();
extern void _ZN7S3168C33v50Ev();
extern void _ZN7S3168C33v51Ev();
extern void _ZN7S3168C33v52Ev();
extern void _ZN7S3168C33v53Ev();
extern void _ZN7S3168C33v54Ev();
extern void _ZN7S3168C33v55Ev();
extern void _ZN7S3168C33v56Ev();
extern void _ZN7S3168C33v57Ev();
extern void _ZN7S3168C33v58Ev();
extern void _ZN7S3168C33v59Ev();
extern void _ZN7S3168C33v60Ev();
extern void _ZN7S3168C33v61Ev();
extern void _ZN7S3168C33v62Ev();
extern void _ZN7S3168C33v63Ev();
extern void _ZN7S3168C33v64Ev();
extern void _ZN7S3168C33v65Ev();
extern void _ZN7S3168C33v66Ev();
extern void _ZN7S3168C23v67Ev();
extern void _ZN7S3168C23v68Ev();
extern void _ZN7S3168C23v69Ev();
extern void _ZN7S3168C23v70Ev();
extern void _ZN7S3168C23v71Ev();
extern void _ZN7S3168C23v72Ev();
extern void _ZN7S3168C23v73Ev();
extern void _ZN7S3168C23v74Ev();
extern void _ZN7S3168C23v75Ev();
extern void _ZN7S3168C23v76Ev();
extern void _ZN7S3168C23v77Ev();
extern void _ZN7S3168C23v78Ev();
extern void _ZN7S3168C23v79Ev();
extern void _ZN7S3168C23v80Ev();
extern void _ZN7S3168C23v81Ev();
extern void _ZN7S3168C23v82Ev();
extern void _ZN7S3168C23v83Ev();
extern void _ZN7S3168C23v84Ev();
extern void _ZN7S3168C23v85Ev();
extern void _ZN7S3168C23v86Ev();
extern void _ZN7S3168C23v87Ev();
extern void _ZN7S3168C23v88Ev();
extern void _ZN7S3168C23v89Ev();
extern void _ZN7S3168C23v90Ev();
extern void _ZN7S3168C23v91Ev();
extern void _ZN7S3168C23v92Ev();
extern void _ZN7S3168C23v93Ev();
extern void _ZN7S3168C23v94Ev();
extern void _ZN7S3168C23v95Ev();
extern void _ZN7S3168C23v96Ev();
extern void _ZN7S3168C23v97Ev();
extern void _ZN7S3168C23v98Ev();
extern void _ZN7S3168C23v99Ev();
extern void _ZN7S3168C24v100Ev();
extern void _ZN7S3168C24v101Ev();
extern void _ZN7S3168C24v102Ev();
extern void _ZN7S3168C24v103Ev();
extern void _ZN7S3168C24v104Ev();
extern void _ZN7S3168C24v105Ev();
extern void _ZN7S3168C24v106Ev();
extern void _ZN7S3168C24v107Ev();
extern void _ZN7S3168C24v108Ev();
extern void _ZN7S3168C24v109Ev();
extern void _ZN7S3168C24v110Ev();
extern void _ZN7S3168C24v111Ev();
extern void _ZN7S3168C24v112Ev();
extern void _ZN7S3168C24v113Ev();
extern void _ZN7S3168C24v114Ev();
extern void _ZN7S3168C24v115Ev();
extern void _ZN7S3168C24v116Ev();
extern void _ZN7S3168C24v117Ev();
extern void _ZN7S3168C24v118Ev();
extern void _ZN7S3168C24v119Ev();
extern void _ZN7S3168C24v120Ev();
extern void _ZN7S3168C24v121Ev();
extern void _ZN7S3168C24v122Ev();
extern void _ZN7S3168C24v123Ev();
extern void _ZN7S3168C24v124Ev();
extern void _ZN7S3168C24v125Ev();
extern void _ZN7S3168C24v126Ev();
extern void _ZN7S3168C24v127Ev();
extern void _ZN7S3168C24v128Ev();
extern void _ZN7S3168C24v129Ev();
extern void _ZN7S3168C24v130Ev();
extern void _ZN7S3168C24v131Ev();
extern void _ZN7S3168C24v132Ev();
extern void _ZN7S3168C24v133Ev();
extern void _ZN7S3168C24v134Ev();
extern void _ZN7S3168C24v135Ev();
extern void _ZN7S3168C24v136Ev();
extern void _ZN7S3168C24v137Ev();
extern void _ZN7S3168C24v138Ev();
extern void _ZN7S3168C24v139Ev();
extern void _ZN7S3168C24v140Ev();
extern void _ZN7S3168C24v141Ev();
extern void _ZN7S3168C24v142Ev();
extern void _ZN7S3168C24v143Ev();
extern void _ZN7S3168C24v144Ev();
extern void _ZN7S3168C24v145Ev();
extern void _ZN7S3168C24v146Ev();
extern void _ZN7S3168C24v147Ev();
extern void _ZN7S3168C24v148Ev();
extern void _ZN7S3168C24v149Ev();
extern void _ZN7S3168C24v150Ev();
extern void _ZN7S3168C24v151Ev();
extern void _ZN7S3168C24v152Ev();
extern void _ZN7S3168C24v153Ev();
extern void _ZN7S3168C24v154Ev();
extern void _ZN7S3168C24v155Ev();
extern void _ZN7S3168C24v156Ev();
extern void _ZN7S3168C24v157Ev();
extern void _ZN7S3168C24v158Ev();
extern void _ZN7S3168C24v159Ev();
extern void _ZN7S3168C24v160Ev();
extern void _ZN7S3168C24v161Ev();
extern void _ZN7S3168C24v162Ev();
extern void _ZN7S3168C24v163Ev();
extern void _ZN7S3168C24v164Ev();
extern void _ZN7S3168C24v165Ev();
extern void _ZN7S3168C24v166Ev();
extern void _ZN7S3168C24v167Ev();
extern void _ZN7S3168C24v168Ev();
extern void _ZN7S3168C24v169Ev();
extern void _ZN7S3168C24v170Ev();
extern void _ZN7S3168C24v171Ev();
extern void _ZN7S3168C24v172Ev();
extern void _ZN7S3168C24v173Ev();
extern void _ZN7S3168C24v174Ev();
extern void _ZN7S3168C24v175Ev();
extern void _ZN7S3168C24v176Ev();
extern void _ZN7S3168C24v177Ev();
extern void _ZN7S3168C24v178Ev();
extern void _ZN7S3168C24v179Ev();
extern void _ZN7S3168C24v180Ev();
extern void _ZN7S3168C24v181Ev();
extern void _ZN7S3168C24v182Ev();
extern void _ZN7S3168C24v183Ev();
extern void _ZN7S3168C24v184Ev();
extern void _ZN7S3168C24v185Ev();
extern void _ZN7S3168C24v186Ev();
extern void _ZN7S3168C24v187Ev();
extern void _ZN7S3168C24v188Ev();
extern void _ZN7S3168C24v189Ev();
extern void _ZN7S3168C24v190Ev();
extern void _ZN7S3168C24v191Ev();
extern void _ZN7S3168C24v192Ev();
extern void _ZN7S3168C24v193Ev();
extern void _ZN7S3168C24v194Ev();
extern void _ZN7S3168C24v195Ev();
extern void _ZN7S3168C24v196Ev();
extern void _ZN7S3168C24v197Ev();
extern void _ZN7S3168C24v198Ev();
extern void _ZN7S3168C24v199Ev();
extern void _ZN7S3168C24v200Ev();
extern void _ZN7S3168C24v201Ev();
extern void _ZN7S3168C24v202Ev();
extern void _ZN7S3168C24v203Ev();
extern void _ZN7S3168C24v204Ev();
extern void _ZN7S3168C24v205Ev();
extern void _ZN7S3168C24v206Ev();
extern void _ZN7S3168C24v207Ev();
extern void _ZN7S3168C24v208Ev();
extern void _ZN7S3168C24v209Ev();
extern void _ZN7S3168C12v1Ev();
extern void _ZN7S3168C12v2Ev();
static  VTBL_ENTRY vtc_S3168C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3168C1[0]),
  (VTBL_ENTRY)&_ZN7S3168C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3168C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3168C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3168C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v67Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3168C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v100Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v101Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v102Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v103Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v130Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v131Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v132Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v145Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v146Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v147Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v148Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v149Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v150Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v151Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v152Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v153Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v154Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v155Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v156Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v157Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v158Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v159Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v160Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v161Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v162Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v163Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v164Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v165Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v166Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v167Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v168Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v169Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v170Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v171Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v172Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v173Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v174Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v175Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v176Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v177Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v178Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v179Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v180Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v181Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v182Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v183Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v184Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v185Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v186Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v187Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v188Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v189Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v190Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v191Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v192Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v193Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v194Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v195Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v196Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v197Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v198Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v199Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v200Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v201Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v202Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v203Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v204Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v205Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v206Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v207Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v208Ev,
  (VTBL_ENTRY)&_ZN7S3168C24v209Ev,
  (VTBL_ENTRY)&_ZN7S3168C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3168C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S3168C1[];
extern  VTBL_ENTRY _ZTV7S3168C1[];
Class_Descriptor cd_S3168C1 = {  "S3168C1", // class name
  bases_S3168C1, 2,
  &(vtc_S3168C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(576,440), // object size
  NSPAIRA(_ZTI7S3168C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3168C1),213, //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  S239C6  {
  int s239c6f0;
  __tsi64 s239c6f1;
  void *s239c6f2[4];
  int s239c6f3[2];
  void *s239c6f4;
  ::S3221C4_nt s239c6f5;
  void *s239c6f6[2];
  virtual  ~S239C6(); // _ZN6S239C6D1Ev
  virtual void  v5(); // _ZN6S239C62v5Ev
  virtual void  v6(); // _ZN6S239C62v6Ev
  virtual void  v7(); // _ZN6S239C62v7Ev
  virtual void  v8(); // _ZN6S239C62v8Ev
  virtual void  v9(); // _ZN6S239C62v9Ev
  virtual void  v10(); // _ZN6S239C63v10Ev
  virtual void  v11(); // _ZN6S239C63v11Ev
  virtual void  v12(); // _ZN6S239C63v12Ev
  virtual void  v13(); // _ZN6S239C63v13Ev
  virtual void  v14(); // _ZN6S239C63v14Ev
  virtual void  v15(); // _ZN6S239C63v15Ev
  virtual void  v16(); // _ZN6S239C63v16Ev
  virtual void  v17(); // _ZN6S239C63v17Ev
  virtual void  v18(); // _ZN6S239C63v18Ev
  virtual void  v19(); // _ZN6S239C63v19Ev
  virtual void  v20(); // _ZN6S239C63v20Ev
  virtual void  v21(); // _ZN6S239C63v21Ev
  virtual void  v22(); // _ZN6S239C63v22Ev
  virtual void  v23(); // _ZN6S239C63v23Ev
  virtual void  v24(); // _ZN6S239C63v24Ev
  virtual void  v25(); // _ZN6S239C63v25Ev
  virtual void  v26(); // _ZN6S239C63v26Ev
  virtual void  v27(); // _ZN6S239C63v27Ev
  virtual void  v28(); // _ZN6S239C63v28Ev
  virtual void  v29(); // _ZN6S239C63v29Ev
  virtual void  v30(); // _ZN6S239C63v30Ev
  virtual void  v31(); // _ZN6S239C63v31Ev
  virtual void  v32(); // _ZN6S239C63v32Ev
  virtual void  v33(); // _ZN6S239C63v33Ev
  virtual void  v34(); // _ZN6S239C63v34Ev
  virtual void  v35(); // _ZN6S239C63v35Ev
  virtual void  v36(); // _ZN6S239C63v36Ev
  virtual void  v37(); // _ZN6S239C63v37Ev
  virtual void  v38(); // _ZN6S239C63v38Ev
  virtual void  v39(); // _ZN6S239C63v39Ev
  virtual void  v40(); // _ZN6S239C63v40Ev
  virtual void  v41(); // _ZN6S239C63v41Ev
  virtual void  v42(); // _ZN6S239C63v42Ev
  virtual void  v43(); // _ZN6S239C63v43Ev
  virtual void  v44(); // _ZN6S239C63v44Ev
  virtual void  v45(); // _ZN6S239C63v45Ev
  virtual void  v46(); // _ZN6S239C63v46Ev
  virtual void  v47(); // _ZN6S239C63v47Ev
  virtual void  v48(); // _ZN6S239C63v48Ev
  virtual void  v49(); // _ZN6S239C63v49Ev
  virtual void  v50(); // _ZN6S239C63v50Ev
  virtual void  v51(); // _ZN6S239C63v51Ev
  virtual void  v52(); // _ZN6S239C63v52Ev
  virtual void  v53(); // _ZN6S239C63v53Ev
  virtual void  v54(); // _ZN6S239C63v54Ev
  virtual void  v55(); // _ZN6S239C63v55Ev
  virtual void  v56(); // _ZN6S239C63v56Ev
  virtual void  v57(); // _ZN6S239C63v57Ev
  virtual void  v58(); // _ZN6S239C63v58Ev
  virtual void  v59(); // _ZN6S239C63v59Ev
  virtual void  v60(); // _ZN6S239C63v60Ev
  virtual void  v61(); // _ZN6S239C63v61Ev
  virtual void  v62(); // _ZN6S239C63v62Ev
  virtual void  v63(); // _ZN6S239C63v63Ev
  virtual void  v64(); // _ZN6S239C63v64Ev
  virtual void  v65(); // _ZN6S239C63v65Ev
  virtual void  v66(); // _ZN6S239C63v66Ev
  virtual void  v67(); // _ZN6S239C63v67Ev
  virtual void  v68(); // _ZN6S239C63v68Ev
  S239C6(); // tgen
};
//SIG(-1 S239C6) 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]}


 S239C6 ::~S239C6(){ note_dtor("S239C6", this);}
void  S239C6 ::v5(){vfunc_called(this, "_ZN6S239C62v5Ev");}
void  S239C6 ::v6(){vfunc_called(this, "_ZN6S239C62v6Ev");}
void  S239C6 ::v7(){vfunc_called(this, "_ZN6S239C62v7Ev");}
void  S239C6 ::v8(){vfunc_called(this, "_ZN6S239C62v8Ev");}
void  S239C6 ::v9(){vfunc_called(this, "_ZN6S239C62v9Ev");}
void  S239C6 ::v10(){vfunc_called(this, "_ZN6S239C63v10Ev");}
void  S239C6 ::v11(){vfunc_called(this, "_ZN6S239C63v11Ev");}
void  S239C6 ::v12(){vfunc_called(this, "_ZN6S239C63v12Ev");}
void  S239C6 ::v13(){vfunc_called(this, "_ZN6S239C63v13Ev");}
void  S239C6 ::v14(){vfunc_called(this, "_ZN6S239C63v14Ev");}
void  S239C6 ::v15(){vfunc_called(this, "_ZN6S239C63v15Ev");}
void  S239C6 ::v16(){vfunc_called(this, "_ZN6S239C63v16Ev");}
void  S239C6 ::v17(){vfunc_called(this, "_ZN6S239C63v17Ev");}
void  S239C6 ::v18(){vfunc_called(this, "_ZN6S239C63v18Ev");}
void  S239C6 ::v19(){vfunc_called(this, "_ZN6S239C63v19Ev");}
void  S239C6 ::v20(){vfunc_called(this, "_ZN6S239C63v20Ev");}
void  S239C6 ::v21(){vfunc_called(this, "_ZN6S239C63v21Ev");}
void  S239C6 ::v22(){vfunc_called(this, "_ZN6S239C63v22Ev");}
void  S239C6 ::v23(){vfunc_called(this, "_ZN6S239C63v23Ev");}
void  S239C6 ::v24(){vfunc_called(this, "_ZN6S239C63v24Ev");}
void  S239C6 ::v25(){vfunc_called(this, "_ZN6S239C63v25Ev");}
void  S239C6 ::v26(){vfunc_called(this, "_ZN6S239C63v26Ev");}
void  S239C6 ::v27(){vfunc_called(this, "_ZN6S239C63v27Ev");}
void  S239C6 ::v28(){vfunc_called(this, "_ZN6S239C63v28Ev");}
void  S239C6 ::v29(){vfunc_called(this, "_ZN6S239C63v29Ev");}
void  S239C6 ::v30(){vfunc_called(this, "_ZN6S239C63v30Ev");}
void  S239C6 ::v31(){vfunc_called(this, "_ZN6S239C63v31Ev");}
void  S239C6 ::v32(){vfunc_called(this, "_ZN6S239C63v32Ev");}
void  S239C6 ::v33(){vfunc_called(this, "_ZN6S239C63v33Ev");}
void  S239C6 ::v34(){vfunc_called(this, "_ZN6S239C63v34Ev");}
void  S239C6 ::v35(){vfunc_called(this, "_ZN6S239C63v35Ev");}
void  S239C6 ::v36(){vfunc_called(this, "_ZN6S239C63v36Ev");}
void  S239C6 ::v37(){vfunc_called(this, "_ZN6S239C63v37Ev");}
void  S239C6 ::v38(){vfunc_called(this, "_ZN6S239C63v38Ev");}
void  S239C6 ::v39(){vfunc_called(this, "_ZN6S239C63v39Ev");}
void  S239C6 ::v40(){vfunc_called(this, "_ZN6S239C63v40Ev");}
void  S239C6 ::v41(){vfunc_called(this, "_ZN6S239C63v41Ev");}
void  S239C6 ::v42(){vfunc_called(this, "_ZN6S239C63v42Ev");}
void  S239C6 ::v43(){vfunc_called(this, "_ZN6S239C63v43Ev");}
void  S239C6 ::v44(){vfunc_called(this, "_ZN6S239C63v44Ev");}
void  S239C6 ::v45(){vfunc_called(this, "_ZN6S239C63v45Ev");}
void  S239C6 ::v46(){vfunc_called(this, "_ZN6S239C63v46Ev");}
void  S239C6 ::v47(){vfunc_called(this, "_ZN6S239C63v47Ev");}
void  S239C6 ::v48(){vfunc_called(this, "_ZN6S239C63v48Ev");}
void  S239C6 ::v49(){vfunc_called(this, "_ZN6S239C63v49Ev");}
void  S239C6 ::v50(){vfunc_called(this, "_ZN6S239C63v50Ev");}
void  S239C6 ::v51(){vfunc_called(this, "_ZN6S239C63v51Ev");}
void  S239C6 ::v52(){vfunc_called(this, "_ZN6S239C63v52Ev");}
void  S239C6 ::v53(){vfunc_called(this, "_ZN6S239C63v53Ev");}
void  S239C6 ::v54(){vfunc_called(this, "_ZN6S239C63v54Ev");}
void  S239C6 ::v55(){vfunc_called(this, "_ZN6S239C63v55Ev");}
void  S239C6 ::v56(){vfunc_called(this, "_ZN6S239C63v56Ev");}
void  S239C6 ::v57(){vfunc_called(this, "_ZN6S239C63v57Ev");}
void  S239C6 ::v58(){vfunc_called(this, "_ZN6S239C63v58Ev");}
void  S239C6 ::v59(){vfunc_called(this, "_ZN6S239C63v59Ev");}
void  S239C6 ::v60(){vfunc_called(this, "_ZN6S239C63v60Ev");}
void  S239C6 ::v61(){vfunc_called(this, "_ZN6S239C63v61Ev");}
void  S239C6 ::v62(){vfunc_called(this, "_ZN6S239C63v62Ev");}
void  S239C6 ::v63(){vfunc_called(this, "_ZN6S239C63v63Ev");}
void  S239C6 ::v64(){vfunc_called(this, "_ZN6S239C63v64Ev");}
void  S239C6 ::v65(){vfunc_called(this, "_ZN6S239C63v65Ev");}
void  S239C6 ::v66(){vfunc_called(this, "_ZN6S239C63v66Ev");}
void  S239C6 ::v67(){vfunc_called(this, "_ZN6S239C63v67Ev");}
void  S239C6 ::v68(){vfunc_called(this, "_ZN6S239C63v68Ev");}
S239C6 ::S239C6(){ note_ctor("S239C6", this);} // tgen

static void Test_S239C6()
{
  extern Class_Descriptor cd_S239C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S239C6, buf);
    S239C6 *dp, &lv = *(dp=new (buf) S239C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S239C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S239C6)");
    check_field_offset(lv, s239c6f0, ABISELECT(8,4), "S239C6.s239c6f0");
    check_field_offset(lv, s239c6f1, ABISELECT(16,8), "S239C6.s239c6f1");
    check_field_offset(lv, s239c6f2, ABISELECT(24,16), "S239C6.s239c6f2");
    check_field_offset(lv, s239c6f3, ABISELECT(56,32), "S239C6.s239c6f3");
    check_field_offset(lv, s239c6f4, ABISELECT(64,40), "S239C6.s239c6f4");
    check_field_offset(lv, s239c6f5, ABISELECT(72,44), "S239C6.s239c6f5");
    check_field_offset(lv, s239c6f6, ABISELECT(80,52), "S239C6.s239c6f6");
    test_class_info(&lv, &cd_S239C6);
    dp->~S239C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS239C6(Test_S239C6, "S239C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S239C6C1Ev();
extern void _ZN6S239C6D1Ev();
Name_Map name_map_S239C6[] = {
  NSPAIR(_ZN6S239C6C1Ev),
  NSPAIR(_ZN6S239C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S239C6[];
extern void _ZN6S239C6D1Ev();
extern void _ZN6S239C6D0Ev();
extern void _ZN6S239C62v5Ev();
extern void _ZN6S239C62v6Ev();
extern void _ZN6S239C62v7Ev();
extern void _ZN6S239C62v8Ev();
extern void _ZN6S239C62v9Ev();
extern void _ZN6S239C63v10Ev();
extern void _ZN6S239C63v11Ev();
extern void _ZN6S239C63v12Ev();
extern void _ZN6S239C63v13Ev();
extern void _ZN6S239C63v14Ev();
extern void _ZN6S239C63v15Ev();
extern void _ZN6S239C63v16Ev();
extern void _ZN6S239C63v17Ev();
extern void _ZN6S239C63v18Ev();
extern void _ZN6S239C63v19Ev();
extern void _ZN6S239C63v20Ev();
extern void _ZN6S239C63v21Ev();
extern void _ZN6S239C63v22Ev();
extern void _ZN6S239C63v23Ev();
extern void _ZN6S239C63v24Ev();
extern void _ZN6S239C63v25Ev();
extern void _ZN6S239C63v26Ev();
extern void _ZN6S239C63v27Ev();
extern void _ZN6S239C63v28Ev();
extern void _ZN6S239C63v29Ev();
extern void _ZN6S239C63v30Ev();
extern void _ZN6S239C63v31Ev();
extern void _ZN6S239C63v32Ev();
extern void _ZN6S239C63v33Ev();
extern void _ZN6S239C63v34Ev();
extern void _ZN6S239C63v35Ev();
extern void _ZN6S239C63v36Ev();
extern void _ZN6S239C63v37Ev();
extern void _ZN6S239C63v38Ev();
extern void _ZN6S239C63v39Ev();
extern void _ZN6S239C63v40Ev();
extern void _ZN6S239C63v41Ev();
extern void _ZN6S239C63v42Ev();
extern void _ZN6S239C63v43Ev();
extern void _ZN6S239C63v44Ev();
extern void _ZN6S239C63v45Ev();
extern void _ZN6S239C63v46Ev();
extern void _ZN6S239C63v47Ev();
extern void _ZN6S239C63v48Ev();
extern void _ZN6S239C63v49Ev();
extern void _ZN6S239C63v50Ev();
extern void _ZN6S239C63v51Ev();
extern void _ZN6S239C63v52Ev();
extern void _ZN6S239C63v53Ev();
extern void _ZN6S239C63v54Ev();
extern void _ZN6S239C63v55Ev();
extern void _ZN6S239C63v56Ev();
extern void _ZN6S239C63v57Ev();
extern void _ZN6S239C63v58Ev();
extern void _ZN6S239C63v59Ev();
extern void _ZN6S239C63v60Ev();
extern void _ZN6S239C63v61Ev();
extern void _ZN6S239C63v62Ev();
extern void _ZN6S239C63v63Ev();
extern void _ZN6S239C63v64Ev();
extern void _ZN6S239C63v65Ev();
extern void _ZN6S239C63v66Ev();
extern void _ZN6S239C63v67Ev();
extern void _ZN6S239C63v68Ev();
static  VTBL_ENTRY vtc_S239C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S239C6[0]),
  (VTBL_ENTRY)&_ZN6S239C6D1Ev,
  (VTBL_ENTRY)&_ZN6S239C6D0Ev,
  (VTBL_ENTRY)&_ZN6S239C62v5Ev,
  (VTBL_ENTRY)&_ZN6S239C62v6Ev,
  (VTBL_ENTRY)&_ZN6S239C62v7Ev,
  (VTBL_ENTRY)&_ZN6S239C62v8Ev,
  (VTBL_ENTRY)&_ZN6S239C62v9Ev,
  (VTBL_ENTRY)&_ZN6S239C63v10Ev,
  (VTBL_ENTRY)&_ZN6S239C63v11Ev,
  (VTBL_ENTRY)&_ZN6S239C63v12Ev,
  (VTBL_ENTRY)&_ZN6S239C63v13Ev,
  (VTBL_ENTRY)&_ZN6S239C63v14Ev,
  (VTBL_ENTRY)&_ZN6S239C63v15Ev,
  (VTBL_ENTRY)&_ZN6S239C63v16Ev,
  (VTBL_ENTRY)&_ZN6S239C63v17Ev,
  (VTBL_ENTRY)&_ZN6S239C63v18Ev,
  (VTBL_ENTRY)&_ZN6S239C63v19Ev,
  (VTBL_ENTRY)&_ZN6S239C63v20Ev,
  (VTBL_ENTRY)&_ZN6S239C63v21Ev,
  (VTBL_ENTRY)&_ZN6S239C63v22Ev,
  (VTBL_ENTRY)&_ZN6S239C63v23Ev,
  (VTBL_ENTRY)&_ZN6S239C63v24Ev,
  (VTBL_ENTRY)&_ZN6S239C63v25Ev,
  (VTBL_ENTRY)&_ZN6S239C63v26Ev,
  (VTBL_ENTRY)&_ZN6S239C63v27Ev,
  (VTBL_ENTRY)&_ZN6S239C63v28Ev,
  (VTBL_ENTRY)&_ZN6S239C63v29Ev,
  (VTBL_ENTRY)&_ZN6S239C63v30Ev,
  (VTBL_ENTRY)&_ZN6S239C63v31Ev,
  (VTBL_ENTRY)&_ZN6S239C63v32Ev,
  (VTBL_ENTRY)&_ZN6S239C63v33Ev,
  (VTBL_ENTRY)&_ZN6S239C63v34Ev,
  (VTBL_ENTRY)&_ZN6S239C63v35Ev,
  (VTBL_ENTRY)&_ZN6S239C63v36Ev,
  (VTBL_ENTRY)&_ZN6S239C63v37Ev,
  (VTBL_ENTRY)&_ZN6S239C63v38Ev,
  (VTBL_ENTRY)&_ZN6S239C63v39Ev,
  (VTBL_ENTRY)&_ZN6S239C63v40Ev,
  (VTBL_ENTRY)&_ZN6S239C63v41Ev,
  (VTBL_ENTRY)&_ZN6S239C63v42Ev,
  (VTBL_ENTRY)&_ZN6S239C63v43Ev,
  (VTBL_ENTRY)&_ZN6S239C63v44Ev,
  (VTBL_ENTRY)&_ZN6S239C63v45Ev,
  (VTBL_ENTRY)&_ZN6S239C63v46Ev,
  (VTBL_ENTRY)&_ZN6S239C63v47Ev,
  (VTBL_ENTRY)&_ZN6S239C63v48Ev,
  (VTBL_ENTRY)&_ZN6S239C63v49Ev,
  (VTBL_ENTRY)&_ZN6S239C63v50Ev,
  (VTBL_ENTRY)&_ZN6S239C63v51Ev,
  (VTBL_ENTRY)&_ZN6S239C63v52Ev,
  (VTBL_ENTRY)&_ZN6S239C63v53Ev,
  (VTBL_ENTRY)&_ZN6S239C63v54Ev,
  (VTBL_ENTRY)&_ZN6S239C63v55Ev,
  (VTBL_ENTRY)&_ZN6S239C63v56Ev,
  (VTBL_ENTRY)&_ZN6S239C63v57Ev,
  (VTBL_ENTRY)&_ZN6S239C63v58Ev,
  (VTBL_ENTRY)&_ZN6S239C63v59Ev,
  (VTBL_ENTRY)&_ZN6S239C63v60Ev,
  (VTBL_ENTRY)&_ZN6S239C63v61Ev,
  (VTBL_ENTRY)&_ZN6S239C63v62Ev,
  (VTBL_ENTRY)&_ZN6S239C63v63Ev,
  (VTBL_ENTRY)&_ZN6S239C63v64Ev,
  (VTBL_ENTRY)&_ZN6S239C63v65Ev,
  (VTBL_ENTRY)&_ZN6S239C63v66Ev,
  (VTBL_ENTRY)&_ZN6S239C63v67Ev,
  (VTBL_ENTRY)&_ZN6S239C63v68Ev,
};
extern VTBL_ENTRY _ZTI6S239C6[];
extern  VTBL_ENTRY _ZTV6S239C6[];
Class_Descriptor cd_S239C6 = {  "S239C6", // class name
  0,0,//no base classes
  &(vtc_S239C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S239C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S239C6),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  S239C10  : S3221C7_nt {
};
//SIG(-1 S239C10) C1{ BC2{ m Fp Fi[2]}}



static void Test_S239C10()
{
  extern Class_Descriptor cd_S239C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S239C10, buf);
    S239C10 &lv = *(new (buf) S239C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S239C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S239C10)");
    check_base_class_offset(lv, (S3221C7_nt*), 0, "S239C10");
    test_class_info(&lv, &cd_S239C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS239C10(Test_S239C10, "S239C10", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
static Base_Class bases_S239C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S239C10 = {  "S239C10", // class name
  bases_S239C10, 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  S239C9  : S239C10 {
};
//SIG(-1 S239C9) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S239C9()
{
  extern Class_Descriptor cd_S239C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S239C9, buf);
    S239C9 &lv = *(new (buf) S239C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S239C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S239C9)");
    check_base_class_offset(lv, (S3221C7_nt*)(S239C10*), 0, "S239C9");
    check_base_class_offset(lv, (S239C10*), 0, "S239C9");
    test_class_info(&lv, &cd_S239C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS239C9(Test_S239C9, "S239C9", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
extern Class_Descriptor cd_S239C10;
static Base_Class bases_S239C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S239C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S239C9 = {  "S239C9", // class name
  bases_S239C9, 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  S239C8_nt  : S239C9 {
};
//SIG(-1 S239C8_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S239C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
extern Class_Descriptor cd_S239C10;
extern Class_Descriptor cd_S239C9;
static Base_Class bases_S239C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S239C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S239C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S239C12_nt  {
  void  mf239c12(); // _ZN10S239C12_nt8mf239c12Ev
};
//SIG(-1 S239C12_nt) C1{ m}


void  S239C12_nt ::mf239c12(){}

//skip512 S239C12_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S239C12_nt[];
VTBL_ENTRY *P__ZTI10S239C12_nt = _ZTI10S239C12_nt; 
Class_Descriptor cd_S239C12_nt = {  "S239C12_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI10S239C12_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  S239C5_nt  : S239C6 {
  int s239c5f0[2];
  void *s239c5f1;
  int s239c5f2[2];
  ::S239C8_nt s239c5f3;
  ::S239C8_nt s239c5f4;
  ::S239C12_nt s239c5f5;
  ::S239C8_nt s239c5f6;
  unsigned int s239c5f7:1;
  unsigned int s239c5f8:1;
  unsigned int s239c5f9:1;
  unsigned int s239c5f10:1;
  unsigned int s239c5f11:1;
  int s239c5f12[2];
  virtual  ~S239C5_nt(); // _ZN9S239C5_ntD1Ev
  virtual void  v69(); // _ZN9S239C5_nt3v69Ev
  virtual void  v70(); // _ZN9S239C5_nt3v70Ev
  virtual void  v71(); // _ZN9S239C5_nt3v71Ev
  virtual void  v72(); // _ZN9S239C5_nt3v72Ev
  virtual void  v73(); // _ZN9S239C5_nt3v73Ev
  virtual void  v74(); // _ZN9S239C5_nt3v74Ev
  virtual void  v75(); // _ZN9S239C5_nt3v75Ev
  virtual void  v76(); // _ZN9S239C5_nt3v76Ev
  virtual void  v77(); // _ZN9S239C5_nt3v77Ev
  virtual void  v78(); // _ZN9S239C5_nt3v78Ev
  virtual void  v79(); // _ZN9S239C5_nt3v79Ev
  virtual void  v80(); // _ZN9S239C5_nt3v80Ev
  virtual void  v81(); // _ZN9S239C5_nt3v81Ev
  virtual void  v82(); // _ZN9S239C5_nt3v82Ev
  virtual void  v83(); // _ZN9S239C5_nt3v83Ev
  virtual void  v84(); // _ZN9S239C5_nt3v84Ev
  virtual void  v85(); // _ZN9S239C5_nt3v85Ev
  virtual void  v86(); // _ZN9S239C5_nt3v86Ev
  virtual void  v87(); // _ZN9S239C5_nt3v87Ev
  virtual void  v88(); // _ZN9S239C5_nt3v88Ev
  virtual void  v89(); // _ZN9S239C5_nt3v89Ev
  virtual void  v90(); // _ZN9S239C5_nt3v90Ev
  S239C5_nt(); // tgen
};
//SIG(-1 S239C5_nt) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S239C5_nt ::~S239C5_nt(){ note_dtor("S239C5_nt", this);}
void  S239C5_nt ::v69(){vfunc_called(this, "_ZN9S239C5_nt3v69Ev");}
void  S239C5_nt ::v70(){vfunc_called(this, "_ZN9S239C5_nt3v70Ev");}
void  S239C5_nt ::v71(){vfunc_called(this, "_ZN9S239C5_nt3v71Ev");}
void  S239C5_nt ::v72(){vfunc_called(this, "_ZN9S239C5_nt3v72Ev");}
void  S239C5_nt ::v73(){vfunc_called(this, "_ZN9S239C5_nt3v73Ev");}
void  S239C5_nt ::v74(){vfunc_called(this, "_ZN9S239C5_nt3v74Ev");}
void  S239C5_nt ::v75(){vfunc_called(this, "_ZN9S239C5_nt3v75Ev");}
void  S239C5_nt ::v76(){vfunc_called(this, "_ZN9S239C5_nt3v76Ev");}
void  S239C5_nt ::v77(){vfunc_called(this, "_ZN9S239C5_nt3v77Ev");}
void  S239C5_nt ::v78(){vfunc_called(this, "_ZN9S239C5_nt3v78Ev");}
void  S239C5_nt ::v79(){vfunc_called(this, "_ZN9S239C5_nt3v79Ev");}
void  S239C5_nt ::v80(){vfunc_called(this, "_ZN9S239C5_nt3v80Ev");}
void  S239C5_nt ::v81(){vfunc_called(this, "_ZN9S239C5_nt3v81Ev");}
void  S239C5_nt ::v82(){vfunc_called(this, "_ZN9S239C5_nt3v82Ev");}
void  S239C5_nt ::v83(){vfunc_called(this, "_ZN9S239C5_nt3v83Ev");}
void  S239C5_nt ::v84(){vfunc_called(this, "_ZN9S239C5_nt3v84Ev");}
void  S239C5_nt ::v85(){vfunc_called(this, "_ZN9S239C5_nt3v85Ev");}
void  S239C5_nt ::v86(){vfunc_called(this, "_ZN9S239C5_nt3v86Ev");}
void  S239C5_nt ::v87(){vfunc_called(this, "_ZN9S239C5_nt3v87Ev");}
void  S239C5_nt ::v88(){vfunc_called(this, "_ZN9S239C5_nt3v88Ev");}
void  S239C5_nt ::v89(){vfunc_called(this, "_ZN9S239C5_nt3v89Ev");}
void  S239C5_nt ::v90(){vfunc_called(this, "_ZN9S239C5_nt3v90Ev");}
S239C5_nt ::S239C5_nt(){ note_ctor("S239C5_nt", this);} // tgen

//skip512 S239C5_nt

#else // __cplusplus

extern void _ZN9S239C5_ntC1Ev();
extern void _ZN9S239C5_ntD1Ev();
Name_Map name_map_S239C5_nt[] = {
  NSPAIR(_ZN9S239C5_ntC1Ev),
  NSPAIR(_ZN9S239C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S239C6;
extern VTBL_ENTRY _ZTI6S239C6[];
extern  VTBL_ENTRY _ZTV6S239C6[];
static Base_Class bases_S239C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S239C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S239C5_nt[];
extern void _ZN9S239C5_ntD1Ev();
extern void _ZN9S239C5_ntD0Ev();
extern void _ZN6S239C62v5Ev();
extern void _ZN6S239C62v6Ev();
extern void _ZN6S239C62v7Ev();
extern void _ZN6S239C62v8Ev();
extern void _ZN6S239C62v9Ev();
extern void _ZN6S239C63v10Ev();
extern void _ZN6S239C63v11Ev();
extern void _ZN6S239C63v12Ev();
extern void _ZN6S239C63v13Ev();
extern void _ZN6S239C63v14Ev();
extern void _ZN6S239C63v15Ev();
extern void _ZN6S239C63v16Ev();
extern void _ZN6S239C63v17Ev();
extern void _ZN6S239C63v18Ev();
extern void _ZN6S239C63v19Ev();
extern void _ZN6S239C63v20Ev();
extern void _ZN6S239C63v21Ev();
extern void _ZN6S239C63v22Ev();
extern void _ZN6S239C63v23Ev();
extern void _ZN6S239C63v24Ev();
extern void _ZN6S239C63v25Ev();
extern void _ZN6S239C63v26Ev();
extern void _ZN6S239C63v27Ev();
extern void _ZN6S239C63v28Ev();
extern void _ZN6S239C63v29Ev();
extern void _ZN6S239C63v30Ev();
extern void _ZN6S239C63v31Ev();
extern void _ZN6S239C63v32Ev();
extern void _ZN6S239C63v33Ev();
extern void _ZN6S239C63v34Ev();
extern void _ZN6S239C63v35Ev();
extern void _ZN6S239C63v36Ev();
extern void _ZN6S239C63v37Ev();
extern void _ZN6S239C63v38Ev();
extern void _ZN6S239C63v39Ev();
extern void _ZN6S239C63v40Ev();
extern void _ZN6S239C63v41Ev();
extern void _ZN6S239C63v42Ev();
extern void _ZN6S239C63v43Ev();
extern void _ZN6S239C63v44Ev();
extern void _ZN6S239C63v45Ev();
extern void _ZN6S239C63v46Ev();
extern void _ZN6S239C63v47Ev();
extern void _ZN6S239C63v48Ev();
extern void _ZN6S239C63v49Ev();
extern void _ZN6S239C63v50Ev();
extern void _ZN6S239C63v51Ev();
extern void _ZN6S239C63v52Ev();
extern void _ZN6S239C63v53Ev();
extern void _ZN6S239C63v54Ev();
extern void _ZN6S239C63v55Ev();
extern void _ZN6S239C63v56Ev();
extern void _ZN6S239C63v57Ev();
extern void _ZN6S239C63v58Ev();
extern void _ZN6S239C63v59Ev();
extern void _ZN6S239C63v60Ev();
extern void _ZN6S239C63v61Ev();
extern void _ZN6S239C63v62Ev();
extern void _ZN6S239C63v63Ev();
extern void _ZN6S239C63v64Ev();
extern void _ZN6S239C63v65Ev();
extern void _ZN6S239C63v66Ev();
extern void _ZN6S239C63v67Ev();
extern void _ZN6S239C63v68Ev();
extern void _ZN9S239C5_nt3v69Ev();
extern void _ZN9S239C5_nt3v70Ev();
extern void _ZN9S239C5_nt3v71Ev();
extern void _ZN9S239C5_nt3v72Ev();
extern void _ZN9S239C5_nt3v73Ev();
extern void _ZN9S239C5_nt3v74Ev();
extern void _ZN9S239C5_nt3v75Ev();
extern void _ZN9S239C5_nt3v76Ev();
extern void _ZN9S239C5_nt3v77Ev();
extern void _ZN9S239C5_nt3v78Ev();
extern void _ZN9S239C5_nt3v79Ev();
extern void _ZN9S239C5_nt3v80Ev();
extern void _ZN9S239C5_nt3v81Ev();
extern void _ZN9S239C5_nt3v82Ev();
extern void _ZN9S239C5_nt3v83Ev();
extern void _ZN9S239C5_nt3v84Ev();
extern void _ZN9S239C5_nt3v85Ev();
extern void _ZN9S239C5_nt3v86Ev();
extern void _ZN9S239C5_nt3v87Ev();
extern void _ZN9S239C5_nt3v88Ev();
extern void _ZN9S239C5_nt3v89Ev();
extern void _ZN9S239C5_nt3v90Ev();
static  VTBL_ENTRY vtc_S239C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S239C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S239C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S239C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S239C62v5Ev,
  (VTBL_ENTRY)&_ZN6S239C62v6Ev,
  (VTBL_ENTRY)&_ZN6S239C62v7Ev,
  (VTBL_ENTRY)&_ZN6S239C62v8Ev,
  (VTBL_ENTRY)&_ZN6S239C62v9Ev,
  (VTBL_ENTRY)&_ZN6S239C63v10Ev,
  (VTBL_ENTRY)&_ZN6S239C63v11Ev,
  (VTBL_ENTRY)&_ZN6S239C63v12Ev,
  (VTBL_ENTRY)&_ZN6S239C63v13Ev,
  (VTBL_ENTRY)&_ZN6S239C63v14Ev,
  (VTBL_ENTRY)&_ZN6S239C63v15Ev,
  (VTBL_ENTRY)&_ZN6S239C63v16Ev,
  (VTBL_ENTRY)&_ZN6S239C63v17Ev,
  (VTBL_ENTRY)&_ZN6S239C63v18Ev,
  (VTBL_ENTRY)&_ZN6S239C63v19Ev,
  (VTBL_ENTRY)&_ZN6S239C63v20Ev,
  (VTBL_ENTRY)&_ZN6S239C63v21Ev,
  (VTBL_ENTRY)&_ZN6S239C63v22Ev,
  (VTBL_ENTRY)&_ZN6S239C63v23Ev,
  (VTBL_ENTRY)&_ZN6S239C63v24Ev,
  (VTBL_ENTRY)&_ZN6S239C63v25Ev,
  (VTBL_ENTRY)&_ZN6S239C63v26Ev,
  (VTBL_ENTRY)&_ZN6S239C63v27Ev,
  (VTBL_ENTRY)&_ZN6S239C63v28Ev,
  (VTBL_ENTRY)&_ZN6S239C63v29Ev,
  (VTBL_ENTRY)&_ZN6S239C63v30Ev,
  (VTBL_ENTRY)&_ZN6S239C63v31Ev,
  (VTBL_ENTRY)&_ZN6S239C63v32Ev,
  (VTBL_ENTRY)&_ZN6S239C63v33Ev,
  (VTBL_ENTRY)&_ZN6S239C63v34Ev,
  (VTBL_ENTRY)&_ZN6S239C63v35Ev,
  (VTBL_ENTRY)&_ZN6S239C63v36Ev,
  (VTBL_ENTRY)&_ZN6S239C63v37Ev,
  (VTBL_ENTRY)&_ZN6S239C63v38Ev,
  (VTBL_ENTRY)&_ZN6S239C63v39Ev,
  (VTBL_ENTRY)&_ZN6S239C63v40Ev,
  (VTBL_ENTRY)&_ZN6S239C63v41Ev,
  (VTBL_ENTRY)&_ZN6S239C63v42Ev,
  (VTBL_ENTRY)&_ZN6S239C63v43Ev,
  (VTBL_ENTRY)&_ZN6S239C63v44Ev,
  (VTBL_ENTRY)&_ZN6S239C63v45Ev,
  (VTBL_ENTRY)&_ZN6S239C63v46Ev,
  (VTBL_ENTRY)&_ZN6S239C63v47Ev,
  (VTBL_ENTRY)&_ZN6S239C63v48Ev,
  (VTBL_ENTRY)&_ZN6S239C63v49Ev,
  (VTBL_ENTRY)&_ZN6S239C63v50Ev,
  (VTBL_ENTRY)&_ZN6S239C63v51Ev,
  (VTBL_ENTRY)&_ZN6S239C63v52Ev,
  (VTBL_ENTRY)&_ZN6S239C63v53Ev,
  (VTBL_ENTRY)&_ZN6S239C63v54Ev,
  (VTBL_ENTRY)&_ZN6S239C63v55Ev,
  (VTBL_ENTRY)&_ZN6S239C63v56Ev,
  (VTBL_ENTRY)&_ZN6S239C63v57Ev,
  (VTBL_ENTRY)&_ZN6S239C63v58Ev,
  (VTBL_ENTRY)&_ZN6S239C63v59Ev,
  (VTBL_ENTRY)&_ZN6S239C63v60Ev,
  (VTBL_ENTRY)&_ZN6S239C63v61Ev,
  (VTBL_ENTRY)&_ZN6S239C63v62Ev,
  (VTBL_ENTRY)&_ZN6S239C63v63Ev,
  (VTBL_ENTRY)&_ZN6S239C63v64Ev,
  (VTBL_ENTRY)&_ZN6S239C63v65Ev,
  (VTBL_ENTRY)&_ZN6S239C63v66Ev,
  (VTBL_ENTRY)&_ZN6S239C63v67Ev,
  (VTBL_ENTRY)&_ZN6S239C63v68Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v90Ev,
};
extern VTBL_ENTRY _ZTI9S239C5_nt[];
VTBL_ENTRY *P__ZTI9S239C5_nt = _ZTI9S239C5_nt; 
extern  VTBL_ENTRY _ZTV9S239C5_nt[];
Class_Descriptor cd_S239C5_nt = {  "S239C5_nt", // class name
  bases_S239C5_nt, 1,
  &(vtc_S239C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI9S239C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S239C5_nt),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S239C4_nt  : S239C5_nt {
  unsigned int s239c4f0:1;
  unsigned int s239c4f1:1;
  unsigned int s239c4f2:1;
  ::S3221C17 s239c4f3;
  ::S3221C11 s239c4f4;
  ::S3221C5_nt s239c4f5;
  ::S3168C19 s239c4f6;
  int s239c4f7[3];
  virtual  ~S239C4_nt(); // _ZN9S239C4_ntD1Ev
  virtual void  v91(); // _ZN9S239C4_nt3v91Ev
  virtual void  v92(); // _ZN9S239C4_nt3v92Ev
  virtual void  v93(); // _ZN9S239C4_nt3v93Ev
  virtual void  v94(); // _ZN9S239C4_nt3v94Ev
  virtual void  v95(); // _ZN9S239C4_nt3v95Ev
  virtual void  v96(); // _ZN9S239C4_nt3v96Ev
  virtual void  v97(); // _ZN9S239C4_nt3v97Ev
  virtual void  v98(); // _ZN9S239C4_nt3v98Ev
  virtual void  v99(); // _ZN9S239C4_nt3v99Ev
  virtual void  v100(); // _ZN9S239C4_nt4v100Ev
  virtual void  v101(); // _ZN9S239C4_nt4v101Ev
  virtual void  v102(); // _ZN9S239C4_nt4v102Ev
  virtual void  v103(); // _ZN9S239C4_nt4v103Ev
  virtual void  v104(); // _ZN9S239C4_nt4v104Ev
  virtual void  v105(); // _ZN9S239C4_nt4v105Ev
  virtual void  v106(); // _ZN9S239C4_nt4v106Ev
  virtual void  v107(); // _ZN9S239C4_nt4v107Ev
  virtual void  v108(); // _ZN9S239C4_nt4v108Ev
  virtual void  v109(); // _ZN9S239C4_nt4v109Ev
  virtual void  v110(); // _ZN9S239C4_nt4v110Ev
  S239C4_nt(); // tgen
};
//SIG(-1 S239C4_nt) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S239C4_nt ::~S239C4_nt(){ note_dtor("S239C4_nt", this);}
void  S239C4_nt ::v91(){vfunc_called(this, "_ZN9S239C4_nt3v91Ev");}
void  S239C4_nt ::v92(){vfunc_called(this, "_ZN9S239C4_nt3v92Ev");}
void  S239C4_nt ::v93(){vfunc_called(this, "_ZN9S239C4_nt3v93Ev");}
void  S239C4_nt ::v94(){vfunc_called(this, "_ZN9S239C4_nt3v94Ev");}
void  S239C4_nt ::v95(){vfunc_called(this, "_ZN9S239C4_nt3v95Ev");}
void  S239C4_nt ::v96(){vfunc_called(this, "_ZN9S239C4_nt3v96Ev");}
void  S239C4_nt ::v97(){vfunc_called(this, "_ZN9S239C4_nt3v97Ev");}
void  S239C4_nt ::v98(){vfunc_called(this, "_ZN9S239C4_nt3v98Ev");}
void  S239C4_nt ::v99(){vfunc_called(this, "_ZN9S239C4_nt3v99Ev");}
void  S239C4_nt ::v100(){vfunc_called(this, "_ZN9S239C4_nt4v100Ev");}
void  S239C4_nt ::v101(){vfunc_called(this, "_ZN9S239C4_nt4v101Ev");}
void  S239C4_nt ::v102(){vfunc_called(this, "_ZN9S239C4_nt4v102Ev");}
void  S239C4_nt ::v103(){vfunc_called(this, "_ZN9S239C4_nt4v103Ev");}
void  S239C4_nt ::v104(){vfunc_called(this, "_ZN9S239C4_nt4v104Ev");}
void  S239C4_nt ::v105(){vfunc_called(this, "_ZN9S239C4_nt4v105Ev");}
void  S239C4_nt ::v106(){vfunc_called(this, "_ZN9S239C4_nt4v106Ev");}
void  S239C4_nt ::v107(){vfunc_called(this, "_ZN9S239C4_nt4v107Ev");}
void  S239C4_nt ::v108(){vfunc_called(this, "_ZN9S239C4_nt4v108Ev");}
void  S239C4_nt ::v109(){vfunc_called(this, "_ZN9S239C4_nt4v109Ev");}
void  S239C4_nt ::v110(){vfunc_called(this, "_ZN9S239C4_nt4v110Ev");}
S239C4_nt ::S239C4_nt(){ note_ctor("S239C4_nt", this);} // tgen

//skip512 S239C4_nt

#else // __cplusplus

extern void _ZN9S239C4_ntC1Ev();
extern void _ZN9S239C4_ntD1Ev();
Name_Map name_map_S239C4_nt[] = {
  NSPAIR(_ZN9S239C4_ntC1Ev),
  NSPAIR(_ZN9S239C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S239C6;
extern VTBL_ENTRY _ZTI6S239C6[];
extern  VTBL_ENTRY _ZTV6S239C6[];
extern Class_Descriptor cd_S239C5_nt;
extern VTBL_ENTRY _ZTI9S239C5_nt[];
extern  VTBL_ENTRY _ZTV9S239C5_nt[];
static Base_Class bases_S239C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S239C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S239C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S239C4_nt[];
extern void _ZN9S239C4_ntD1Ev();
extern void _ZN9S239C4_ntD0Ev();
extern void _ZN6S239C62v5Ev();
extern void _ZN6S239C62v6Ev();
extern void _ZN6S239C62v7Ev();
extern void _ZN6S239C62v8Ev();
extern void _ZN6S239C62v9Ev();
extern void _ZN6S239C63v10Ev();
extern void _ZN6S239C63v11Ev();
extern void _ZN6S239C63v12Ev();
extern void _ZN6S239C63v13Ev();
extern void _ZN6S239C63v14Ev();
extern void _ZN6S239C63v15Ev();
extern void _ZN6S239C63v16Ev();
extern void _ZN6S239C63v17Ev();
extern void _ZN6S239C63v18Ev();
extern void _ZN6S239C63v19Ev();
extern void _ZN6S239C63v20Ev();
extern void _ZN6S239C63v21Ev();
extern void _ZN6S239C63v22Ev();
extern void _ZN6S239C63v23Ev();
extern void _ZN6S239C63v24Ev();
extern void _ZN6S239C63v25Ev();
extern void _ZN6S239C63v26Ev();
extern void _ZN6S239C63v27Ev();
extern void _ZN6S239C63v28Ev();
extern void _ZN6S239C63v29Ev();
extern void _ZN6S239C63v30Ev();
extern void _ZN6S239C63v31Ev();
extern void _ZN6S239C63v32Ev();
extern void _ZN6S239C63v33Ev();
extern void _ZN6S239C63v34Ev();
extern void _ZN6S239C63v35Ev();
extern void _ZN6S239C63v36Ev();
extern void _ZN6S239C63v37Ev();
extern void _ZN6S239C63v38Ev();
extern void _ZN6S239C63v39Ev();
extern void _ZN6S239C63v40Ev();
extern void _ZN6S239C63v41Ev();
extern void _ZN6S239C63v42Ev();
extern void _ZN6S239C63v43Ev();
extern void _ZN6S239C63v44Ev();
extern void _ZN6S239C63v45Ev();
extern void _ZN6S239C63v46Ev();
extern void _ZN6S239C63v47Ev();
extern void _ZN6S239C63v48Ev();
extern void _ZN6S239C63v49Ev();
extern void _ZN6S239C63v50Ev();
extern void _ZN6S239C63v51Ev();
extern void _ZN6S239C63v52Ev();
extern void _ZN6S239C63v53Ev();
extern void _ZN6S239C63v54Ev();
extern void _ZN6S239C63v55Ev();
extern void _ZN6S239C63v56Ev();
extern void _ZN6S239C63v57Ev();
extern void _ZN6S239C63v58Ev();
extern void _ZN6S239C63v59Ev();
extern void _ZN6S239C63v60Ev();
extern void _ZN6S239C63v61Ev();
extern void _ZN6S239C63v62Ev();
extern void _ZN6S239C63v63Ev();
extern void _ZN6S239C63v64Ev();
extern void _ZN6S239C63v65Ev();
extern void _ZN6S239C63v66Ev();
extern void _ZN6S239C63v67Ev();
extern void _ZN6S239C63v68Ev();
extern void _ZN9S239C5_nt3v69Ev();
extern void _ZN9S239C5_nt3v70Ev();
extern void _ZN9S239C5_nt3v71Ev();
extern void _ZN9S239C5_nt3v72Ev();
extern void _ZN9S239C5_nt3v73Ev();
extern void _ZN9S239C5_nt3v74Ev();
extern void _ZN9S239C5_nt3v75Ev();
extern void _ZN9S239C5_nt3v76Ev();
extern void _ZN9S239C5_nt3v77Ev();
extern void _ZN9S239C5_nt3v78Ev();
extern void _ZN9S239C5_nt3v79Ev();
extern void _ZN9S239C5_nt3v80Ev();
extern void _ZN9S239C5_nt3v81Ev();
extern void _ZN9S239C5_nt3v82Ev();
extern void _ZN9S239C5_nt3v83Ev();
extern void _ZN9S239C5_nt3v84Ev();
extern void _ZN9S239C5_nt3v85Ev();
extern void _ZN9S239C5_nt3v86Ev();
extern void _ZN9S239C5_nt3v87Ev();
extern void _ZN9S239C5_nt3v88Ev();
extern void _ZN9S239C5_nt3v89Ev();
extern void _ZN9S239C5_nt3v90Ev();
extern void _ZN9S239C4_nt3v91Ev();
extern void _ZN9S239C4_nt3v92Ev();
extern void _ZN9S239C4_nt3v93Ev();
extern void _ZN9S239C4_nt3v94Ev();
extern void _ZN9S239C4_nt3v95Ev();
extern void _ZN9S239C4_nt3v96Ev();
extern void _ZN9S239C4_nt3v97Ev();
extern void _ZN9S239C4_nt3v98Ev();
extern void _ZN9S239C4_nt3v99Ev();
extern void _ZN9S239C4_nt4v100Ev();
extern void _ZN9S239C4_nt4v101Ev();
extern void _ZN9S239C4_nt4v102Ev();
extern void _ZN9S239C4_nt4v103Ev();
extern void _ZN9S239C4_nt4v104Ev();
extern void _ZN9S239C4_nt4v105Ev();
extern void _ZN9S239C4_nt4v106Ev();
extern void _ZN9S239C4_nt4v107Ev();
extern void _ZN9S239C4_nt4v108Ev();
extern void _ZN9S239C4_nt4v109Ev();
extern void _ZN9S239C4_nt4v110Ev();
static  VTBL_ENTRY vtc_S239C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S239C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S239C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S239C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S239C62v5Ev,
  (VTBL_ENTRY)&_ZN6S239C62v6Ev,
  (VTBL_ENTRY)&_ZN6S239C62v7Ev,
  (VTBL_ENTRY)&_ZN6S239C62v8Ev,
  (VTBL_ENTRY)&_ZN6S239C62v9Ev,
  (VTBL_ENTRY)&_ZN6S239C63v10Ev,
  (VTBL_ENTRY)&_ZN6S239C63v11Ev,
  (VTBL_ENTRY)&_ZN6S239C63v12Ev,
  (VTBL_ENTRY)&_ZN6S239C63v13Ev,
  (VTBL_ENTRY)&_ZN6S239C63v14Ev,
  (VTBL_ENTRY)&_ZN6S239C63v15Ev,
  (VTBL_ENTRY)&_ZN6S239C63v16Ev,
  (VTBL_ENTRY)&_ZN6S239C63v17Ev,
  (VTBL_ENTRY)&_ZN6S239C63v18Ev,
  (VTBL_ENTRY)&_ZN6S239C63v19Ev,
  (VTBL_ENTRY)&_ZN6S239C63v20Ev,
  (VTBL_ENTRY)&_ZN6S239C63v21Ev,
  (VTBL_ENTRY)&_ZN6S239C63v22Ev,
  (VTBL_ENTRY)&_ZN6S239C63v23Ev,
  (VTBL_ENTRY)&_ZN6S239C63v24Ev,
  (VTBL_ENTRY)&_ZN6S239C63v25Ev,
  (VTBL_ENTRY)&_ZN6S239C63v26Ev,
  (VTBL_ENTRY)&_ZN6S239C63v27Ev,
  (VTBL_ENTRY)&_ZN6S239C63v28Ev,
  (VTBL_ENTRY)&_ZN6S239C63v29Ev,
  (VTBL_ENTRY)&_ZN6S239C63v30Ev,
  (VTBL_ENTRY)&_ZN6S239C63v31Ev,
  (VTBL_ENTRY)&_ZN6S239C63v32Ev,
  (VTBL_ENTRY)&_ZN6S239C63v33Ev,
  (VTBL_ENTRY)&_ZN6S239C63v34Ev,
  (VTBL_ENTRY)&_ZN6S239C63v35Ev,
  (VTBL_ENTRY)&_ZN6S239C63v36Ev,
  (VTBL_ENTRY)&_ZN6S239C63v37Ev,
  (VTBL_ENTRY)&_ZN6S239C63v38Ev,
  (VTBL_ENTRY)&_ZN6S239C63v39Ev,
  (VTBL_ENTRY)&_ZN6S239C63v40Ev,
  (VTBL_ENTRY)&_ZN6S239C63v41Ev,
  (VTBL_ENTRY)&_ZN6S239C63v42Ev,
  (VTBL_ENTRY)&_ZN6S239C63v43Ev,
  (VTBL_ENTRY)&_ZN6S239C63v44Ev,
  (VTBL_ENTRY)&_ZN6S239C63v45Ev,
  (VTBL_ENTRY)&_ZN6S239C63v46Ev,
  (VTBL_ENTRY)&_ZN6S239C63v47Ev,
  (VTBL_ENTRY)&_ZN6S239C63v48Ev,
  (VTBL_ENTRY)&_ZN6S239C63v49Ev,
  (VTBL_ENTRY)&_ZN6S239C63v50Ev,
  (VTBL_ENTRY)&_ZN6S239C63v51Ev,
  (VTBL_ENTRY)&_ZN6S239C63v52Ev,
  (VTBL_ENTRY)&_ZN6S239C63v53Ev,
  (VTBL_ENTRY)&_ZN6S239C63v54Ev,
  (VTBL_ENTRY)&_ZN6S239C63v55Ev,
  (VTBL_ENTRY)&_ZN6S239C63v56Ev,
  (VTBL_ENTRY)&_ZN6S239C63v57Ev,
  (VTBL_ENTRY)&_ZN6S239C63v58Ev,
  (VTBL_ENTRY)&_ZN6S239C63v59Ev,
  (VTBL_ENTRY)&_ZN6S239C63v60Ev,
  (VTBL_ENTRY)&_ZN6S239C63v61Ev,
  (VTBL_ENTRY)&_ZN6S239C63v62Ev,
  (VTBL_ENTRY)&_ZN6S239C63v63Ev,
  (VTBL_ENTRY)&_ZN6S239C63v64Ev,
  (VTBL_ENTRY)&_ZN6S239C63v65Ev,
  (VTBL_ENTRY)&_ZN6S239C63v66Ev,
  (VTBL_ENTRY)&_ZN6S239C63v67Ev,
  (VTBL_ENTRY)&_ZN6S239C63v68Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v110Ev,
};
extern VTBL_ENTRY _ZTI9S239C4_nt[];
VTBL_ENTRY *P__ZTI9S239C4_nt = _ZTI9S239C4_nt; 
extern  VTBL_ENTRY _ZTV9S239C4_nt[];
Class_Descriptor cd_S239C4_nt = {  "S239C4_nt", // class name
  bases_S239C4_nt, 2,
  &(vtc_S239C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI9S239C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S239C4_nt),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S239C3_nt ::~S239C3_nt(){ note_dtor("S239C3_nt", this);}
void  S239C3_nt ::v111(){vfunc_called(this, "_ZN9S239C3_nt4v111Ev");}
void  S239C3_nt ::v112(){vfunc_called(this, "_ZN9S239C3_nt4v112Ev");}
void  S239C3_nt ::v113(){vfunc_called(this, "_ZN9S239C3_nt4v113Ev");}
void  S239C3_nt ::v114(){vfunc_called(this, "_ZN9S239C3_nt4v114Ev");}
S239C3_nt ::S239C3_nt(){ note_ctor("S239C3_nt", this);} // tgen

//skip512 S239C3_nt

#else // __cplusplus

extern void _ZN9S239C3_ntC1Ev();
extern void _ZN9S239C3_ntD1Ev();
Name_Map name_map_S239C3_nt[] = {
  NSPAIR(_ZN9S239C3_ntC1Ev),
  NSPAIR(_ZN9S239C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S239C6;
extern VTBL_ENTRY _ZTI6S239C6[];
extern  VTBL_ENTRY _ZTV6S239C6[];
extern Class_Descriptor cd_S239C5_nt;
extern VTBL_ENTRY _ZTI9S239C5_nt[];
extern  VTBL_ENTRY _ZTV9S239C5_nt[];
extern Class_Descriptor cd_S239C4_nt;
extern VTBL_ENTRY _ZTI9S239C4_nt[];
extern  VTBL_ENTRY _ZTV9S239C4_nt[];
static Base_Class bases_S239C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S239C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S239C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S239C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S239C3_nt[];
extern void _ZN9S239C3_ntD1Ev();
extern void _ZN9S239C3_ntD0Ev();
extern void _ZN6S239C62v5Ev();
extern void _ZN6S239C62v6Ev();
extern void _ZN6S239C62v7Ev();
extern void _ZN6S239C62v8Ev();
extern void _ZN6S239C62v9Ev();
extern void _ZN6S239C63v10Ev();
extern void _ZN6S239C63v11Ev();
extern void _ZN6S239C63v12Ev();
extern void _ZN6S239C63v13Ev();
extern void _ZN6S239C63v14Ev();
extern void _ZN6S239C63v15Ev();
extern void _ZN6S239C63v16Ev();
extern void _ZN6S239C63v17Ev();
extern void _ZN6S239C63v18Ev();
extern void _ZN6S239C63v19Ev();
extern void _ZN6S239C63v20Ev();
extern void _ZN6S239C63v21Ev();
extern void _ZN6S239C63v22Ev();
extern void _ZN6S239C63v23Ev();
extern void _ZN6S239C63v24Ev();
extern void _ZN6S239C63v25Ev();
extern void _ZN6S239C63v26Ev();
extern void _ZN6S239C63v27Ev();
extern void _ZN6S239C63v28Ev();
extern void _ZN6S239C63v29Ev();
extern void _ZN6S239C63v30Ev();
extern void _ZN6S239C63v31Ev();
extern void _ZN6S239C63v32Ev();
extern void _ZN6S239C63v33Ev();
extern void _ZN6S239C63v34Ev();
extern void _ZN6S239C63v35Ev();
extern void _ZN6S239C63v36Ev();
extern void _ZN6S239C63v37Ev();
extern void _ZN6S239C63v38Ev();
extern void _ZN6S239C63v39Ev();
extern void _ZN6S239C63v40Ev();
extern void _ZN6S239C63v41Ev();
extern void _ZN6S239C63v42Ev();
extern void _ZN6S239C63v43Ev();
extern void _ZN6S239C63v44Ev();
extern void _ZN6S239C63v45Ev();
extern void _ZN6S239C63v46Ev();
extern void _ZN6S239C63v47Ev();
extern void _ZN6S239C63v48Ev();
extern void _ZN6S239C63v49Ev();
extern void _ZN6S239C63v50Ev();
extern void _ZN6S239C63v51Ev();
extern void _ZN6S239C63v52Ev();
extern void _ZN6S239C63v53Ev();
extern void _ZN6S239C63v54Ev();
extern void _ZN6S239C63v55Ev();
extern void _ZN6S239C63v56Ev();
extern void _ZN6S239C63v57Ev();
extern void _ZN6S239C63v58Ev();
extern void _ZN6S239C63v59Ev();
extern void _ZN6S239C63v60Ev();
extern void _ZN6S239C63v61Ev();
extern void _ZN6S239C63v62Ev();
extern void _ZN6S239C63v63Ev();
extern void _ZN6S239C63v64Ev();
extern void _ZN6S239C63v65Ev();
extern void _ZN6S239C63v66Ev();
extern void _ZN6S239C63v67Ev();
extern void _ZN6S239C63v68Ev();
extern void _ZN9S239C5_nt3v69Ev();
extern void _ZN9S239C5_nt3v70Ev();
extern void _ZN9S239C5_nt3v71Ev();
extern void _ZN9S239C5_nt3v72Ev();
extern void _ZN9S239C5_nt3v73Ev();
extern void _ZN9S239C5_nt3v74Ev();
extern void _ZN9S239C5_nt3v75Ev();
extern void _ZN9S239C5_nt3v76Ev();
extern void _ZN9S239C5_nt3v77Ev();
extern void _ZN9S239C5_nt3v78Ev();
extern void _ZN9S239C5_nt3v79Ev();
extern void _ZN9S239C5_nt3v80Ev();
extern void _ZN9S239C5_nt3v81Ev();
extern void _ZN9S239C5_nt3v82Ev();
extern void _ZN9S239C5_nt3v83Ev();
extern void _ZN9S239C5_nt3v84Ev();
extern void _ZN9S239C5_nt3v85Ev();
extern void _ZN9S239C5_nt3v86Ev();
extern void _ZN9S239C5_nt3v87Ev();
extern void _ZN9S239C5_nt3v88Ev();
extern void _ZN9S239C5_nt3v89Ev();
extern void _ZN9S239C5_nt3v90Ev();
extern void _ZN9S239C4_nt3v91Ev();
extern void _ZN9S239C4_nt3v92Ev();
extern void _ZN9S239C4_nt3v93Ev();
extern void _ZN9S239C4_nt3v94Ev();
extern void _ZN9S239C4_nt3v95Ev();
extern void _ZN9S239C4_nt3v96Ev();
extern void _ZN9S239C4_nt3v97Ev();
extern void _ZN9S239C4_nt3v98Ev();
extern void _ZN9S239C4_nt3v99Ev();
extern void _ZN9S239C4_nt4v100Ev();
extern void _ZN9S239C4_nt4v101Ev();
extern void _ZN9S239C4_nt4v102Ev();
extern void _ZN9S239C4_nt4v103Ev();
extern void _ZN9S239C4_nt4v104Ev();
extern void _ZN9S239C4_nt4v105Ev();
extern void _ZN9S239C4_nt4v106Ev();
extern void _ZN9S239C4_nt4v107Ev();
extern void _ZN9S239C4_nt4v108Ev();
extern void _ZN9S239C4_nt4v109Ev();
extern void _ZN9S239C4_nt4v110Ev();
extern void _ZN9S239C3_nt4v111Ev();
extern void _ZN9S239C3_nt4v112Ev();
extern void _ZN9S239C3_nt4v113Ev();
extern void _ZN9S239C3_nt4v114Ev();
static  VTBL_ENTRY vtc_S239C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S239C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S239C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S239C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S239C62v5Ev,
  (VTBL_ENTRY)&_ZN6S239C62v6Ev,
  (VTBL_ENTRY)&_ZN6S239C62v7Ev,
  (VTBL_ENTRY)&_ZN6S239C62v8Ev,
  (VTBL_ENTRY)&_ZN6S239C62v9Ev,
  (VTBL_ENTRY)&_ZN6S239C63v10Ev,
  (VTBL_ENTRY)&_ZN6S239C63v11Ev,
  (VTBL_ENTRY)&_ZN6S239C63v12Ev,
  (VTBL_ENTRY)&_ZN6S239C63v13Ev,
  (VTBL_ENTRY)&_ZN6S239C63v14Ev,
  (VTBL_ENTRY)&_ZN6S239C63v15Ev,
  (VTBL_ENTRY)&_ZN6S239C63v16Ev,
  (VTBL_ENTRY)&_ZN6S239C63v17Ev,
  (VTBL_ENTRY)&_ZN6S239C63v18Ev,
  (VTBL_ENTRY)&_ZN6S239C63v19Ev,
  (VTBL_ENTRY)&_ZN6S239C63v20Ev,
  (VTBL_ENTRY)&_ZN6S239C63v21Ev,
  (VTBL_ENTRY)&_ZN6S239C63v22Ev,
  (VTBL_ENTRY)&_ZN6S239C63v23Ev,
  (VTBL_ENTRY)&_ZN6S239C63v24Ev,
  (VTBL_ENTRY)&_ZN6S239C63v25Ev,
  (VTBL_ENTRY)&_ZN6S239C63v26Ev,
  (VTBL_ENTRY)&_ZN6S239C63v27Ev,
  (VTBL_ENTRY)&_ZN6S239C63v28Ev,
  (VTBL_ENTRY)&_ZN6S239C63v29Ev,
  (VTBL_ENTRY)&_ZN6S239C63v30Ev,
  (VTBL_ENTRY)&_ZN6S239C63v31Ev,
  (VTBL_ENTRY)&_ZN6S239C63v32Ev,
  (VTBL_ENTRY)&_ZN6S239C63v33Ev,
  (VTBL_ENTRY)&_ZN6S239C63v34Ev,
  (VTBL_ENTRY)&_ZN6S239C63v35Ev,
  (VTBL_ENTRY)&_ZN6S239C63v36Ev,
  (VTBL_ENTRY)&_ZN6S239C63v37Ev,
  (VTBL_ENTRY)&_ZN6S239C63v38Ev,
  (VTBL_ENTRY)&_ZN6S239C63v39Ev,
  (VTBL_ENTRY)&_ZN6S239C63v40Ev,
  (VTBL_ENTRY)&_ZN6S239C63v41Ev,
  (VTBL_ENTRY)&_ZN6S239C63v42Ev,
  (VTBL_ENTRY)&_ZN6S239C63v43Ev,
  (VTBL_ENTRY)&_ZN6S239C63v44Ev,
  (VTBL_ENTRY)&_ZN6S239C63v45Ev,
  (VTBL_ENTRY)&_ZN6S239C63v46Ev,
  (VTBL_ENTRY)&_ZN6S239C63v47Ev,
  (VTBL_ENTRY)&_ZN6S239C63v48Ev,
  (VTBL_ENTRY)&_ZN6S239C63v49Ev,
  (VTBL_ENTRY)&_ZN6S239C63v50Ev,
  (VTBL_ENTRY)&_ZN6S239C63v51Ev,
  (VTBL_ENTRY)&_ZN6S239C63v52Ev,
  (VTBL_ENTRY)&_ZN6S239C63v53Ev,
  (VTBL_ENTRY)&_ZN6S239C63v54Ev,
  (VTBL_ENTRY)&_ZN6S239C63v55Ev,
  (VTBL_ENTRY)&_ZN6S239C63v56Ev,
  (VTBL_ENTRY)&_ZN6S239C63v57Ev,
  (VTBL_ENTRY)&_ZN6S239C63v58Ev,
  (VTBL_ENTRY)&_ZN6S239C63v59Ev,
  (VTBL_ENTRY)&_ZN6S239C63v60Ev,
  (VTBL_ENTRY)&_ZN6S239C63v61Ev,
  (VTBL_ENTRY)&_ZN6S239C63v62Ev,
  (VTBL_ENTRY)&_ZN6S239C63v63Ev,
  (VTBL_ENTRY)&_ZN6S239C63v64Ev,
  (VTBL_ENTRY)&_ZN6S239C63v65Ev,
  (VTBL_ENTRY)&_ZN6S239C63v66Ev,
  (VTBL_ENTRY)&_ZN6S239C63v67Ev,
  (VTBL_ENTRY)&_ZN6S239C63v68Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S239C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S239C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S239C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S239C3_nt4v114Ev,
};
extern VTBL_ENTRY _ZTI9S239C3_nt[];
VTBL_ENTRY *P__ZTI9S239C3_nt = _ZTI9S239C3_nt; 
extern  VTBL_ENTRY _ZTV9S239C3_nt[];
Class_Descriptor cd_S239C3_nt = {  "S239C3_nt", // class name
  bases_S239C3_nt, 3,
  &(vtc_S239C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI9S239C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S239C3_nt),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S239C24()
{
  extern Class_Descriptor cd_S239C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S239C24, buf);
    S239C24 &lv = *(new (buf) S239C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S239C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S239C24)");
    check_base_class_offset(lv, (S3221C7_nt*), 0, "S239C24");
    test_class_info(&lv, &cd_S239C24);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS239C24(Test_S239C24, "S239C24", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
static Base_Class bases_S239C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S239C24 = {  "S239C24", // class name
  bases_S239C24, 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  S239C23  : S239C24 {
};
//SIG(-1 S239C23) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S239C23()
{
  extern Class_Descriptor cd_S239C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S239C23, buf);
    S239C23 &lv = *(new (buf) S239C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S239C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S239C23)");
    check_base_class_offset(lv, (S3221C7_nt*)(S239C24*), 0, "S239C23");
    check_base_class_offset(lv, (S239C24*), 0, "S239C23");
    test_class_info(&lv, &cd_S239C23);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS239C23(Test_S239C23, "S239C23", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
extern Class_Descriptor cd_S239C24;
static Base_Class bases_S239C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S239C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S239C23 = {  "S239C23", // class name
  bases_S239C23, 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  S239C2_nt  : S239C3_nt {
  ::S239C23 s239c2f0;
  unsigned int s239c2f1:1;
  virtual  ~S239C2_nt(); // _ZN9S239C2_ntD1Ev
  virtual void  v115(); // _ZN9S239C2_nt4v115Ev
  virtual void  v116(); // _ZN9S239C2_nt4v116Ev
  virtual void  v117(); // _ZN9S239C2_nt4v117Ev
  virtual void  v118(); // _ZN9S239C2_nt4v118Ev
  virtual void  v119(); // _ZN9S239C2_nt4v119Ev
  virtual void  v120(); // _ZN9S239C2_nt4v120Ev
  virtual void  v121(); // _ZN9S239C2_nt4v121Ev
  S239C2_nt(); // tgen
};
//SIG(-1 S239C2_nt) C1{ BC2{ BC3{ BC4{ BC5{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v114 v115 v116 v117 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 FC22{ BC23{ BC10}} Fi:1}


 S239C2_nt ::~S239C2_nt(){ note_dtor("S239C2_nt", this);}
void  S239C2_nt ::v115(){vfunc_called(this, "_ZN9S239C2_nt4v115Ev");}
void  S239C2_nt ::v116(){vfunc_called(this, "_ZN9S239C2_nt4v116Ev");}
void  S239C2_nt ::v117(){vfunc_called(this, "_ZN9S239C2_nt4v117Ev");}
void  S239C2_nt ::v118(){vfunc_called(this, "_ZN9S239C2_nt4v118Ev");}
void  S239C2_nt ::v119(){vfunc_called(this, "_ZN9S239C2_nt4v119Ev");}
void  S239C2_nt ::v120(){vfunc_called(this, "_ZN9S239C2_nt4v120Ev");}
void  S239C2_nt ::v121(){vfunc_called(this, "_ZN9S239C2_nt4v121Ev");}
S239C2_nt ::S239C2_nt(){ note_ctor("S239C2_nt", this);} // tgen

//skip512 S239C2_nt

#else // __cplusplus

extern void _ZN9S239C2_ntC1Ev();
extern void _ZN9S239C2_ntD1Ev();
Name_Map name_map_S239C2_nt[] = {
  NSPAIR(_ZN9S239C2_ntC1Ev),
  NSPAIR(_ZN9S239C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S239C6;
extern VTBL_ENTRY _ZTI6S239C6[];
extern  VTBL_ENTRY _ZTV6S239C6[];
extern Class_Descriptor cd_S239C5_nt;
extern VTBL_ENTRY _ZTI9S239C5_nt[];
extern  VTBL_ENTRY _ZTV9S239C5_nt[];
extern Class_Descriptor cd_S239C4_nt;
extern VTBL_ENTRY _ZTI9S239C4_nt[];
extern  VTBL_ENTRY _ZTV9S239C4_nt[];
extern Class_Descriptor cd_S239C3_nt;
extern VTBL_ENTRY _ZTI9S239C3_nt[];
extern  VTBL_ENTRY _ZTV9S239C3_nt[];
static Base_Class bases_S239C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S239C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S239C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S239C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S239C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S239C2_nt[];
extern void _ZN9S239C2_ntD1Ev();
extern void _ZN9S239C2_ntD0Ev();
extern void _ZN6S239C62v5Ev();
extern void _ZN6S239C62v6Ev();
extern void _ZN6S239C62v7Ev();
extern void _ZN6S239C62v8Ev();
extern void _ZN6S239C62v9Ev();
extern void _ZN6S239C63v10Ev();
extern void _ZN6S239C63v11Ev();
extern void _ZN6S239C63v12Ev();
extern void _ZN6S239C63v13Ev();
extern void _ZN6S239C63v14Ev();
extern void _ZN6S239C63v15Ev();
extern void _ZN6S239C63v16Ev();
extern void _ZN6S239C63v17Ev();
extern void _ZN6S239C63v18Ev();
extern void _ZN6S239C63v19Ev();
extern void _ZN6S239C63v20Ev();
extern void _ZN6S239C63v21Ev();
extern void _ZN6S239C63v22Ev();
extern void _ZN6S239C63v23Ev();
extern void _ZN6S239C63v24Ev();
extern void _ZN6S239C63v25Ev();
extern void _ZN6S239C63v26Ev();
extern void _ZN6S239C63v27Ev();
extern void _ZN6S239C63v28Ev();
extern void _ZN6S239C63v29Ev();
extern void _ZN6S239C63v30Ev();
extern void _ZN6S239C63v31Ev();
extern void _ZN6S239C63v32Ev();
extern void _ZN6S239C63v33Ev();
extern void _ZN6S239C63v34Ev();
extern void _ZN6S239C63v35Ev();
extern void _ZN6S239C63v36Ev();
extern void _ZN6S239C63v37Ev();
extern void _ZN6S239C63v38Ev();
extern void _ZN6S239C63v39Ev();
extern void _ZN6S239C63v40Ev();
extern void _ZN6S239C63v41Ev();
extern void _ZN6S239C63v42Ev();
extern void _ZN6S239C63v43Ev();
extern void _ZN6S239C63v44Ev();
extern void _ZN6S239C63v45Ev();
extern void _ZN6S239C63v46Ev();
extern void _ZN6S239C63v47Ev();
extern void _ZN6S239C63v48Ev();
extern void _ZN6S239C63v49Ev();
extern void _ZN6S239C63v50Ev();
extern void _ZN6S239C63v51Ev();
extern void _ZN6S239C63v52Ev();
extern void _ZN6S239C63v53Ev();
extern void _ZN6S239C63v54Ev();
extern void _ZN6S239C63v55Ev();
extern void _ZN6S239C63v56Ev();
extern void _ZN6S239C63v57Ev();
extern void _ZN6S239C63v58Ev();
extern void _ZN6S239C63v59Ev();
extern void _ZN6S239C63v60Ev();
extern void _ZN6S239C63v61Ev();
extern void _ZN6S239C63v62Ev();
extern void _ZN6S239C63v63Ev();
extern void _ZN6S239C63v64Ev();
extern void _ZN6S239C63v65Ev();
extern void _ZN6S239C63v66Ev();
extern void _ZN6S239C63v67Ev();
extern void _ZN6S239C63v68Ev();
extern void _ZN9S239C5_nt3v69Ev();
extern void _ZN9S239C5_nt3v70Ev();
extern void _ZN9S239C5_nt3v71Ev();
extern void _ZN9S239C5_nt3v72Ev();
extern void _ZN9S239C5_nt3v73Ev();
extern void _ZN9S239C5_nt3v74Ev();
extern void _ZN9S239C5_nt3v75Ev();
extern void _ZN9S239C5_nt3v76Ev();
extern void _ZN9S239C5_nt3v77Ev();
extern void _ZN9S239C5_nt3v78Ev();
extern void _ZN9S239C5_nt3v79Ev();
extern void _ZN9S239C5_nt3v80Ev();
extern void _ZN9S239C5_nt3v81Ev();
extern void _ZN9S239C5_nt3v82Ev();
extern void _ZN9S239C5_nt3v83Ev();
extern void _ZN9S239C5_nt3v84Ev();
extern void _ZN9S239C5_nt3v85Ev();
extern void _ZN9S239C5_nt3v86Ev();
extern void _ZN9S239C5_nt3v87Ev();
extern void _ZN9S239C5_nt3v88Ev();
extern void _ZN9S239C5_nt3v89Ev();
extern void _ZN9S239C5_nt3v90Ev();
extern void _ZN9S239C4_nt3v91Ev();
extern void _ZN9S239C4_nt3v92Ev();
extern void _ZN9S239C4_nt3v93Ev();
extern void _ZN9S239C4_nt3v94Ev();
extern void _ZN9S239C4_nt3v95Ev();
extern void _ZN9S239C4_nt3v96Ev();
extern void _ZN9S239C4_nt3v97Ev();
extern void _ZN9S239C4_nt3v98Ev();
extern void _ZN9S239C4_nt3v99Ev();
extern void _ZN9S239C4_nt4v100Ev();
extern void _ZN9S239C4_nt4v101Ev();
extern void _ZN9S239C4_nt4v102Ev();
extern void _ZN9S239C4_nt4v103Ev();
extern void _ZN9S239C4_nt4v104Ev();
extern void _ZN9S239C4_nt4v105Ev();
extern void _ZN9S239C4_nt4v106Ev();
extern void _ZN9S239C4_nt4v107Ev();
extern void _ZN9S239C4_nt4v108Ev();
extern void _ZN9S239C4_nt4v109Ev();
extern void _ZN9S239C4_nt4v110Ev();
extern void _ZN9S239C3_nt4v111Ev();
extern void _ZN9S239C3_nt4v112Ev();
extern void _ZN9S239C3_nt4v113Ev();
extern void _ZN9S239C3_nt4v114Ev();
extern void _ZN9S239C2_nt4v115Ev();
extern void _ZN9S239C2_nt4v116Ev();
extern void _ZN9S239C2_nt4v117Ev();
extern void _ZN9S239C2_nt4v118Ev();
extern void _ZN9S239C2_nt4v119Ev();
extern void _ZN9S239C2_nt4v120Ev();
extern void _ZN9S239C2_nt4v121Ev();
static  VTBL_ENTRY vtc_S239C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S239C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S239C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S239C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S239C62v5Ev,
  (VTBL_ENTRY)&_ZN6S239C62v6Ev,
  (VTBL_ENTRY)&_ZN6S239C62v7Ev,
  (VTBL_ENTRY)&_ZN6S239C62v8Ev,
  (VTBL_ENTRY)&_ZN6S239C62v9Ev,
  (VTBL_ENTRY)&_ZN6S239C63v10Ev,
  (VTBL_ENTRY)&_ZN6S239C63v11Ev,
  (VTBL_ENTRY)&_ZN6S239C63v12Ev,
  (VTBL_ENTRY)&_ZN6S239C63v13Ev,
  (VTBL_ENTRY)&_ZN6S239C63v14Ev,
  (VTBL_ENTRY)&_ZN6S239C63v15Ev,
  (VTBL_ENTRY)&_ZN6S239C63v16Ev,
  (VTBL_ENTRY)&_ZN6S239C63v17Ev,
  (VTBL_ENTRY)&_ZN6S239C63v18Ev,
  (VTBL_ENTRY)&_ZN6S239C63v19Ev,
  (VTBL_ENTRY)&_ZN6S239C63v20Ev,
  (VTBL_ENTRY)&_ZN6S239C63v21Ev,
  (VTBL_ENTRY)&_ZN6S239C63v22Ev,
  (VTBL_ENTRY)&_ZN6S239C63v23Ev,
  (VTBL_ENTRY)&_ZN6S239C63v24Ev,
  (VTBL_ENTRY)&_ZN6S239C63v25Ev,
  (VTBL_ENTRY)&_ZN6S239C63v26Ev,
  (VTBL_ENTRY)&_ZN6S239C63v27Ev,
  (VTBL_ENTRY)&_ZN6S239C63v28Ev,
  (VTBL_ENTRY)&_ZN6S239C63v29Ev,
  (VTBL_ENTRY)&_ZN6S239C63v30Ev,
  (VTBL_ENTRY)&_ZN6S239C63v31Ev,
  (VTBL_ENTRY)&_ZN6S239C63v32Ev,
  (VTBL_ENTRY)&_ZN6S239C63v33Ev,
  (VTBL_ENTRY)&_ZN6S239C63v34Ev,
  (VTBL_ENTRY)&_ZN6S239C63v35Ev,
  (VTBL_ENTRY)&_ZN6S239C63v36Ev,
  (VTBL_ENTRY)&_ZN6S239C63v37Ev,
  (VTBL_ENTRY)&_ZN6S239C63v38Ev,
  (VTBL_ENTRY)&_ZN6S239C63v39Ev,
  (VTBL_ENTRY)&_ZN6S239C63v40Ev,
  (VTBL_ENTRY)&_ZN6S239C63v41Ev,
  (VTBL_ENTRY)&_ZN6S239C63v42Ev,
  (VTBL_ENTRY)&_ZN6S239C63v43Ev,
  (VTBL_ENTRY)&_ZN6S239C63v44Ev,
  (VTBL_ENTRY)&_ZN6S239C63v45Ev,
  (VTBL_ENTRY)&_ZN6S239C63v46Ev,
  (VTBL_ENTRY)&_ZN6S239C63v47Ev,
  (VTBL_ENTRY)&_ZN6S239C63v48Ev,
  (VTBL_ENTRY)&_ZN6S239C63v49Ev,
  (VTBL_ENTRY)&_ZN6S239C63v50Ev,
  (VTBL_ENTRY)&_ZN6S239C63v51Ev,
  (VTBL_ENTRY)&_ZN6S239C63v52Ev,
  (VTBL_ENTRY)&_ZN6S239C63v53Ev,
  (VTBL_ENTRY)&_ZN6S239C63v54Ev,
  (VTBL_ENTRY)&_ZN6S239C63v55Ev,
  (VTBL_ENTRY)&_ZN6S239C63v56Ev,
  (VTBL_ENTRY)&_ZN6S239C63v57Ev,
  (VTBL_ENTRY)&_ZN6S239C63v58Ev,
  (VTBL_ENTRY)&_ZN6S239C63v59Ev,
  (VTBL_ENTRY)&_ZN6S239C63v60Ev,
  (VTBL_ENTRY)&_ZN6S239C63v61Ev,
  (VTBL_ENTRY)&_ZN6S239C63v62Ev,
  (VTBL_ENTRY)&_ZN6S239C63v63Ev,
  (VTBL_ENTRY)&_ZN6S239C63v64Ev,
  (VTBL_ENTRY)&_ZN6S239C63v65Ev,
  (VTBL_ENTRY)&_ZN6S239C63v66Ev,
  (VTBL_ENTRY)&_ZN6S239C63v67Ev,
  (VTBL_ENTRY)&_ZN6S239C63v68Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S239C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S239C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S239C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S239C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S239C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S239C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S239C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S239C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S239C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S239C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S239C2_nt4v121Ev,
};
extern VTBL_ENTRY _ZTI9S239C2_nt[];
VTBL_ENTRY *P__ZTI9S239C2_nt = _ZTI9S239C2_nt; 
extern  VTBL_ENTRY _ZTV9S239C2_nt[];
Class_Descriptor cd_S239C2_nt = {  "S239C2_nt", // class name
  bases_S239C2_nt, 4,
  &(vtc_S239C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI9S239C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S239C2_nt),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S239C28()
{
  extern Class_Descriptor cd_S239C28;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S239C28, buf);
    S239C28 &lv = *(new (buf) S239C28());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S239C28)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S239C28)");
    check_base_class_offset(lv, (S3221C7_nt*), 0, "S239C28");
    test_class_info(&lv, &cd_S239C28);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS239C28(Test_S239C28, "S239C28", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
static Base_Class bases_S239C28[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S239C28 = {  "S239C28", // class name
  bases_S239C28, 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  S239C27  : S239C28 {
};
//SIG(-1 S239C27) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S239C27()
{
  extern Class_Descriptor cd_S239C27;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S239C27, buf);
    S239C27 &lv = *(new (buf) S239C27());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S239C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S239C27)");
    check_base_class_offset(lv, (S3221C7_nt*)(S239C28*), 0, "S239C27");
    check_base_class_offset(lv, (S239C28*), 0, "S239C27");
    test_class_info(&lv, &cd_S239C27);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS239C27(Test_S239C27, "S239C27", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3221C7_nt;
extern Class_Descriptor cd_S239C28;
static Base_Class bases_S239C27[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S239C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S239C27 = {  "S239C27", // class name
  bases_S239C27, 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  S239C1  : S239C2_nt {
  int s239c1f0;
  ::S239C23 s239c1f1;
  int s239c1f2;
  ::S239C27 s239c1f3;
  virtual  ~S239C1(); // _ZN6S239C1D1Ev
  virtual void  v1(); // _ZN6S239C12v1Ev
  virtual void  v2(); // _ZN6S239C12v2Ev
  virtual void  v3(); // _ZN6S239C12v3Ev
  virtual void  v4(); // _ZN6S239C12v4Ev
  S239C1(); // tgen
};
//SIG(1 S239C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v111 v112 v113 v114 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v115 v116 v117 v118 v119 v120 v121 FC23{ BC24{ BC11}} Fi:1} vd v1 v2 v3 v4 Fi FC23 Fi FC25{ BC26{ BC11}}}


 S239C1 ::~S239C1(){ note_dtor("S239C1", this);}
void  S239C1 ::v1(){vfunc_called(this, "_ZN6S239C12v1Ev");}
void  S239C1 ::v2(){vfunc_called(this, "_ZN6S239C12v2Ev");}
void  S239C1 ::v3(){vfunc_called(this, "_ZN6S239C12v3Ev");}
void  S239C1 ::v4(){vfunc_called(this, "_ZN6S239C12v4Ev");}
S239C1 ::S239C1(){ note_ctor("S239C1", this);} // tgen

static void Test_S239C1()
{
  extern Class_Descriptor cd_S239C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,68)];
    init_test(&cd_S239C1, buf);
    S239C1 *dp, &lv = *(dp=new (buf) S239C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,268), "sizeof(S239C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S239C1)");
    check_base_class_offset(lv, (S239C6*)(S239C5_nt*)(S239C4_nt*)(S239C3_nt*)(S239C2_nt*), 0, "S239C1");
    check_base_class_offset(lv, (S239C5_nt*)(S239C4_nt*)(S239C3_nt*)(S239C2_nt*), 0, "S239C1");
    check_base_class_offset(lv, (S239C4_nt*)(S239C3_nt*)(S239C2_nt*), 0, "S239C1");
    check_base_class_offset(lv, (S239C3_nt*)(S239C2_nt*), 0, "S239C1");
    check_base_class_offset(lv, (S239C2_nt*), 0, "S239C1");
    check_field_offset(lv, s239c1f0, ABISELECT(316,236), "S239C1.s239c1f0");
    check_field_offset(lv, s239c1f1, ABISELECT(320,240), "S239C1.s239c1f1");
    check_field_offset(lv, s239c1f2, ABISELECT(336,252), "S239C1.s239c1f2");
    check_field_offset(lv, s239c1f3, ABISELECT(344,256), "S239C1.s239c1f3");
    test_class_info(&lv, &cd_S239C1);
    dp->~S239C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS239C1(Test_S239C1, "S239C1", ABISELECT(360,268));

#else // __cplusplus

extern void _ZN6S239C1C1Ev();
extern void _ZN6S239C1D1Ev();
Name_Map name_map_S239C1[] = {
  NSPAIR(_ZN6S239C1C1Ev),
  NSPAIR(_ZN6S239C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S239C6;
extern VTBL_ENTRY _ZTI6S239C6[];
extern  VTBL_ENTRY _ZTV6S239C6[];
extern Class_Descriptor cd_S239C5_nt;
extern VTBL_ENTRY _ZTI9S239C5_nt[];
extern  VTBL_ENTRY _ZTV9S239C5_nt[];
extern Class_Descriptor cd_S239C4_nt;
extern VTBL_ENTRY _ZTI9S239C4_nt[];
extern  VTBL_ENTRY _ZTV9S239C4_nt[];
extern Class_Descriptor cd_S239C3_nt;
extern VTBL_ENTRY _ZTI9S239C3_nt[];
extern  VTBL_ENTRY _ZTV9S239C3_nt[];
extern Class_Descriptor cd_S239C2_nt;
extern VTBL_ENTRY _ZTI9S239C2_nt[];
extern  VTBL_ENTRY _ZTV9S239C2_nt[];
static Base_Class bases_S239C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S239C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S239C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S239C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S239C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S239C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S239C1[];
extern void _ZN6S239C1D1Ev();
extern void _ZN6S239C1D0Ev();
extern void _ZN6S239C62v5Ev();
extern void _ZN6S239C62v6Ev();
extern void _ZN6S239C62v7Ev();
extern void _ZN6S239C62v8Ev();
extern void _ZN6S239C62v9Ev();
extern void _ZN6S239C63v10Ev();
extern void _ZN6S239C63v11Ev();
extern void _ZN6S239C63v12Ev();
extern void _ZN6S239C63v13Ev();
extern void _ZN6S239C63v14Ev();
extern void _ZN6S239C63v15Ev();
extern void _ZN6S239C63v16Ev();
extern void _ZN6S239C63v17Ev();
extern void _ZN6S239C63v18Ev();
extern void _ZN6S239C63v19Ev();
extern void _ZN6S239C63v20Ev();
extern void _ZN6S239C63v21Ev();
extern void _ZN6S239C63v22Ev();
extern void _ZN6S239C63v23Ev();
extern void _ZN6S239C63v24Ev();
extern void _ZN6S239C63v25Ev();
extern void _ZN6S239C63v26Ev();
extern void _ZN6S239C63v27Ev();
extern void _ZN6S239C63v28Ev();
extern void _ZN6S239C63v29Ev();
extern void _ZN6S239C63v30Ev();
extern void _ZN6S239C63v31Ev();
extern void _ZN6S239C63v32Ev();
extern void _ZN6S239C63v33Ev();
extern void _ZN6S239C63v34Ev();
extern void _ZN6S239C63v35Ev();
extern void _ZN6S239C63v36Ev();
extern void _ZN6S239C63v37Ev();
extern void _ZN6S239C63v38Ev();
extern void _ZN6S239C63v39Ev();
extern void _ZN6S239C63v40Ev();
extern void _ZN6S239C63v41Ev();
extern void _ZN6S239C63v42Ev();
extern void _ZN6S239C63v43Ev();
extern void _ZN6S239C63v44Ev();
extern void _ZN6S239C63v45Ev();
extern void _ZN6S239C63v46Ev();
extern void _ZN6S239C63v47Ev();
extern void _ZN6S239C63v48Ev();
extern void _ZN6S239C63v49Ev();
extern void _ZN6S239C63v50Ev();
extern void _ZN6S239C63v51Ev();
extern void _ZN6S239C63v52Ev();
extern void _ZN6S239C63v53Ev();
extern void _ZN6S239C63v54Ev();
extern void _ZN6S239C63v55Ev();
extern void _ZN6S239C63v56Ev();
extern void _ZN6S239C63v57Ev();
extern void _ZN6S239C63v58Ev();
extern void _ZN6S239C63v59Ev();
extern void _ZN6S239C63v60Ev();
extern void _ZN6S239C63v61Ev();
extern void _ZN6S239C63v62Ev();
extern void _ZN6S239C63v63Ev();
extern void _ZN6S239C63v64Ev();
extern void _ZN6S239C63v65Ev();
extern void _ZN6S239C63v66Ev();
extern void _ZN6S239C63v67Ev();
extern void _ZN6S239C63v68Ev();
extern void _ZN9S239C5_nt3v69Ev();
extern void _ZN9S239C5_nt3v70Ev();
extern void _ZN9S239C5_nt3v71Ev();
extern void _ZN9S239C5_nt3v72Ev();
extern void _ZN9S239C5_nt3v73Ev();
extern void _ZN9S239C5_nt3v74Ev();
extern void _ZN9S239C5_nt3v75Ev();
extern void _ZN9S239C5_nt3v76Ev();
extern void _ZN9S239C5_nt3v77Ev();
extern void _ZN9S239C5_nt3v78Ev();
extern void _ZN9S239C5_nt3v79Ev();
extern void _ZN9S239C5_nt3v80Ev();
extern void _ZN9S239C5_nt3v81Ev();
extern void _ZN9S239C5_nt3v82Ev();
extern void _ZN9S239C5_nt3v83Ev();
extern void _ZN9S239C5_nt3v84Ev();
extern void _ZN9S239C5_nt3v85Ev();
extern void _ZN9S239C5_nt3v86Ev();
extern void _ZN9S239C5_nt3v87Ev();
extern void _ZN9S239C5_nt3v88Ev();
extern void _ZN9S239C5_nt3v89Ev();
extern void _ZN9S239C5_nt3v90Ev();
extern void _ZN9S239C4_nt3v91Ev();
extern void _ZN9S239C4_nt3v92Ev();
extern void _ZN9S239C4_nt3v93Ev();
extern void _ZN9S239C4_nt3v94Ev();
extern void _ZN9S239C4_nt3v95Ev();
extern void _ZN9S239C4_nt3v96Ev();
extern void _ZN9S239C4_nt3v97Ev();
extern void _ZN9S239C4_nt3v98Ev();
extern void _ZN9S239C4_nt3v99Ev();
extern void _ZN9S239C4_nt4v100Ev();
extern void _ZN9S239C4_nt4v101Ev();
extern void _ZN9S239C4_nt4v102Ev();
extern void _ZN9S239C4_nt4v103Ev();
extern void _ZN9S239C4_nt4v104Ev();
extern void _ZN9S239C4_nt4v105Ev();
extern void _ZN9S239C4_nt4v106Ev();
extern void _ZN9S239C4_nt4v107Ev();
extern void _ZN9S239C4_nt4v108Ev();
extern void _ZN9S239C4_nt4v109Ev();
extern void _ZN9S239C4_nt4v110Ev();
extern void _ZN9S239C3_nt4v111Ev();
extern void _ZN9S239C3_nt4v112Ev();
extern void _ZN9S239C3_nt4v113Ev();
extern void _ZN9S239C3_nt4v114Ev();
extern void _ZN9S239C2_nt4v115Ev();
extern void _ZN9S239C2_nt4v116Ev();
extern void _ZN9S239C2_nt4v117Ev();
extern void _ZN9S239C2_nt4v118Ev();
extern void _ZN9S239C2_nt4v119Ev();
extern void _ZN9S239C2_nt4v120Ev();
extern void _ZN9S239C2_nt4v121Ev();
extern void _ZN6S239C12v1Ev();
extern void _ZN6S239C12v2Ev();
extern void _ZN6S239C12v3Ev();
extern void _ZN6S239C12v4Ev();
static  VTBL_ENTRY vtc_S239C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S239C1[0]),
  (VTBL_ENTRY)&_ZN6S239C1D1Ev,
  (VTBL_ENTRY)&_ZN6S239C1D0Ev,
  (VTBL_ENTRY)&_ZN6S239C62v5Ev,
  (VTBL_ENTRY)&_ZN6S239C62v6Ev,
  (VTBL_ENTRY)&_ZN6S239C62v7Ev,
  (VTBL_ENTRY)&_ZN6S239C62v8Ev,
  (VTBL_ENTRY)&_ZN6S239C62v9Ev,
  (VTBL_ENTRY)&_ZN6S239C63v10Ev,
  (VTBL_ENTRY)&_ZN6S239C63v11Ev,
  (VTBL_ENTRY)&_ZN6S239C63v12Ev,
  (VTBL_ENTRY)&_ZN6S239C63v13Ev,
  (VTBL_ENTRY)&_ZN6S239C63v14Ev,
  (VTBL_ENTRY)&_ZN6S239C63v15Ev,
  (VTBL_ENTRY)&_ZN6S239C63v16Ev,
  (VTBL_ENTRY)&_ZN6S239C63v17Ev,
  (VTBL_ENTRY)&_ZN6S239C63v18Ev,
  (VTBL_ENTRY)&_ZN6S239C63v19Ev,
  (VTBL_ENTRY)&_ZN6S239C63v20Ev,
  (VTBL_ENTRY)&_ZN6S239C63v21Ev,
  (VTBL_ENTRY)&_ZN6S239C63v22Ev,
  (VTBL_ENTRY)&_ZN6S239C63v23Ev,
  (VTBL_ENTRY)&_ZN6S239C63v24Ev,
  (VTBL_ENTRY)&_ZN6S239C63v25Ev,
  (VTBL_ENTRY)&_ZN6S239C63v26Ev,
  (VTBL_ENTRY)&_ZN6S239C63v27Ev,
  (VTBL_ENTRY)&_ZN6S239C63v28Ev,
  (VTBL_ENTRY)&_ZN6S239C63v29Ev,
  (VTBL_ENTRY)&_ZN6S239C63v30Ev,
  (VTBL_ENTRY)&_ZN6S239C63v31Ev,
  (VTBL_ENTRY)&_ZN6S239C63v32Ev,
  (VTBL_ENTRY)&_ZN6S239C63v33Ev,
  (VTBL_ENTRY)&_ZN6S239C63v34Ev,
  (VTBL_ENTRY)&_ZN6S239C63v35Ev,
  (VTBL_ENTRY)&_ZN6S239C63v36Ev,
  (VTBL_ENTRY)&_ZN6S239C63v37Ev,
  (VTBL_ENTRY)&_ZN6S239C63v38Ev,
  (VTBL_ENTRY)&_ZN6S239C63v39Ev,
  (VTBL_ENTRY)&_ZN6S239C63v40Ev,
  (VTBL_ENTRY)&_ZN6S239C63v41Ev,
  (VTBL_ENTRY)&_ZN6S239C63v42Ev,
  (VTBL_ENTRY)&_ZN6S239C63v43Ev,
  (VTBL_ENTRY)&_ZN6S239C63v44Ev,
  (VTBL_ENTRY)&_ZN6S239C63v45Ev,
  (VTBL_ENTRY)&_ZN6S239C63v46Ev,
  (VTBL_ENTRY)&_ZN6S239C63v47Ev,
  (VTBL_ENTRY)&_ZN6S239C63v48Ev,
  (VTBL_ENTRY)&_ZN6S239C63v49Ev,
  (VTBL_ENTRY)&_ZN6S239C63v50Ev,
  (VTBL_ENTRY)&_ZN6S239C63v51Ev,
  (VTBL_ENTRY)&_ZN6S239C63v52Ev,
  (VTBL_ENTRY)&_ZN6S239C63v53Ev,
  (VTBL_ENTRY)&_ZN6S239C63v54Ev,
  (VTBL_ENTRY)&_ZN6S239C63v55Ev,
  (VTBL_ENTRY)&_ZN6S239C63v56Ev,
  (VTBL_ENTRY)&_ZN6S239C63v57Ev,
  (VTBL_ENTRY)&_ZN6S239C63v58Ev,
  (VTBL_ENTRY)&_ZN6S239C63v59Ev,
  (VTBL_ENTRY)&_ZN6S239C63v60Ev,
  (VTBL_ENTRY)&_ZN6S239C63v61Ev,
  (VTBL_ENTRY)&_ZN6S239C63v62Ev,
  (VTBL_ENTRY)&_ZN6S239C63v63Ev,
  (VTBL_ENTRY)&_ZN6S239C63v64Ev,
  (VTBL_ENTRY)&_ZN6S239C63v65Ev,
  (VTBL_ENTRY)&_ZN6S239C63v66Ev,
  (VTBL_ENTRY)&_ZN6S239C63v67Ev,
  (VTBL_ENTRY)&_ZN6S239C63v68Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S239C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S239C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S239C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S239C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S239C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S239C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S239C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S239C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S239C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S239C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S239C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S239C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S239C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN6S239C12v1Ev,
  (VTBL_ENTRY)&_ZN6S239C12v2Ev,
  (VTBL_ENTRY)&_ZN6S239C12v3Ev,
  (VTBL_ENTRY)&_ZN6S239C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S239C1[];
extern  VTBL_ENTRY _ZTV6S239C1[];
Class_Descriptor cd_S239C1 = {  "S239C1", // class name
  bases_S239C1, 5,
  &(vtc_S239C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,268), // object size
  NSPAIRA(_ZTI6S239C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S239C1),125, //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  S274C6  {
  int s274c6f0;
  __tsi64 s274c6f1;
  void *s274c6f2[4];
  int s274c6f3[2];
  void *s274c6f4;
  ::S3221C4_nt s274c6f5;
  void *s274c6f6[2];
  virtual  ~S274C6(); // _ZN6S274C6D1Ev
  virtual void  v7(); // _ZN6S274C62v7Ev
  virtual void  v8(); // _ZN6S274C62v8Ev
  virtual void  v9(); // _ZN6S274C62v9Ev
  virtual void  v10(); // _ZN6S274C63v10Ev
  virtual void  v11(); // _ZN6S274C63v11Ev
  virtual void  v12(); // _ZN6S274C63v12Ev
  virtual void  v13(); // _ZN6S274C63v13Ev
  virtual void  v14(); // _ZN6S274C63v14Ev
  virtual void  v15(); // _ZN6S274C63v15Ev
  virtual void  v16(); // _ZN6S274C63v16Ev
  virtual void  v17(); // _ZN6S274C63v17Ev
  virtual void  v18(); // _ZN6S274C63v18Ev
  virtual void  v19(); // _ZN6S274C63v19Ev
  virtual void  v20(); // _ZN6S274C63v20Ev
  virtual void  v21(); // _ZN6S274C63v21Ev
  virtual void  v22(); // _ZN6S274C63v22Ev
  virtual void  v23(); // _ZN6S274C63v23Ev
  virtual void  v24(); // _ZN6S274C63v24Ev
  virtual void  v25(); // _ZN6S274C63v25Ev
  virtual void  v26(); // _ZN6S274C63v26Ev
  virtual void  v27(); // _ZN6S274C63v27Ev
  virtual void  v28(); // _ZN6S274C63v28Ev
  virtual void  v29(); // _ZN6S274C63v29Ev
  virtual void  v30(); // _ZN6S274C63v30Ev
  virtual void  v31(); // _ZN6S274C63v31Ev
  virtual void  v32(); // _ZN6S274C63v32Ev
  virtual void  v33(); // _ZN6S274C63v33Ev
  virtual void  v34(); // _ZN6S274C63v34Ev
  virtual void  v35(); // _ZN6S274C63v35Ev
  virtual void  v36(); // _ZN6S274C63v36Ev
  virtual void  v37(); // _ZN6S274C63v37Ev
  virtual void  v38(); // _ZN6S274C63v38Ev
  virtual void  v39(); // _ZN6S274C63v39Ev
  virtual void  v40(); // _ZN6S274C63v40Ev
  virtual void  v41(); // _ZN6S274C63v41Ev
  virtual void  v42(); // _ZN6S274C63v42Ev
  virtual void  v43(); // _ZN6S274C63v43Ev
  virtual void  v44(); // _ZN6S274C63v44Ev
  virtual void  v45(); // _ZN6S274C63v45Ev
  virtual void  v46(); // _ZN6S274C63v46Ev
  virtual void  v47(); // _ZN6S274C63v47Ev
  virtual void  v48(); // _ZN6S274C63v48Ev
  virtual void  v49(); // _ZN6S274C63v49Ev
  virtual void  v50(); // _ZN6S274C63v50Ev
  virtual void  v51(); // _ZN6S274C63v51Ev
  virtual void  v52(); // _ZN6S274C63v52Ev
  virtual void  v53(); // _ZN6S274C63v53Ev
  virtual void  v54(); // _ZN6S274C63v54Ev
  virtual void  v55(); // _ZN6S274C63v55Ev
  virtual void  v56(); // _ZN6S274C63v56Ev
  virtual void  v57(); // _ZN6S274C63v57Ev
  virtual void  v58(); // _ZN6S274C63v58Ev
  virtual void  v59(); // _ZN6S274C63v59Ev
  virtual void  v60(); // _ZN6S274C63v60Ev
  virtual void  v61(); // _ZN6S274C63v61Ev
  virtual void  v62(); // _ZN6S274C63v62Ev
  virtual void  v63(); // _ZN6S274C63v63Ev
  virtual void  v64(); // _ZN6S274C63v64Ev
  virtual void  v65(); // _ZN6S274C63v65Ev
  virtual void  v66(); // _ZN6S274C63v66Ev
  virtual void  v67(); // _ZN6S274C63v67Ev
  virtual void  v68(); // _ZN6S274C63v68Ev
  virtual void  v69(); // _ZN6S274C63v69Ev
  virtual void  v70(); // _ZN6S274C63v70Ev
  S274C6(); // tgen
};
//SIG(-1 S274C6) 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]}


 S274C6 ::~S274C6(){ note_dtor("S274C6", this);}
void  S274C6 ::v7(){vfunc_called(this, "_ZN6S274C62v7Ev");}
void  S274C6 ::v8(){vfunc_called(this, "_ZN6S274C62v8Ev");}
void  S274C6 ::v9(){vfunc_called(this, "_ZN6S274C62v9Ev");}
void  S274C6 ::v10(){vfunc_called(this, "_ZN6S274C63v10Ev");}
void  S274C6 ::v11(){vfunc_called(this, "_ZN6S274C63v11Ev");}
void  S274C6 ::v12(){vfunc_called(this, "_ZN6S274C63v12Ev");}
void  S274C6 ::v13(){vfunc_called(this, "_ZN6S274C63v13Ev");}
void  S274C6 ::v14(){vfunc_called(this, "_ZN6S274C63v14Ev");}
void  S274C6 ::v15(){vfunc_called(this, "_ZN6S274C63v15Ev");}
void  S274C6 ::v16(){vfunc_called(this, "_ZN6S274C63v16Ev");}
void  S274C6 ::v17(){vfunc_called(this, "_ZN6S274C63v17Ev");}
void  S274C6 ::v18(){vfunc_called(this, "_ZN6S274C63v18Ev");}
void  S274C6 ::v19(){vfunc_called(this, "_ZN6S274C63v19Ev");}
void  S274C6 ::v20(){vfunc_called(this, "_ZN6S274C63v20Ev");}
void  S274C6 ::v21(){vfunc_called(this, "_ZN6S274C63v21Ev");}
void  S274C6 ::v22(){vfunc_called(this, "_ZN6S274C63v22Ev");}
void  S274C6 ::v23(){vfunc_called(this, "_ZN6S274C63v23Ev");}
void  S274C6 ::v24(){vfunc_called(this, "_ZN6S274C63v24Ev");}
void  S274C6 ::v25(){vfunc_called(this, "_ZN6S274C63v25Ev");}
void  S274C6 ::v26(){vfunc_called(this, "_ZN6S274C63v26Ev");}
void  S274C6 ::v27(){vfunc_called(this, "_ZN6S274C63v27Ev");}
void  S274C6 ::v28(){vfunc_called(this, "_ZN6S274C63v28Ev");}
void  S274C6 ::v29(){vfunc_called(this, "_ZN6S274C63v29Ev");}
void  S274C6 ::v30(){vfunc_called(this, "_ZN6S274C63v30Ev");}
void  S274C6 ::v31(){vfunc_called(this, "_ZN6S274C63v31Ev");}
void  S274C6 ::v32(){vfunc_called(this, "_ZN6S274C63v32Ev");}
void  S274C6 ::v33(){vfunc_called(this, "_ZN6S274C63v33Ev");}
void  S274C6 ::v34(){vfunc_called(this, "_ZN6S274C63v34Ev");}
void  S274C6 ::v35(){vfunc_called(this, "_ZN6S274C63v35Ev");}
void  S274C6 ::v36(){vfunc_called(this, "_ZN6S274C63v36Ev");}
void  S274C6 ::v37(){vfunc_called(this, "_ZN6S274C63v37Ev");}
void  S274C6 ::v38(){vfunc_called(this, "_ZN6S274C63v38Ev");}
void  S274C6 ::v39(){vfunc_called(this, "_ZN6S274C63v39Ev");}
void  S274C6 ::v40(){vfunc_called(this, "_ZN6S274C63v40Ev");}
void  S274C6 ::v41(){vfunc_called(this, "_ZN6S274C63v41Ev");}
void  S274C6 ::v42(){vfunc_called(this, "_ZN6S274C63v42Ev");}
void  S274C6 ::v43(){vfunc_called(this, "_ZN6S274C63v43Ev");}
void  S274C6 ::v44(){vfunc_called(this, "_ZN6S274C63v44Ev");}
void  S274C6 ::v45(){vfunc_called(this, "_ZN6S274C63v45Ev");}
void  S274C6 ::v46(){vfunc_called(this, "_ZN6S274C63v46Ev");}
void  S274C6 ::v47(){vfunc_called(this, "_ZN6S274C63v47Ev");}
void  S274C6 ::v48(){vfunc_called(this, "_ZN6S274C63v48Ev");}
void  S274C6 ::v49(){vfunc_called(this, "_ZN6S274C63v49Ev");}
void  S274C6 ::v50(){vfunc_called(this, "_ZN6S274C63v50Ev");}
void  S274C6 ::v51(){vfunc_called(this, "_ZN6S274C63v51Ev");}
void  S274C6 ::v52(){vfunc_called(this, "_ZN6S274C63v52Ev");}
void  S274C6 ::v53(){vfunc_called(this, "_ZN6S274C63v53Ev");}
void  S274C6 ::v54(){vfunc_called(this, "_ZN6S274C63v54Ev");}
void  S274C6 ::v55(){vfunc_called(this, "_ZN6S274C63v55Ev");}
void  S274C6 ::v56(){vfunc_called(this, "_ZN6S274C63v56Ev");}
void  S274C6 ::v57(){vfunc_called(this, "_ZN6S274C63v57Ev");}
void  S274C6 ::v58(){vfunc_called(this, "_ZN6S274C63v58Ev");}
void  S274C6 ::v59(){vfunc_called(this, "_ZN6S274C63v59Ev");}
void  S274C6 ::v60(){vfunc_called(this, "_ZN6S274C63v60Ev");}
void  S274C6 ::v61(){vfunc_called(this, "_ZN6S274C63v61Ev");}
void  S274C6 ::v62(){vfunc_called(this, "_ZN6S274C63v62Ev");}
void  S274C6 ::v63(){vfunc_called(this, "_ZN6S274C63v63Ev");}
void  S274C6 ::v64(){vfunc_called(this, "_ZN6S274C63v64Ev");}
void  S274C6 ::v65(){vfunc_called(this, "_ZN6S274C63v65Ev");}
void  S274C6 ::v66(){vfunc_called(this, "_ZN6S274C63v66Ev");}
void  S274C6 ::v67(){vfunc_called(this, "_ZN6S274C63v67Ev");}
void  S274C6 ::v68(){vfunc_called(this, "_ZN6S274C63v68Ev");}
void  S274C6 ::v69(){vfunc_called(this, "_ZN6S274C63v69Ev");}
void  S274C6 ::v70(){vfunc_called(this, "_ZN6S274C63v70Ev");}
S274C6 ::S274C6(){ note_ctor("S274C6", this);} // tgen

static void Test_S274C6()
{
  extern Class_Descriptor cd_S274C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S274C6, buf);
    S274C6 *dp, &lv = *(dp=new (buf) S274C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S274C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S274C6)");
    check_field_offset(lv, s274c6f0, ABISELECT(8,4), "S274C6.s274c6f0");
    check_field_offset(lv, s274c6f1, ABISELECT(16,8), "S274C6.s274c6f1");
    check_field_offset(lv, s274c6f2, ABISELECT(24,16), "S274C6.s274c6f2");
    check_field_offset(lv, s274c6f3, ABISELECT(56,32), "S274C6.s274c6f3");
    check_field_offset(lv, s274c6f4, ABISELECT(64,40), "S274C6.s274c6f4");
    check_field_offset(lv, s274c6f5, ABISELECT(72,44), "S274C6.s274c6f5");
    check_field_offset(lv, s274c6f6, ABISELECT(80,52), "S274C6.s274c6f6");
    test_class_info(&lv, &cd_S274C6);
    dp->~S274C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS274C6(Test_S274C6, "S274C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S274C6C1Ev();
extern void _ZN6S274C6D1Ev();
Name_Map name_map_S274C6[] = {
  NSPAIR(_ZN6S274C6C1Ev),
  NSPAIR(_ZN6S274C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S274C6[];
extern void _ZN6S274C6D1Ev();
extern void _ZN6S274C6D0Ev();
extern void _ZN6S274C62v7Ev();
extern void _ZN6S274C62v8Ev();
extern void _ZN6S274C62v9Ev();
extern void _ZN6S274C63v10Ev();
extern void _ZN6S274C63v11Ev();
extern void _ZN6S274C63v12Ev();
extern void _ZN6S274C63v13Ev();
extern void _ZN6S274C63v14Ev();
extern void _ZN6S274C63v15Ev();
extern void _ZN6S274C63v16Ev();
extern void _ZN6S274C63v17Ev();
extern void _ZN6S274C63v18Ev();
extern void _ZN6S274C63v19Ev();
extern void _ZN6S274C63v20Ev();
extern void _ZN6S274C63v21Ev();
extern void _ZN6S274C63v22Ev();
extern void _ZN6S274C63v23Ev();
extern void _ZN6S274C63v24Ev();
extern void _ZN6S274C63v25Ev();
extern void _ZN6S274C63v26Ev();
extern void _ZN6S274C63v27Ev();
extern void _ZN6S274C63v28Ev();
extern void _ZN6S274C63v29Ev();
extern void _ZN6S274C63v30Ev();
extern void _ZN6S274C63v31Ev();
extern void _ZN6S274C63v32Ev();
extern void _ZN6S274C63v33Ev();
extern void _ZN6S274C63v34Ev();
extern void _ZN6S274C63v35Ev();
extern void _ZN6S274C63v36Ev();
extern void _ZN6S274C63v37Ev();
extern void _ZN6S274C63v38Ev();
extern void _ZN6S274C63v39Ev();
extern void _ZN6S274C63v40Ev();
extern void _ZN6S274C63v41Ev();
extern void _ZN6S274C63v42Ev();
extern void _ZN6S274C63v43Ev();
extern void _ZN6S274C63v44Ev();
extern void _ZN6S274C63v45Ev();
extern void _ZN6S274C63v46Ev();
extern void _ZN6S274C63v47Ev();
extern void _ZN6S274C63v48Ev();
extern void _ZN6S274C63v49Ev();
extern void _ZN6S274C63v50Ev();
extern void _ZN6S274C63v51Ev();
extern void _ZN6S274C63v52Ev();
extern void _ZN6S274C63v53Ev();
extern void _ZN6S274C63v54Ev();
extern void _ZN6S274C63v55Ev();
extern void _ZN6S274C63v56Ev();
extern void _ZN6S274C63v57Ev();
extern void _ZN6S274C63v58Ev();
extern void _ZN6S274C63v59Ev();
extern void _ZN6S274C63v60Ev();
extern void _ZN6S274C63v61Ev();
extern void _ZN6S274C63v62Ev();
extern void _ZN6S274C63v63Ev();
extern void _ZN6S274C63v64Ev();
extern void _ZN6S274C63v65Ev();
extern void _ZN6S274C63v66Ev();
extern void _ZN6S274C63v67Ev();
extern void _ZN6S274C63v68Ev();
extern void _ZN6S274C63v69Ev();
extern void _ZN6S274C63v70Ev();
static  VTBL_ENTRY vtc_S274C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S274C6[0]),
  (VTBL_ENTRY)&_ZN6S274C6D1Ev,
  (VTBL_ENTRY)&_ZN6S274C6D0Ev,
  (VTBL_ENTRY)&_ZN6S274C62v7Ev,
  (VTBL_ENTRY)&_ZN6S274C62v8Ev,
  (VTBL_ENTRY)&_ZN6S274C62v9Ev,
  (VTBL_ENTRY)&_ZN6S274C63v10Ev,
  (VTBL_ENTRY)&_ZN6S274C63v11Ev,
  (VTBL_ENTRY)&_ZN6S274C63v12Ev,
  (VTBL_ENTRY)&_ZN6S274C63v13Ev,
  (VTBL_ENTRY)&_ZN6S274C63v14Ev,
  (VTBL_ENTRY)&_ZN6S274C63v15Ev,
  (VTBL_ENTRY)&_ZN6S274C63v16Ev,
  (VTBL_ENTRY)&_ZN6S274C63v17Ev,
  (VTBL_ENTRY)&_ZN6S274C63v18Ev,
  (VTBL_ENTRY)&_ZN6S274C63v19Ev,
  (VTBL_ENTRY)&_ZN6S274C63v20Ev,
  (VTBL_ENTRY)&_ZN6S274C63v21Ev,
  (VTBL_ENTRY)&_ZN6S274C63v22Ev,
  (VTBL_ENTRY)&_ZN6S274C63v23Ev,
  (VTBL_ENTRY)&_ZN6S274C63v24Ev,
  (VTBL_ENTRY)&_ZN6S274C63v25Ev,
  (VTBL_ENTRY)&_ZN6S274C63v26Ev,
  (VTBL_ENTRY)&_ZN6S274C63v27Ev,
  (VTBL_ENTRY)&_ZN6S274C63v28Ev,
  (VTBL_ENTRY)&_ZN6S274C63v29Ev,
  (VTBL_ENTRY)&_ZN6S274C63v30Ev,
  (VTBL_ENTRY)&_ZN6S274C63v31Ev,
  (VTBL_ENTRY)&_ZN6S274C63v32Ev,
  (VTBL_ENTRY)&_ZN6S274C63v33Ev,
  (VTBL_ENTRY)&_ZN6S274C63v34Ev,
  (VTBL_ENTRY)&_ZN6S274C63v35Ev,
  (VTBL_ENTRY)&_ZN6S274C63v36Ev,
  (VTBL_ENTRY)&_ZN6S274C63v37Ev,
  (VTBL_ENTRY)&_ZN6S274C63v38Ev,
  (VTBL_ENTRY)&_ZN6S274C63v39Ev,
  (VTBL_ENTRY)&_ZN6S274C63v40Ev,
  (VTBL_ENTRY)&_ZN6S274C63v41Ev,
  (VTBL_ENTRY)&_ZN6S274C63v42Ev,
  (VTBL_ENTRY)&_ZN6S274C63v43Ev,
  (VTBL_ENTRY)&_ZN6S274C63v44Ev,
  (VTBL_ENTRY)&_ZN6S274C63v45Ev,
  (VTBL_ENTRY)&_ZN6S274C63v46Ev,
  (VTBL_ENTRY)&_ZN6S274C63v47Ev,
  (VTBL_ENTRY)&_ZN6S274C63v48Ev,
  (VTBL_ENTRY)&_ZN6S274C63v49Ev,
  (VTBL_ENTRY)&_ZN6S274C63v50Ev,
  (VTBL_ENTRY)&_ZN6S274C63v51Ev,
  (VTBL_ENTRY)&_ZN6S274C63v52Ev,
  (VTBL_ENTRY)&_ZN6S274C63v53Ev,
  (VTBL_ENTRY)&_ZN6S274C63v54Ev,
  (VTBL_ENTRY)&_ZN6S274C63v55Ev,
  (VTBL_ENTRY)&_ZN6S274C63v56Ev,
  (VTBL_ENTRY)&_ZN6S274C63v57Ev,
  (VTBL_ENTRY)&_ZN6S274C63v58Ev,
  (VTBL_ENTRY)&_ZN6S274C63v59Ev,
  (VTBL_ENTRY)&_ZN6S274C63v60Ev,
  (VTBL_ENTRY)&_ZN6S274C63v61Ev,
  (VTBL_ENTRY)&_ZN6S274C63v62Ev,
  (VTBL_ENTRY)&_ZN6S274C63v63Ev,
  (VTBL_ENTRY)&_ZN6S274C63v64Ev,
  (VTBL_ENTRY)&_ZN6S274C63v65Ev,
  (VTBL_ENTRY)&_ZN6S274C63v66Ev,
  (VTBL_ENTRY)&_ZN6S274C63v67Ev,
  (VTBL_ENTRY)&_ZN6S274C63v68Ev,
  (VTBL_ENTRY)&_ZN6S274C63v69Ev,
  (VTBL_ENTRY)&_ZN6S274C63v70Ev,
};
extern VTBL_ENTRY _ZTI6S274C6[];
extern  VTBL_ENTRY _ZTV6S274C6[];
Class_Descriptor cd_S274C6 = {  "S274C6", // class name
  0,0,//no base classes
  &(vtc_S274C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S274C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S274C6),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  S274C5  : S274C6 {
  int s274c5f0[2];
  void *s274c5f1;
  int s274c5f2[2];
  ::S239C8_nt s274c5f3;
  ::S239C8_nt s274c5f4;
  ::S239C12_nt s274c5f5;
  ::S239C8_nt s274c5f6;
  unsigned int s274c5f7:1;
  unsigned int s274c5f8:1;
  unsigned int s274c5f9:1;
  unsigned int s274c5f10:1;
  unsigned int s274c5f11:1;
  int s274c5f12[2];
  virtual  ~S274C5(); // _ZN6S274C5D1Ev
  virtual void  v71(); // _ZN6S274C53v71Ev
  virtual void  v72(); // _ZN6S274C53v72Ev
  virtual void  v73(); // _ZN6S274C53v73Ev
  virtual void  v74(); // _ZN6S274C53v74Ev
  virtual void  v75(); // _ZN6S274C53v75Ev
  virtual void  v76(); // _ZN6S274C53v76Ev
  virtual void  v77(); // _ZN6S274C53v77Ev
  virtual void  v78(); // _ZN6S274C53v78Ev
  virtual void  v79(); // _ZN6S274C53v79Ev
  virtual void  v80(); // _ZN6S274C53v80Ev
  virtual void  v81(); // _ZN6S274C53v81Ev
  virtual void  v82(); // _ZN6S274C53v82Ev
  virtual void  v83(); // _ZN6S274C53v83Ev
  virtual void  v84(); // _ZN6S274C53v84Ev
  virtual void  v85(); // _ZN6S274C53v85Ev
  virtual void  v86(); // _ZN6S274C53v86Ev
  virtual void  v87(); // _ZN6S274C53v87Ev
  virtual void  v88(); // _ZN6S274C53v88Ev
  virtual void  v89(); // _ZN6S274C53v89Ev
  virtual void  v90(); // _ZN6S274C53v90Ev
  virtual void  v91(); // _ZN6S274C53v91Ev
  virtual void  v92(); // _ZN6S274C53v92Ev
  S274C5(); // tgen
};
//SIG(-1 S274C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S274C5 ::~S274C5(){ note_dtor("S274C5", this);}
void  S274C5 ::v71(){vfunc_called(this, "_ZN6S274C53v71Ev");}
void  S274C5 ::v72(){vfunc_called(this, "_ZN6S274C53v72Ev");}
void  S274C5 ::v73(){vfunc_called(this, "_ZN6S274C53v73Ev");}
void  S274C5 ::v74(){vfunc_called(this, "_ZN6S274C53v74Ev");}
void  S274C5 ::v75(){vfunc_called(this, "_ZN6S274C53v75Ev");}
void  S274C5 ::v76(){vfunc_called(this, "_ZN6S274C53v76Ev");}
void  S274C5 ::v77(){vfunc_called(this, "_ZN6S274C53v77Ev");}
void  S274C5 ::v78(){vfunc_called(this, "_ZN6S274C53v78Ev");}
void  S274C5 ::v79(){vfunc_called(this, "_ZN6S274C53v79Ev");}
void  S274C5 ::v80(){vfunc_called(this, "_ZN6S274C53v80Ev");}
void  S274C5 ::v81(){vfunc_called(this, "_ZN6S274C53v81Ev");}
void  S274C5 ::v82(){vfunc_called(this, "_ZN6S274C53v82Ev");}
void  S274C5 ::v83(){vfunc_called(this, "_ZN6S274C53v83Ev");}
void  S274C5 ::v84(){vfunc_called(this, "_ZN6S274C53v84Ev");}
void  S274C5 ::v85(){vfunc_called(this, "_ZN6S274C53v85Ev");}
void  S274C5 ::v86(){vfunc_called(this, "_ZN6S274C53v86Ev");}
void  S274C5 ::v87(){vfunc_called(this, "_ZN6S274C53v87Ev");}
void  S274C5 ::v88(){vfunc_called(this, "_ZN6S274C53v88Ev");}
void  S274C5 ::v89(){vfunc_called(this, "_ZN6S274C53v89Ev");}
void  S274C5 ::v90(){vfunc_called(this, "_ZN6S274C53v90Ev");}
void  S274C5 ::v91(){vfunc_called(this, "_ZN6S274C53v91Ev");}
void  S274C5 ::v92(){vfunc_called(this, "_ZN6S274C53v92Ev");}
S274C5 ::S274C5(){ note_ctor("S274C5", this);} // tgen

static void Test_S274C5()
{
  extern Class_Descriptor cd_S274C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S274C5, buf);
    S274C5 *dp, &lv = *(dp=new (buf) S274C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S274C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S274C5)");
    check_base_class_offset(lv, (S274C6*), 0, "S274C5");
    check_field_offset(lv, s274c5f0, ABISELECT(96,60), "S274C5.s274c5f0");
    check_field_offset(lv, s274c5f1, ABISELECT(104,68), "S274C5.s274c5f1");
    check_field_offset(lv, s274c5f2, ABISELECT(112,72), "S274C5.s274c5f2");
    check_field_offset(lv, s274c5f3, ABISELECT(120,80), "S274C5.s274c5f3");
    check_field_offset(lv, s274c5f4, ABISELECT(136,92), "S274C5.s274c5f4");
    check_field_offset(lv, s274c5f5, ABISELECT(152,104), "S274C5.s274c5f5");
    check_field_offset(lv, s274c5f6, ABISELECT(160,108), "S274C5.s274c5f6");
    set_bf_and_test(lv, s274c5f7, ABISELECT(176,120), 0, 1, 1, "S274C5");
    set_bf_and_test(lv, s274c5f8, ABISELECT(176,120), 1, 1, 1, "S274C5");
    set_bf_and_test(lv, s274c5f9, ABISELECT(176,120), 2, 1, 1, "S274C5");
    set_bf_and_test(lv, s274c5f10, ABISELECT(176,120), 3, 1, 1, "S274C5");
    set_bf_and_test(lv, s274c5f11, ABISELECT(176,120), 4, 1, 1, "S274C5");
    check_field_offset(lv, s274c5f12, ABISELECT(180,124), "S274C5.s274c5f12");
    test_class_info(&lv, &cd_S274C5);
    dp->~S274C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS274C5(Test_S274C5, "S274C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S274C5C1Ev();
extern void _ZN6S274C5D1Ev();
Name_Map name_map_S274C5[] = {
  NSPAIR(_ZN6S274C5C1Ev),
  NSPAIR(_ZN6S274C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S274C6;
extern VTBL_ENTRY _ZTI6S274C6[];
extern  VTBL_ENTRY _ZTV6S274C6[];
static Base_Class bases_S274C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S274C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S274C5[];
extern void _ZN6S274C5D1Ev();
extern void _ZN6S274C5D0Ev();
extern void _ZN6S274C62v7Ev();
extern void _ZN6S274C62v8Ev();
extern void _ZN6S274C62v9Ev();
extern void _ZN6S274C63v10Ev();
extern void _ZN6S274C63v11Ev();
extern void _ZN6S274C63v12Ev();
extern void _ZN6S274C63v13Ev();
extern void _ZN6S274C63v14Ev();
extern void _ZN6S274C63v15Ev();
extern void _ZN6S274C63v16Ev();
extern void _ZN6S274C63v17Ev();
extern void _ZN6S274C63v18Ev();
extern void _ZN6S274C63v19Ev();
extern void _ZN6S274C63v20Ev();
extern void _ZN6S274C63v21Ev();
extern void _ZN6S274C63v22Ev();
extern void _ZN6S274C63v23Ev();
extern void _ZN6S274C63v24Ev();
extern void _ZN6S274C63v25Ev();
extern void _ZN6S274C63v26Ev();
extern void _ZN6S274C63v27Ev();
extern void _ZN6S274C63v28Ev();
extern void _ZN6S274C63v29Ev();
extern void _ZN6S274C63v30Ev();
extern void _ZN6S274C63v31Ev();
extern void _ZN6S274C63v32Ev();
extern void _ZN6S274C63v33Ev();
extern void _ZN6S274C63v34Ev();
extern void _ZN6S274C63v35Ev();
extern void _ZN6S274C63v36Ev();
extern void _ZN6S274C63v37Ev();
extern void _ZN6S274C63v38Ev();
extern void _ZN6S274C63v39Ev();
extern void _ZN6S274C63v40Ev();
extern void _ZN6S274C63v41Ev();
extern void _ZN6S274C63v42Ev();
extern void _ZN6S274C63v43Ev();
extern void _ZN6S274C63v44Ev();
extern void _ZN6S274C63v45Ev();
extern void _ZN6S274C63v46Ev();
extern void _ZN6S274C63v47Ev();
extern void _ZN6S274C63v48Ev();
extern void _ZN6S274C63v49Ev();
extern void _ZN6S274C63v50Ev();
extern void _ZN6S274C63v51Ev();
extern void _ZN6S274C63v52Ev();
extern void _ZN6S274C63v53Ev();
extern void _ZN6S274C63v54Ev();
extern void _ZN6S274C63v55Ev();
extern void _ZN6S274C63v56Ev();
extern void _ZN6S274C63v57Ev();
extern void _ZN6S274C63v58Ev();
extern void _ZN6S274C63v59Ev();
extern void _ZN6S274C63v60Ev();
extern void _ZN6S274C63v61Ev();
extern void _ZN6S274C63v62Ev();
extern void _ZN6S274C63v63Ev();
extern void _ZN6S274C63v64Ev();
extern void _ZN6S274C63v65Ev();
extern void _ZN6S274C63v66Ev();
extern void _ZN6S274C63v67Ev();
extern void _ZN6S274C63v68Ev();
extern void _ZN6S274C63v69Ev();
extern void _ZN6S274C63v70Ev();
extern void _ZN6S274C53v71Ev();
extern void _ZN6S274C53v72Ev();
extern void _ZN6S274C53v73Ev();
extern void _ZN6S274C53v74Ev();
extern void _ZN6S274C53v75Ev();
extern void _ZN6S274C53v76Ev();
extern void _ZN6S274C53v77Ev();
extern void _ZN6S274C53v78Ev();
extern void _ZN6S274C53v79Ev();
extern void _ZN6S274C53v80Ev();
extern void _ZN6S274C53v81Ev();
extern void _ZN6S274C53v82Ev();
extern void _ZN6S274C53v83Ev();
extern void _ZN6S274C53v84Ev();
extern void _ZN6S274C53v85Ev();
extern void _ZN6S274C53v86Ev();
extern void _ZN6S274C53v87Ev();
extern void _ZN6S274C53v88Ev();
extern void _ZN6S274C53v89Ev();
extern void _ZN6S274C53v90Ev();
extern void _ZN6S274C53v91Ev();
extern void _ZN6S274C53v92Ev();
static  VTBL_ENTRY vtc_S274C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S274C5[0]),
  (VTBL_ENTRY)&_ZN6S274C5D1Ev,
  (VTBL_ENTRY)&_ZN6S274C5D0Ev,
  (VTBL_ENTRY)&_ZN6S274C62v7Ev,
  (VTBL_ENTRY)&_ZN6S274C62v8Ev,
  (VTBL_ENTRY)&_ZN6S274C62v9Ev,
  (VTBL_ENTRY)&_ZN6S274C63v10Ev,
  (VTBL_ENTRY)&_ZN6S274C63v11Ev,
  (VTBL_ENTRY)&_ZN6S274C63v12Ev,
  (VTBL_ENTRY)&_ZN6S274C63v13Ev,
  (VTBL_ENTRY)&_ZN6S274C63v14Ev,
  (VTBL_ENTRY)&_ZN6S274C63v15Ev,
  (VTBL_ENTRY)&_ZN6S274C63v16Ev,
  (VTBL_ENTRY)&_ZN6S274C63v17Ev,
  (VTBL_ENTRY)&_ZN6S274C63v18Ev,
  (VTBL_ENTRY)&_ZN6S274C63v19Ev,
  (VTBL_ENTRY)&_ZN6S274C63v20Ev,
  (VTBL_ENTRY)&_ZN6S274C63v21Ev,
  (VTBL_ENTRY)&_ZN6S274C63v22Ev,
  (VTBL_ENTRY)&_ZN6S274C63v23Ev,
  (VTBL_ENTRY)&_ZN6S274C63v24Ev,
  (VTBL_ENTRY)&_ZN6S274C63v25Ev,
  (VTBL_ENTRY)&_ZN6S274C63v26Ev,
  (VTBL_ENTRY)&_ZN6S274C63v27Ev,
  (VTBL_ENTRY)&_ZN6S274C63v28Ev,
  (VTBL_ENTRY)&_ZN6S274C63v29Ev,
  (VTBL_ENTRY)&_ZN6S274C63v30Ev,
  (VTBL_ENTRY)&_ZN6S274C63v31Ev,
  (VTBL_ENTRY)&_ZN6S274C63v32Ev,
  (VTBL_ENTRY)&_ZN6S274C63v33Ev,
  (VTBL_ENTRY)&_ZN6S274C63v34Ev,
  (VTBL_ENTRY)&_ZN6S274C63v35Ev,
  (VTBL_ENTRY)&_ZN6S274C63v36Ev,
  (VTBL_ENTRY)&_ZN6S274C63v37Ev,
  (VTBL_ENTRY)&_ZN6S274C63v38Ev,
  (VTBL_ENTRY)&_ZN6S274C63v39Ev,
  (VTBL_ENTRY)&_ZN6S274C63v40Ev,
  (VTBL_ENTRY)&_ZN6S274C63v41Ev,
  (VTBL_ENTRY)&_ZN6S274C63v42Ev,
  (VTBL_ENTRY)&_ZN6S274C63v43Ev,
  (VTBL_ENTRY)&_ZN6S274C63v44Ev,
  (VTBL_ENTRY)&_ZN6S274C63v45Ev,
  (VTBL_ENTRY)&_ZN6S274C63v46Ev,
  (VTBL_ENTRY)&_ZN6S274C63v47Ev,
  (VTBL_ENTRY)&_ZN6S274C63v48Ev,
  (VTBL_ENTRY)&_ZN6S274C63v49Ev,
  (VTBL_ENTRY)&_ZN6S274C63v50Ev,
  (VTBL_ENTRY)&_ZN6S274C63v51Ev,
  (VTBL_ENTRY)&_ZN6S274C63v52Ev,
  (VTBL_ENTRY)&_ZN6S274C63v53Ev,
  (VTBL_ENTRY)&_ZN6S274C63v54Ev,
  (VTBL_ENTRY)&_ZN6S274C63v55Ev,
  (VTBL_ENTRY)&_ZN6S274C63v56Ev,
  (VTBL_ENTRY)&_ZN6S274C63v57Ev,
  (VTBL_ENTRY)&_ZN6S274C63v58Ev,
  (VTBL_ENTRY)&_ZN6S274C63v59Ev,
  (VTBL_ENTRY)&_ZN6S274C63v60Ev,
  (VTBL_ENTRY)&_ZN6S274C63v61Ev,
  (VTBL_ENTRY)&_ZN6S274C63v62Ev,
  (VTBL_ENTRY)&_ZN6S274C63v63Ev,
  (VTBL_ENTRY)&_ZN6S274C63v64Ev,
  (VTBL_ENTRY)&_ZN6S274C63v65Ev,
  (VTBL_ENTRY)&_ZN6S274C63v66Ev,
  (VTBL_ENTRY)&_ZN6S274C63v67Ev,
  (VTBL_ENTRY)&_ZN6S274C63v68Ev,
  (VTBL_ENTRY)&_ZN6S274C63v69Ev,
  (VTBL_ENTRY)&_ZN6S274C63v70Ev,
  (VTBL_ENTRY)&_ZN6S274C53v71Ev,
  (VTBL_ENTRY)&_ZN6S274C53v72Ev,
  (VTBL_ENTRY)&_ZN6S274C53v73Ev,
  (VTBL_ENTRY)&_ZN6S274C53v74Ev,
  (VTBL_ENTRY)&_ZN6S274C53v75Ev,
  (VTBL_ENTRY)&_ZN6S274C53v76Ev,
  (VTBL_ENTRY)&_ZN6S274C53v77Ev,
  (VTBL_ENTRY)&_ZN6S274C53v78Ev,
  (VTBL_ENTRY)&_ZN6S274C53v79Ev,
  (VTBL_ENTRY)&_ZN6S274C53v80Ev,
  (VTBL_ENTRY)&_ZN6S274C53v81Ev,
  (VTBL_ENTRY)&_ZN6S274C53v82Ev,
  (VTBL_ENTRY)&_ZN6S274C53v83Ev,
  (VTBL_ENTRY)&_ZN6S274C53v84Ev,
  (VTBL_ENTRY)&_ZN6S274C53v85Ev,
  (VTBL_ENTRY)&_ZN6S274C53v86Ev,
  (VTBL_ENTRY)&_ZN6S274C53v87Ev,
  (VTBL_ENTRY)&_ZN6S274C53v88Ev,
  (VTBL_ENTRY)&_ZN6S274C53v89Ev,
  (VTBL_ENTRY)&_ZN6S274C53v90Ev,
  (VTBL_ENTRY)&_ZN6S274C53v91Ev,
  (VTBL_ENTRY)&_ZN6S274C53v92Ev,
};
extern VTBL_ENTRY _ZTI6S274C5[];
extern  VTBL_ENTRY _ZTV6S274C5[];
Class_Descriptor cd_S274C5 = {  "S274C5", // class name
  bases_S274C5, 1,
  &(vtc_S274C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S274C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S274C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S274C4  : S274C5 {
  unsigned int s274c4f0:1;
  unsigned int s274c4f1:1;
  unsigned int s274c4f2:1;
  ::S3221C17 s274c4f3;
  ::S3221C11 s274c4f4;
  ::S3221C5_nt s274c4f5;
  ::S3168C19 s274c4f6;
  int s274c4f7[3];
  virtual  ~S274C4(); // _ZN6S274C4D1Ev
  virtual void  v93(); // _ZN6S274C43v93Ev
  virtual void  v94(); // _ZN6S274C43v94Ev
  virtual void  v95(); // _ZN6S274C43v95Ev
  virtual void  v96(); // _ZN6S274C43v96Ev
  virtual void  v97(); // _ZN6S274C43v97Ev
  virtual void  v98(); // _ZN6S274C43v98Ev
  virtual void  v99(); // _ZN6S274C43v99Ev
  virtual void  v100(); // _ZN6S274C44v100Ev
  virtual void  v101(); // _ZN6S274C44v101Ev
  virtual void  v102(); // _ZN6S274C44v102Ev
  virtual void  v103(); // _ZN6S274C44v103Ev
  virtual void  v104(); // _ZN6S274C44v104Ev
  virtual void  v105(); // _ZN6S274C44v105Ev
  virtual void  v106(); // _ZN6S274C44v106Ev
  virtual void  v107(); // _ZN6S274C44v107Ev
  virtual void  v108(); // _ZN6S274C44v108Ev
  virtual void  v109(); // _ZN6S274C44v109Ev
  virtual void  v110(); // _ZN6S274C44v110Ev
  virtual void  v111(); // _ZN6S274C44v111Ev
  virtual void  v112(); // _ZN6S274C44v112Ev
  S274C4(); // tgen
};
//SIG(-1 S274C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S274C4 ::~S274C4(){ note_dtor("S274C4", this);}
void  S274C4 ::v93(){vfunc_called(this, "_ZN6S274C43v93Ev");}
void  S274C4 ::v94(){vfunc_called(this, "_ZN6S274C43v94Ev");}
void  S274C4 ::v95(){vfunc_called(this, "_ZN6S274C43v95Ev");}
void  S274C4 ::v96(){vfunc_called(this, "_ZN6S274C43v96Ev");}
void  S274C4 ::v97(){vfunc_called(this, "_ZN6S274C43v97Ev");}
void  S274C4 ::v98(){vfunc_called(this, "_ZN6S274C43v98Ev");}
void  S274C4 ::v99(){vfunc_called(this, "_ZN6S274C43v99Ev");}
void  S274C4 ::v100(){vfunc_called(this, "_ZN6S274C44v100Ev");}
void  S274C4 ::v101(){vfunc_called(this, "_ZN6S274C44v101Ev");}
void  S274C4 ::v102(){vfunc_called(this, "_ZN6S274C44v102Ev");}
void  S274C4 ::v103(){vfunc_called(this, "_ZN6S274C44v103Ev");}
void  S274C4 ::v104(){vfunc_called(this, "_ZN6S274C44v104Ev");}
void  S274C4 ::v105(){vfunc_called(this, "_ZN6S274C44v105Ev");}
void  S274C4 ::v106(){vfunc_called(this, "_ZN6S274C44v106Ev");}
void  S274C4 ::v107(){vfunc_called(this, "_ZN6S274C44v107Ev");}
void  S274C4 ::v108(){vfunc_called(this, "_ZN6S274C44v108Ev");}
void  S274C4 ::v109(){vfunc_called(this, "_ZN6S274C44v109Ev");}
void  S274C4 ::v110(){vfunc_called(this, "_ZN6S274C44v110Ev");}
void  S274C4 ::v111(){vfunc_called(this, "_ZN6S274C44v111Ev");}
void  S274C4 ::v112(){vfunc_called(this, "_ZN6S274C44v112Ev");}
S274C4 ::S274C4(){ note_ctor("S274C4", this);} // tgen

static void Test_S274C4()
{
  extern Class_Descriptor cd_S274C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S274C4, buf);
    S274C4 *dp, &lv = *(dp=new (buf) S274C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S274C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S274C4)");
    check_base_class_offset(lv, (S274C6*)(S274C5*), 0, "S274C4");
    check_base_class_offset(lv, (S274C5*), 0, "S274C4");
    set_bf_and_test(lv, s274c4f0, ABISELECT(188,132), 0, 1, 1, "S274C4");
    set_bf_and_test(lv, s274c4f1, ABISELECT(188,132), 1, 1, 1, "S274C4");
    set_bf_and_test(lv, s274c4f2, ABISELECT(188,132), 2, 1, 1, "S274C4");
    check_field_offset(lv, s274c4f3, ABISELECT(192,136), "S274C4.s274c4f3");
    check_field_offset(lv, s274c4f4, ABISELECT(208,148), "S274C4.s274c4f4");
    check_field_offset(lv, s274c4f5, ABISELECT(224,160), "S274C4.s274c4f5");
    check_field_offset(lv, s274c4f6, ABISELECT(240,172), "S274C4.s274c4f6");
    check_field_offset(lv, s274c4f7, ABISELECT(256,184), "S274C4.s274c4f7");
    test_class_info(&lv, &cd_S274C4);
    dp->~S274C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS274C4(Test_S274C4, "S274C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S274C4C1Ev();
extern void _ZN6S274C4D1Ev();
Name_Map name_map_S274C4[] = {
  NSPAIR(_ZN6S274C4C1Ev),
  NSPAIR(_ZN6S274C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S274C6;
extern VTBL_ENTRY _ZTI6S274C6[];
extern  VTBL_ENTRY _ZTV6S274C6[];
extern Class_Descriptor cd_S274C5;
extern VTBL_ENTRY _ZTI6S274C5[];
extern  VTBL_ENTRY _ZTV6S274C5[];
static Base_Class bases_S274C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S274C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S274C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S274C4[];
extern void _ZN6S274C4D1Ev();
extern void _ZN6S274C4D0Ev();
extern void _ZN6S274C62v7Ev();
extern void _ZN6S274C62v8Ev();
extern void _ZN6S274C62v9Ev();
extern void _ZN6S274C63v10Ev();
extern void _ZN6S274C63v11Ev();
extern void _ZN6S274C63v12Ev();
extern void _ZN6S274C63v13Ev();
extern void _ZN6S274C63v14Ev();
extern void _ZN6S274C63v15Ev();
extern void _ZN6S274C63v16Ev();
extern void _ZN6S274C63v17Ev();
extern void _ZN6S274C63v18Ev();
extern void _ZN6S274C63v19Ev();
extern void _ZN6S274C63v20Ev();
extern void _ZN6S274C63v21Ev();
extern void _ZN6S274C63v22Ev();
extern void _ZN6S274C63v23Ev();
extern void _ZN6S274C63v24Ev();
extern void _ZN6S274C63v25Ev();
extern void _ZN6S274C63v26Ev();
extern void _ZN6S274C63v27Ev();
extern void _ZN6S274C63v28Ev();
extern void _ZN6S274C63v29Ev();
extern void _ZN6S274C63v30Ev();
extern void _ZN6S274C63v31Ev();
extern void _ZN6S274C63v32Ev();
extern void _ZN6S274C63v33Ev();
extern void _ZN6S274C63v34Ev();
extern void _ZN6S274C63v35Ev();
extern void _ZN6S274C63v36Ev();
extern void _ZN6S274C63v37Ev();
extern void _ZN6S274C63v38Ev();
extern void _ZN6S274C63v39Ev();
extern void _ZN6S274C63v40Ev();
extern void _ZN6S274C63v41Ev();
extern void _ZN6S274C63v42Ev();
extern void _ZN6S274C63v43Ev();
extern void _ZN6S274C63v44Ev();
extern void _ZN6S274C63v45Ev();
extern void _ZN6S274C63v46Ev();
extern void _ZN6S274C63v47Ev();
extern void _ZN6S274C63v48Ev();
extern void _ZN6S274C63v49Ev();
extern void _ZN6S274C63v50Ev();
extern void _ZN6S274C63v51Ev();
extern void _ZN6S274C63v52Ev();
extern void _ZN6S274C63v53Ev();
extern void _ZN6S274C63v54Ev();
extern void _ZN6S274C63v55Ev();
extern void _ZN6S274C63v56Ev();
extern void _ZN6S274C63v57Ev();
extern void _ZN6S274C63v58Ev();
extern void _ZN6S274C63v59Ev();
extern void _ZN6S274C63v60Ev();
extern void _ZN6S274C63v61Ev();
extern void _ZN6S274C63v62Ev();
extern void _ZN6S274C63v63Ev();
extern void _ZN6S274C63v64Ev();
extern void _ZN6S274C63v65Ev();
extern void _ZN6S274C63v66Ev();
extern void _ZN6S274C63v67Ev();
extern void _ZN6S274C63v68Ev();
extern void _ZN6S274C63v69Ev();
extern void _ZN6S274C63v70Ev();
extern void _ZN6S274C53v71Ev();
extern void _ZN6S274C53v72Ev();
extern void _ZN6S274C53v73Ev();
extern void _ZN6S274C53v74Ev();
extern void _ZN6S274C53v75Ev();
extern void _ZN6S274C53v76Ev();
extern void _ZN6S274C53v77Ev();
extern void _ZN6S274C53v78Ev();
extern void _ZN6S274C53v79Ev();
extern void _ZN6S274C53v80Ev();
extern void _ZN6S274C53v81Ev();
extern void _ZN6S274C53v82Ev();
extern void _ZN6S274C53v83Ev();
extern void _ZN6S274C53v84Ev();
extern void _ZN6S274C53v85Ev();
extern void _ZN6S274C53v86Ev();
extern void _ZN6S274C53v87Ev();
extern void _ZN6S274C53v88Ev();
extern void _ZN6S274C53v89Ev();
extern void _ZN6S274C53v90Ev();
extern void _ZN6S274C53v91Ev();
extern void _ZN6S274C53v92Ev();
extern void _ZN6S274C43v93Ev();
extern void _ZN6S274C43v94Ev();
extern void _ZN6S274C43v95Ev();
extern void _ZN6S274C43v96Ev();
extern void _ZN6S274C43v97Ev();
extern void _ZN6S274C43v98Ev();
extern void _ZN6S274C43v99Ev();
extern void _ZN6S274C44v100Ev();
extern void _ZN6S274C44v101Ev();
extern void _ZN6S274C44v102Ev();
extern void _ZN6S274C44v103Ev();
extern void _ZN6S274C44v104Ev();
extern void _ZN6S274C44v105Ev();
extern void _ZN6S274C44v106Ev();
extern void _ZN6S274C44v107Ev();
extern void _ZN6S274C44v108Ev();
extern void _ZN6S274C44v109Ev();
extern void _ZN6S274C44v110Ev();
extern void _ZN6S274C44v111Ev();
extern void _ZN6S274C44v112Ev();
static  VTBL_ENTRY vtc_S274C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S274C4[0]),
  (VTBL_ENTRY)&_ZN6S274C4D1Ev,
  (VTBL_ENTRY)&_ZN6S274C4D0Ev,
  (VTBL_ENTRY)&_ZN6S274C62v7Ev,
  (VTBL_ENTRY)&_ZN6S274C62v8Ev,
  (VTBL_ENTRY)&_ZN6S274C62v9Ev,
  (VTBL_ENTRY)&_ZN6S274C63v10Ev,
  (VTBL_ENTRY)&_ZN6S274C63v11Ev,
  (VTBL_ENTRY)&_ZN6S274C63v12Ev,
  (VTBL_ENTRY)&_ZN6S274C63v13Ev,
  (VTBL_ENTRY)&_ZN6S274C63v14Ev,
  (VTBL_ENTRY)&_ZN6S274C63v15Ev,
  (VTBL_ENTRY)&_ZN6S274C63v16Ev,
  (VTBL_ENTRY)&_ZN6S274C63v17Ev,
  (VTBL_ENTRY)&_ZN6S274C63v18Ev,
  (VTBL_ENTRY)&_ZN6S274C63v19Ev,
  (VTBL_ENTRY)&_ZN6S274C63v20Ev,
  (VTBL_ENTRY)&_ZN6S274C63v21Ev,
  (VTBL_ENTRY)&_ZN6S274C63v22Ev,
  (VTBL_ENTRY)&_ZN6S274C63v23Ev,
  (VTBL_ENTRY)&_ZN6S274C63v24Ev,
  (VTBL_ENTRY)&_ZN6S274C63v25Ev,
  (VTBL_ENTRY)&_ZN6S274C63v26Ev,
  (VTBL_ENTRY)&_ZN6S274C63v27Ev,
  (VTBL_ENTRY)&_ZN6S274C63v28Ev,
  (VTBL_ENTRY)&_ZN6S274C63v29Ev,
  (VTBL_ENTRY)&_ZN6S274C63v30Ev,
  (VTBL_ENTRY)&_ZN6S274C63v31Ev,
  (VTBL_ENTRY)&_ZN6S274C63v32Ev,
  (VTBL_ENTRY)&_ZN6S274C63v33Ev,
  (VTBL_ENTRY)&_ZN6S274C63v34Ev,
  (VTBL_ENTRY)&_ZN6S274C63v35Ev,
  (VTBL_ENTRY)&_ZN6S274C63v36Ev,
  (VTBL_ENTRY)&_ZN6S274C63v37Ev,
  (VTBL_ENTRY)&_ZN6S274C63v38Ev,
  (VTBL_ENTRY)&_ZN6S274C63v39Ev,
  (VTBL_ENTRY)&_ZN6S274C63v40Ev,
  (VTBL_ENTRY)&_ZN6S274C63v41Ev,
  (VTBL_ENTRY)&_ZN6S274C63v42Ev,
  (VTBL_ENTRY)&_ZN6S274C63v43Ev,
  (VTBL_ENTRY)&_ZN6S274C63v44Ev,
  (VTBL_ENTRY)&_ZN6S274C63v45Ev,
  (VTBL_ENTRY)&_ZN6S274C63v46Ev,
  (VTBL_ENTRY)&_ZN6S274C63v47Ev,
  (VTBL_ENTRY)&_ZN6S274C63v48Ev,
  (VTBL_ENTRY)&_ZN6S274C63v49Ev,
  (VTBL_ENTRY)&_ZN6S274C63v50Ev,
  (VTBL_ENTRY)&_ZN6S274C63v51Ev,
  (VTBL_ENTRY)&_ZN6S274C63v52Ev,
  (VTBL_ENTRY)&_ZN6S274C63v53Ev,
  (VTBL_ENTRY)&_ZN6S274C63v54Ev,
  (VTBL_ENTRY)&_ZN6S274C63v55Ev,
  (VTBL_ENTRY)&_ZN6S274C63v56Ev,
  (VTBL_ENTRY)&_ZN6S274C63v57Ev,
  (VTBL_ENTRY)&_ZN6S274C63v58Ev,
  (VTBL_ENTRY)&_ZN6S274C63v59Ev,
  (VTBL_ENTRY)&_ZN6S274C63v60Ev,
  (VTBL_ENTRY)&_ZN6S274C63v61Ev,
  (VTBL_ENTRY)&_ZN6S274C63v62Ev,
  (VTBL_ENTRY)&_ZN6S274C63v63Ev,
  (VTBL_ENTRY)&_ZN6S274C63v64Ev,
  (VTBL_ENTRY)&_ZN6S274C63v65Ev,
  (VTBL_ENTRY)&_ZN6S274C63v66Ev,
  (VTBL_ENTRY)&_ZN6S274C63v67Ev,
  (VTBL_ENTRY)&_ZN6S274C63v68Ev,
  (VTBL_ENTRY)&_ZN6S274C63v69Ev,
  (VTBL_ENTRY)&_ZN6S274C63v70Ev,
  (VTBL_ENTRY)&_ZN6S274C53v71Ev,
  (VTBL_ENTRY)&_ZN6S274C53v72Ev,
  (VTBL_ENTRY)&_ZN6S274C53v73Ev,
  (VTBL_ENTRY)&_ZN6S274C53v74Ev,
  (VTBL_ENTRY)&_ZN6S274C53v75Ev,
  (VTBL_ENTRY)&_ZN6S274C53v76Ev,
  (VTBL_ENTRY)&_ZN6S274C53v77Ev,
  (VTBL_ENTRY)&_ZN6S274C53v78Ev,
  (VTBL_ENTRY)&_ZN6S274C53v79Ev,
  (VTBL_ENTRY)&_ZN6S274C53v80Ev,
  (VTBL_ENTRY)&_ZN6S274C53v81Ev,
  (VTBL_ENTRY)&_ZN6S274C53v82Ev,
  (VTBL_ENTRY)&_ZN6S274C53v83Ev,
  (VTBL_ENTRY)&_ZN6S274C53v84Ev,
  (VTBL_ENTRY)&_ZN6S274C53v85Ev,
  (VTBL_ENTRY)&_ZN6S274C53v86Ev,
  (VTBL_ENTRY)&_ZN6S274C53v87Ev,
  (VTBL_ENTRY)&_ZN6S274C53v88Ev,
  (VTBL_ENTRY)&_ZN6S274C53v89Ev,
  (VTBL_ENTRY)&_ZN6S274C53v90Ev,
  (VTBL_ENTRY)&_ZN6S274C53v91Ev,
  (VTBL_ENTRY)&_ZN6S274C53v92Ev,
  (VTBL_ENTRY)&_ZN6S274C43v93Ev,
  (VTBL_ENTRY)&_ZN6S274C43v94Ev,
  (VTBL_ENTRY)&_ZN6S274C43v95Ev,
  (VTBL_ENTRY)&_ZN6S274C43v96Ev,
  (VTBL_ENTRY)&_ZN6S274C43v97Ev,
  (VTBL_ENTRY)&_ZN6S274C43v98Ev,
  (VTBL_ENTRY)&_ZN6S274C43v99Ev,
  (VTBL_ENTRY)&_ZN6S274C44v100Ev,
  (VTBL_ENTRY)&_ZN6S274C44v101Ev,
  (VTBL_ENTRY)&_ZN6S274C44v102Ev,
  (VTBL_ENTRY)&_ZN6S274C44v103Ev,
  (VTBL_ENTRY)&_ZN6S274C44v104Ev,
  (VTBL_ENTRY)&_ZN6S274C44v105Ev,
  (VTBL_ENTRY)&_ZN6S274C44v106Ev,
  (VTBL_ENTRY)&_ZN6S274C44v107Ev,
  (VTBL_ENTRY)&_ZN6S274C44v108Ev,
  (VTBL_ENTRY)&_ZN6S274C44v109Ev,
  (VTBL_ENTRY)&_ZN6S274C44v110Ev,
  (VTBL_ENTRY)&_ZN6S274C44v111Ev,
  (VTBL_ENTRY)&_ZN6S274C44v112Ev,
};
extern VTBL_ENTRY _ZTI6S274C4[];
extern  VTBL_ENTRY _ZTV6S274C4[];
Class_Descriptor cd_S274C4 = {  "S274C4", // class name
  bases_S274C4, 2,
  &(vtc_S274C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S274C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S274C4),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S274C3 ::~S274C3(){ note_dtor("S274C3", this);}
void  S274C3 ::v113(){vfunc_called(this, "_ZN6S274C34v113Ev");}
void  S274C3 ::v114(){vfunc_called(this, "_ZN6S274C34v114Ev");}
void  S274C3 ::v115(){vfunc_called(this, "_ZN6S274C34v115Ev");}
void  S274C3 ::v116(){vfunc_called(this, "_ZN6S274C34v116Ev");}
S274C3 ::S274C3(){ note_ctor("S274C3", this);} // tgen

static void Test_S274C3()
{
  extern Class_Descriptor cd_S274C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S274C3, buf);
    S274C3 *dp, &lv = *(dp=new (buf) S274C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S274C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S274C3)");
    check_base_class_offset(lv, (S274C6*)(S274C5*)(S274C4*), 0, "S274C3");
    check_base_class_offset(lv, (S274C5*)(S274C4*), 0, "S274C3");
    check_base_class_offset(lv, (S274C4*), 0, "S274C3");
    check_field_offset(lv, s274c3f0, ABISELECT(268,196), "S274C3.s274c3f0");
    set_bf_and_test(lv, s274c3f1, ABISELECT(276,204), 0, 1, 1, "S274C3");
    check_field_offset(lv, s274c3f2, ABISELECT(280,208), "S274C3.s274c3f2");
    test_class_info(&lv, &cd_S274C3);
    dp->~S274C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS274C3(Test_S274C3, "S274C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S274C3C1Ev();
extern void _ZN6S274C3D1Ev();
Name_Map name_map_S274C3[] = {
  NSPAIR(_ZN6S274C3C1Ev),
  NSPAIR(_ZN6S274C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S274C6;
extern VTBL_ENTRY _ZTI6S274C6[];
extern  VTBL_ENTRY _ZTV6S274C6[];
extern Class_Descriptor cd_S274C5;
extern VTBL_ENTRY _ZTI6S274C5[];
extern  VTBL_ENTRY _ZTV6S274C5[];
extern Class_Descriptor cd_S274C4;
extern VTBL_ENTRY _ZTI6S274C4[];
extern  VTBL_ENTRY _ZTV6S274C4[];
static Base_Class bases_S274C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S274C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S274C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S274C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S274C3[];
extern void _ZN6S274C3D1Ev();
extern void _ZN6S274C3D0Ev();
extern void _ZN6S274C62v7Ev();
extern void _ZN6S274C62v8Ev();
extern void _ZN6S274C62v9Ev();
extern void _ZN6S274C63v10Ev();
extern void _ZN6S274C63v11Ev();
extern void _ZN6S274C63v12Ev();
extern void _ZN6S274C63v13Ev();
extern void _ZN6S274C63v14Ev();
extern void _ZN6S274C63v15Ev();
extern void _ZN6S274C63v16Ev();
extern void _ZN6S274C63v17Ev();
extern void _ZN6S274C63v18Ev();
extern void _ZN6S274C63v19Ev();
extern void _ZN6S274C63v20Ev();
extern void _ZN6S274C63v21Ev();
extern void _ZN6S274C63v22Ev();
extern void _ZN6S274C63v23Ev();
extern void _ZN6S274C63v24Ev();
extern void _ZN6S274C63v25Ev();
extern void _ZN6S274C63v26Ev();
extern void _ZN6S274C63v27Ev();
extern void _ZN6S274C63v28Ev();
extern void _ZN6S274C63v29Ev();
extern void _ZN6S274C63v30Ev();
extern void _ZN6S274C63v31Ev();
extern void _ZN6S274C63v32Ev();
extern void _ZN6S274C63v33Ev();
extern void _ZN6S274C63v34Ev();
extern void _ZN6S274C63v35Ev();
extern void _ZN6S274C63v36Ev();
extern void _ZN6S274C63v37Ev();
extern void _ZN6S274C63v38Ev();
extern void _ZN6S274C63v39Ev();
extern void _ZN6S274C63v40Ev();
extern void _ZN6S274C63v41Ev();
extern void _ZN6S274C63v42Ev();
extern void _ZN6S274C63v43Ev();
extern void _ZN6S274C63v44Ev();
extern void _ZN6S274C63v45Ev();
extern void _ZN6S274C63v46Ev();
extern void _ZN6S274C63v47Ev();
extern void _ZN6S274C63v48Ev();
extern void _ZN6S274C63v49Ev();
extern void _ZN6S274C63v50Ev();
extern void _ZN6S274C63v51Ev();
extern void _ZN6S274C63v52Ev();
extern void _ZN6S274C63v53Ev();
extern void _ZN6S274C63v54Ev();
extern void _ZN6S274C63v55Ev();
extern void _ZN6S274C63v56Ev();
extern void _ZN6S274C63v57Ev();
extern void _ZN6S274C63v58Ev();
extern void _ZN6S274C63v59Ev();
extern void _ZN6S274C63v60Ev();
extern void _ZN6S274C63v61Ev();
extern void _ZN6S274C63v62Ev();
extern void _ZN6S274C63v63Ev();
extern void _ZN6S274C63v64Ev();
extern void _ZN6S274C63v65Ev();
extern void _ZN6S274C63v66Ev();
extern void _ZN6S274C63v67Ev();
extern void _ZN6S274C63v68Ev();
extern void _ZN6S274C63v69Ev();
extern void _ZN6S274C63v70Ev();
extern void _ZN6S274C53v71Ev();
extern void _ZN6S274C53v72Ev();
extern void _ZN6S274C53v73Ev();
extern void _ZN6S274C53v74Ev();
extern void _ZN6S274C53v75Ev();
extern void _ZN6S274C53v76Ev();
extern void _ZN6S274C53v77Ev();
extern void _ZN6S274C53v78Ev();
extern void _ZN6S274C53v79Ev();
extern void _ZN6S274C53v80Ev();
extern void _ZN6S274C53v81Ev();
extern void _ZN6S274C53v82Ev();
extern void _ZN6S274C53v83Ev();
extern void _ZN6S274C53v84Ev();
extern void _ZN6S274C53v85Ev();
extern void _ZN6S274C53v86Ev();
extern void _ZN6S274C53v87Ev();
extern void _ZN6S274C53v88Ev();
extern void _ZN6S274C53v89Ev();
extern void _ZN6S274C53v90Ev();
extern void _ZN6S274C53v91Ev();
extern void _ZN6S274C53v92Ev();
extern void _ZN6S274C43v93Ev();
extern void _ZN6S274C43v94Ev();
extern void _ZN6S274C43v95Ev();
extern void _ZN6S274C43v96Ev();
extern void _ZN6S274C43v97Ev();
extern void _ZN6S274C43v98Ev();
extern void _ZN6S274C43v99Ev();
extern void _ZN6S274C44v100Ev();
extern void _ZN6S274C44v101Ev();
extern void _ZN6S274C44v102Ev();
extern void _ZN6S274C44v103Ev();
extern void _ZN6S274C44v104Ev();
extern void _ZN6S274C44v105Ev();
extern void _ZN6S274C44v106Ev();
extern void _ZN6S274C44v107Ev();
extern void _ZN6S274C44v108Ev();
extern void _ZN6S274C44v109Ev();
extern void _ZN6S274C44v110Ev();
extern void _ZN6S274C44v111Ev();
extern void _ZN6S274C44v112Ev();
extern void _ZN6S274C34v113Ev();
extern void _ZN6S274C34v114Ev();
extern void _ZN6S274C34v115Ev();
extern void _ZN6S274C34v116Ev();
static  VTBL_ENTRY vtc_S274C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S274C3[0]),
  (VTBL_ENTRY)&_ZN6S274C3D1Ev,
  (VTBL_ENTRY)&_ZN6S274C3D0Ev,
  (VTBL_ENTRY)&_ZN6S274C62v7Ev,
  (VTBL_ENTRY)&_ZN6S274C62v8Ev,
  (VTBL_ENTRY)&_ZN6S274C62v9Ev,
  (VTBL_ENTRY)&_ZN6S274C63v10Ev,
  (VTBL_ENTRY)&_ZN6S274C63v11Ev,
  (VTBL_ENTRY)&_ZN6S274C63v12Ev,
  (VTBL_ENTRY)&_ZN6S274C63v13Ev,
  (VTBL_ENTRY)&_ZN6S274C63v14Ev,
  (VTBL_ENTRY)&_ZN6S274C63v15Ev,
  (VTBL_ENTRY)&_ZN6S274C63v16Ev,
  (VTBL_ENTRY)&_ZN6S274C63v17Ev,
  (VTBL_ENTRY)&_ZN6S274C63v18Ev,
  (VTBL_ENTRY)&_ZN6S274C63v19Ev,
  (VTBL_ENTRY)&_ZN6S274C63v20Ev,
  (VTBL_ENTRY)&_ZN6S274C63v21Ev,
  (VTBL_ENTRY)&_ZN6S274C63v22Ev,
  (VTBL_ENTRY)&_ZN6S274C63v23Ev,
  (VTBL_ENTRY)&_ZN6S274C63v24Ev,
  (VTBL_ENTRY)&_ZN6S274C63v25Ev,
  (VTBL_ENTRY)&_ZN6S274C63v26Ev,
  (VTBL_ENTRY)&_ZN6S274C63v27Ev,
  (VTBL_ENTRY)&_ZN6S274C63v28Ev,
  (VTBL_ENTRY)&_ZN6S274C63v29Ev,
  (VTBL_ENTRY)&_ZN6S274C63v30Ev,
  (VTBL_ENTRY)&_ZN6S274C63v31Ev,
  (VTBL_ENTRY)&_ZN6S274C63v32Ev,
  (VTBL_ENTRY)&_ZN6S274C63v33Ev,
  (VTBL_ENTRY)&_ZN6S274C63v34Ev,
  (VTBL_ENTRY)&_ZN6S274C63v35Ev,
  (VTBL_ENTRY)&_ZN6S274C63v36Ev,
  (VTBL_ENTRY)&_ZN6S274C63v37Ev,
  (VTBL_ENTRY)&_ZN6S274C63v38Ev,
  (VTBL_ENTRY)&_ZN6S274C63v39Ev,
  (VTBL_ENTRY)&_ZN6S274C63v40Ev,
  (VTBL_ENTRY)&_ZN6S274C63v41Ev,
  (VTBL_ENTRY)&_ZN6S274C63v42Ev,
  (VTBL_ENTRY)&_ZN6S274C63v43Ev,
  (VTBL_ENTRY)&_ZN6S274C63v44Ev,
  (VTBL_ENTRY)&_ZN6S274C63v45Ev,
  (VTBL_ENTRY)&_ZN6S274C63v46Ev,
  (VTBL_ENTRY)&_ZN6S274C63v47Ev,
  (VTBL_ENTRY)&_ZN6S274C63v48Ev,
  (VTBL_ENTRY)&_ZN6S274C63v49Ev,
  (VTBL_ENTRY)&_ZN6S274C63v50Ev,
  (VTBL_ENTRY)&_ZN6S274C63v51Ev,
  (VTBL_ENTRY)&_ZN6S274C63v52Ev,
  (VTBL_ENTRY)&_ZN6S274C63v53Ev,
  (VTBL_ENTRY)&_ZN6S274C63v54Ev,
  (VTBL_ENTRY)&_ZN6S274C63v55Ev,
  (VTBL_ENTRY)&_ZN6S274C63v56Ev,
  (VTBL_ENTRY)&_ZN6S274C63v57Ev,
  (VTBL_ENTRY)&_ZN6S274C63v58Ev,
  (VTBL_ENTRY)&_ZN6S274C63v59Ev,
  (VTBL_ENTRY)&_ZN6S274C63v60Ev,
  (VTBL_ENTRY)&_ZN6S274C63v61Ev,
  (VTBL_ENTRY)&_ZN6S274C63v62Ev,
  (VTBL_ENTRY)&_ZN6S274C63v63Ev,
  (VTBL_ENTRY)&_ZN6S274C63v64Ev,
  (VTBL_ENTRY)&_ZN6S274C63v65Ev,
  (VTBL_ENTRY)&_ZN6S274C63v66Ev,
  (VTBL_ENTRY)&_ZN6S274C63v67Ev,
  (VTBL_ENTRY)&_ZN6S274C63v68Ev,
  (VTBL_ENTRY)&_ZN6S274C63v69Ev,
  (VTBL_ENTRY)&_ZN6S274C63v70Ev,
  (VTBL_ENTRY)&_ZN6S274C53v71Ev,
  (VTBL_ENTRY)&_ZN6S274C53v72Ev,
  (VTBL_ENTRY)&_ZN6S274C53v73Ev,
  (VTBL_ENTRY)&_ZN6S274C53v74Ev,
  (VTBL_ENTRY)&_ZN6S274C53v75Ev,
  (VTBL_ENTRY)&_ZN6S274C53v76Ev,
  (VTBL_ENTRY)&_ZN6S274C53v77Ev,
  (VTBL_ENTRY)&_ZN6S274C53v78Ev,
  (VTBL_ENTRY)&_ZN6S274C53v79Ev,
  (VTBL_ENTRY)&_ZN6S274C53v80Ev,
  (VTBL_ENTRY)&_ZN6S274C53v81Ev,
  (VTBL_ENTRY)&_ZN6S274C53v82Ev,
  (VTBL_ENTRY)&_ZN6S274C53v83Ev,
  (VTBL_ENTRY)&_ZN6S274C53v84Ev,
  (VTBL_ENTRY)&_ZN6S274C53v85Ev,
  (VTBL_ENTRY)&_ZN6S274C53v86Ev,
  (VTBL_ENTRY)&_ZN6S274C53v87Ev,
  (VTBL_ENTRY)&_ZN6S274C53v88Ev,
  (VTBL_ENTRY)&_ZN6S274C53v89Ev,
  (VTBL_ENTRY)&_ZN6S274C53v90Ev,
  (VTBL_ENTRY)&_ZN6S274C53v91Ev,
  (VTBL_ENTRY)&_ZN6S274C53v92Ev,
  (VTBL_ENTRY)&_ZN6S274C43v93Ev,
  (VTBL_ENTRY)&_ZN6S274C43v94Ev,
  (VTBL_ENTRY)&_ZN6S274C43v95Ev,
  (VTBL_ENTRY)&_ZN6S274C43v96Ev,
  (VTBL_ENTRY)&_ZN6S274C43v97Ev,
  (VTBL_ENTRY)&_ZN6S274C43v98Ev,
  (VTBL_ENTRY)&_ZN6S274C43v99Ev,
  (VTBL_ENTRY)&_ZN6S274C44v100Ev,
  (VTBL_ENTRY)&_ZN6S274C44v101Ev,
  (VTBL_ENTRY)&_ZN6S274C44v102Ev,
  (VTBL_ENTRY)&_ZN6S274C44v103Ev,
  (VTBL_ENTRY)&_ZN6S274C44v104Ev,
  (VTBL_ENTRY)&_ZN6S274C44v105Ev,
  (VTBL_ENTRY)&_ZN6S274C44v106Ev,
  (VTBL_ENTRY)&_ZN6S274C44v107Ev,
  (VTBL_ENTRY)&_ZN6S274C44v108Ev,
  (VTBL_ENTRY)&_ZN6S274C44v109Ev,
  (VTBL_ENTRY)&_ZN6S274C44v110Ev,
  (VTBL_ENTRY)&_ZN6S274C44v111Ev,
  (VTBL_ENTRY)&_ZN6S274C44v112Ev,
  (VTBL_ENTRY)&_ZN6S274C34v113Ev,
  (VTBL_ENTRY)&_ZN6S274C34v114Ev,
  (VTBL_ENTRY)&_ZN6S274C34v115Ev,
  (VTBL_ENTRY)&_ZN6S274C34v116Ev,
};
extern VTBL_ENTRY _ZTI6S274C3[];
extern  VTBL_ENTRY _ZTV6S274C3[];
Class_Descriptor cd_S274C3 = {  "S274C3", // class name
  bases_S274C3, 3,
  &(vtc_S274C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S274C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S274C3),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S274C2 ::~S274C2(){ note_dtor("S274C2", this);}
void  S274C2 ::v117(){vfunc_called(this, "_ZN6S274C24v117Ev");}
void  S274C2 ::v118(){vfunc_called(this, "_ZN6S274C24v118Ev");}
void  S274C2 ::v119(){vfunc_called(this, "_ZN6S274C24v119Ev");}
void  S274C2 ::v120(){vfunc_called(this, "_ZN6S274C24v120Ev");}
void  S274C2 ::v121(){vfunc_called(this, "_ZN6S274C24v121Ev");}
void  S274C2 ::v122(){vfunc_called(this, "_ZN6S274C24v122Ev");}
void  S274C2 ::v123(){vfunc_called(this, "_ZN6S274C24v123Ev");}
S274C2 ::S274C2(){ note_ctor("S274C2", this);} // tgen

static void Test_S274C2()
{
  extern Class_Descriptor cd_S274C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,60)];
    init_test(&cd_S274C2, buf);
    S274C2 *dp, &lv = *(dp=new (buf) S274C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,236), "sizeof(S274C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S274C2)");
    check_base_class_offset(lv, (S274C6*)(S274C5*)(S274C4*)(S274C3*), 0, "S274C2");
    check_base_class_offset(lv, (S274C5*)(S274C4*)(S274C3*), 0, "S274C2");
    check_base_class_offset(lv, (S274C4*)(S274C3*), 0, "S274C2");
    check_base_class_offset(lv, (S274C3*), 0, "S274C2");
    check_field_offset(lv, s274c2f0, ABISELECT(296,220), "S274C2.s274c2f0");
    set_bf_and_test(lv, s274c2f1, ABISELECT(312,232), 0, 1, 1, "S274C2");
    test_class_info(&lv, &cd_S274C2);
    dp->~S274C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS274C2(Test_S274C2, "S274C2", ABISELECT(320,236));

#else // __cplusplus

extern void _ZN6S274C2C1Ev();
extern void _ZN6S274C2D1Ev();
Name_Map name_map_S274C2[] = {
  NSPAIR(_ZN6S274C2C1Ev),
  NSPAIR(_ZN6S274C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S274C6;
extern VTBL_ENTRY _ZTI6S274C6[];
extern  VTBL_ENTRY _ZTV6S274C6[];
extern Class_Descriptor cd_S274C5;
extern VTBL_ENTRY _ZTI6S274C5[];
extern  VTBL_ENTRY _ZTV6S274C5[];
extern Class_Descriptor cd_S274C4;
extern VTBL_ENTRY _ZTI6S274C4[];
extern  VTBL_ENTRY _ZTV6S274C4[];
extern Class_Descriptor cd_S274C3;
extern VTBL_ENTRY _ZTI6S274C3[];
extern  VTBL_ENTRY _ZTV6S274C3[];
static Base_Class bases_S274C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S274C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S274C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S274C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S274C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S274C2[];
extern void _ZN6S274C2D1Ev();
extern void _ZN6S274C2D0Ev();
extern void _ZN6S274C62v7Ev();
extern void _ZN6S274C62v8Ev();
extern void _ZN6S274C62v9Ev();
extern void _ZN6S274C63v10Ev();
extern void _ZN6S274C63v11Ev();
extern void _ZN6S274C63v12Ev();
extern void _ZN6S274C63v13Ev();
extern void _ZN6S274C63v14Ev();
extern void _ZN6S274C63v15Ev();
extern void _ZN6S274C63v16Ev();
extern void _ZN6S274C63v17Ev();
extern void _ZN6S274C63v18Ev();
extern void _ZN6S274C63v19Ev();
extern void _ZN6S274C63v20Ev();
extern void _ZN6S274C63v21Ev();
extern void _ZN6S274C63v22Ev();
extern void _ZN6S274C63v23Ev();
extern void _ZN6S274C63v24Ev();
extern void _ZN6S274C63v25Ev();
extern void _ZN6S274C63v26Ev();
extern void _ZN6S274C63v27Ev();
extern void _ZN6S274C63v28Ev();
extern void _ZN6S274C63v29Ev();
extern void _ZN6S274C63v30Ev();
extern void _ZN6S274C63v31Ev();
extern void _ZN6S274C63v32Ev();
extern void _ZN6S274C63v33Ev();
extern void _ZN6S274C63v34Ev();
extern void _ZN6S274C63v35Ev();
extern void _ZN6S274C63v36Ev();
extern void _ZN6S274C63v37Ev();
extern void _ZN6S274C63v38Ev();
extern void _ZN6S274C63v39Ev();
extern void _ZN6S274C63v40Ev();
extern void _ZN6S274C63v41Ev();
extern void _ZN6S274C63v42Ev();
extern void _ZN6S274C63v43Ev();
extern void _ZN6S274C63v44Ev();
extern void _ZN6S274C63v45Ev();
extern void _ZN6S274C63v46Ev();
extern void _ZN6S274C63v47Ev();
extern void _ZN6S274C63v48Ev();
extern void _ZN6S274C63v49Ev();
extern void _ZN6S274C63v50Ev();
extern void _ZN6S274C63v51Ev();
extern void _ZN6S274C63v52Ev();
extern void _ZN6S274C63v53Ev();
extern void _ZN6S274C63v54Ev();
extern void _ZN6S274C63v55Ev();
extern void _ZN6S274C63v56Ev();
extern void _ZN6S274C63v57Ev();
extern void _ZN6S274C63v58Ev();
extern void _ZN6S274C63v59Ev();
extern void _ZN6S274C63v60Ev();
extern void _ZN6S274C63v61Ev();
extern void _ZN6S274C63v62Ev();
extern void _ZN6S274C63v63Ev();
extern void _ZN6S274C63v64Ev();
extern void _ZN6S274C63v65Ev();
extern void _ZN6S274C63v66Ev();
extern void _ZN6S274C63v67Ev();
extern void _ZN6S274C63v68Ev();
extern void _ZN6S274C63v69Ev();
extern void _ZN6S274C63v70Ev();
extern void _ZN6S274C53v71Ev();
extern void _ZN6S274C53v72Ev();
extern void _ZN6S274C53v73Ev();
extern void _ZN6S274C53v74Ev();
extern void _ZN6S274C53v75Ev();
extern void _ZN6S274C53v76Ev();
extern void _ZN6S274C53v77Ev();
extern void _ZN6S274C53v78Ev();
extern void _ZN6S274C53v79Ev();
extern void _ZN6S274C53v80Ev();
extern void _ZN6S274C53v81Ev();
extern void _ZN6S274C53v82Ev();
extern void _ZN6S274C53v83Ev();
extern void _ZN6S274C53v84Ev();
extern void _ZN6S274C53v85Ev();
extern void _ZN6S274C53v86Ev();
extern void _ZN6S274C53v87Ev();
extern void _ZN6S274C53v88Ev();
extern void _ZN6S274C53v89Ev();
extern void _ZN6S274C53v90Ev();
extern void _ZN6S274C53v91Ev();
extern void _ZN6S274C53v92Ev();
extern void _ZN6S274C43v93Ev();
extern void _ZN6S274C43v94Ev();
extern void _ZN6S274C43v95Ev();
extern void _ZN6S274C43v96Ev();
extern void _ZN6S274C43v97Ev();
extern void _ZN6S274C43v98Ev();
extern void _ZN6S274C43v99Ev();
extern void _ZN6S274C44v100Ev();
extern void _ZN6S274C44v101Ev();
extern void _ZN6S274C44v102Ev();
extern void _ZN6S274C44v103Ev();
extern void _ZN6S274C44v104Ev();
extern void _ZN6S274C44v105Ev();
extern void _ZN6S274C44v106Ev();
extern void _ZN6S274C44v107Ev();
extern void _ZN6S274C44v108Ev();
extern void _ZN6S274C44v109Ev();
extern void _ZN6S274C44v110Ev();
extern void _ZN6S274C44v111Ev();
extern void _ZN6S274C44v112Ev();
extern void _ZN6S274C34v113Ev();
extern void _ZN6S274C34v114Ev();
extern void _ZN6S274C34v115Ev();
extern void _ZN6S274C34v116Ev();
extern void _ZN6S274C24v117Ev();
extern void _ZN6S274C24v118Ev();
extern void _ZN6S274C24v119Ev();
extern void _ZN6S274C24v120Ev();
extern void _ZN6S274C24v121Ev();
extern void _ZN6S274C24v122Ev();
extern void _ZN6S274C24v123Ev();
static  VTBL_ENTRY vtc_S274C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S274C2[0]),
  (VTBL_ENTRY)&_ZN6S274C2D1Ev,
  (VTBL_ENTRY)&_ZN6S274C2D0Ev,
  (VTBL_ENTRY)&_ZN6S274C62v7Ev,
  (VTBL_ENTRY)&_ZN6S274C62v8Ev,
  (VTBL_ENTRY)&_ZN6S274C62v9Ev,
  (VTBL_ENTRY)&_ZN6S274C63v10Ev,
  (VTBL_ENTRY)&_ZN6S274C63v11Ev,
  (VTBL_ENTRY)&_ZN6S274C63v12Ev,
  (VTBL_ENTRY)&_ZN6S274C63v13Ev,
  (VTBL_ENTRY)&_ZN6S274C63v14Ev,
  (VTBL_ENTRY)&_ZN6S274C63v15Ev,
  (VTBL_ENTRY)&_ZN6S274C63v16Ev,
  (VTBL_ENTRY)&_ZN6S274C63v17Ev,
  (VTBL_ENTRY)&_ZN6S274C63v18Ev,
  (VTBL_ENTRY)&_ZN6S274C63v19Ev,
  (VTBL_ENTRY)&_ZN6S274C63v20Ev,
  (VTBL_ENTRY)&_ZN6S274C63v21Ev,
  (VTBL_ENTRY)&_ZN6S274C63v22Ev,
  (VTBL_ENTRY)&_ZN6S274C63v23Ev,
  (VTBL_ENTRY)&_ZN6S274C63v24Ev,
  (VTBL_ENTRY)&_ZN6S274C63v25Ev,
  (VTBL_ENTRY)&_ZN6S274C63v26Ev,
  (VTBL_ENTRY)&_ZN6S274C63v27Ev,
  (VTBL_ENTRY)&_ZN6S274C63v28Ev,
  (VTBL_ENTRY)&_ZN6S274C63v29Ev,
  (VTBL_ENTRY)&_ZN6S274C63v30Ev,
  (VTBL_ENTRY)&_ZN6S274C63v31Ev,
  (VTBL_ENTRY)&_ZN6S274C63v32Ev,
  (VTBL_ENTRY)&_ZN6S274C63v33Ev,
  (VTBL_ENTRY)&_ZN6S274C63v34Ev,
  (VTBL_ENTRY)&_ZN6S274C63v35Ev,
  (VTBL_ENTRY)&_ZN6S274C63v36Ev,
  (VTBL_ENTRY)&_ZN6S274C63v37Ev,
  (VTBL_ENTRY)&_ZN6S274C63v38Ev,
  (VTBL_ENTRY)&_ZN6S274C63v39Ev,
  (VTBL_ENTRY)&_ZN6S274C63v40Ev,
  (VTBL_ENTRY)&_ZN6S274C63v41Ev,
  (VTBL_ENTRY)&_ZN6S274C63v42Ev,
  (VTBL_ENTRY)&_ZN6S274C63v43Ev,
  (VTBL_ENTRY)&_ZN6S274C63v44Ev,
  (VTBL_ENTRY)&_ZN6S274C63v45Ev,
  (VTBL_ENTRY)&_ZN6S274C63v46Ev,
  (VTBL_ENTRY)&_ZN6S274C63v47Ev,
  (VTBL_ENTRY)&_ZN6S274C63v48Ev,
  (VTBL_ENTRY)&_ZN6S274C63v49Ev,
  (VTBL_ENTRY)&_ZN6S274C63v50Ev,
  (VTBL_ENTRY)&_ZN6S274C63v51Ev,
  (VTBL_ENTRY)&_ZN6S274C63v52Ev,
  (VTBL_ENTRY)&_ZN6S274C63v53Ev,
  (VTBL_ENTRY)&_ZN6S274C63v54Ev,
  (VTBL_ENTRY)&_ZN6S274C63v55Ev,
  (VTBL_ENTRY)&_ZN6S274C63v56Ev,
  (VTBL_ENTRY)&_ZN6S274C63v57Ev,
  (VTBL_ENTRY)&_ZN6S274C63v58Ev,
  (VTBL_ENTRY)&_ZN6S274C63v59Ev,
  (VTBL_ENTRY)&_ZN6S274C63v60Ev,
  (VTBL_ENTRY)&_ZN6S274C63v61Ev,
  (VTBL_ENTRY)&_ZN6S274C63v62Ev,
  (VTBL_ENTRY)&_ZN6S274C63v63Ev,
  (VTBL_ENTRY)&_ZN6S274C63v64Ev,
  (VTBL_ENTRY)&_ZN6S274C63v65Ev,
  (VTBL_ENTRY)&_ZN6S274C63v66Ev,
  (VTBL_ENTRY)&_ZN6S274C63v67Ev,
  (VTBL_ENTRY)&_ZN6S274C63v68Ev,
  (VTBL_ENTRY)&_ZN6S274C63v69Ev,
  (VTBL_ENTRY)&_ZN6S274C63v70Ev,
  (VTBL_ENTRY)&_ZN6S274C53v71Ev,
  (VTBL_ENTRY)&_ZN6S274C53v72Ev,
  (VTBL_ENTRY)&_ZN6S274C53v73Ev,
  (VTBL_ENTRY)&_ZN6S274C53v74Ev,
  (VTBL_ENTRY)&_ZN6S274C53v75Ev,
  (VTBL_ENTRY)&_ZN6S274C53v76Ev,
  (VTBL_ENTRY)&_ZN6S274C53v77Ev,
  (VTBL_ENTRY)&_ZN6S274C53v78Ev,
  (VTBL_ENTRY)&_ZN6S274C53v79Ev,
  (VTBL_ENTRY)&_ZN6S274C53v80Ev,
  (VTBL_ENTRY)&_ZN6S274C53v81Ev,
  (VTBL_ENTRY)&_ZN6S274C53v82Ev,
  (VTBL_ENTRY)&_ZN6S274C53v83Ev,
  (VTBL_ENTRY)&_ZN6S274C53v84Ev,
  (VTBL_ENTRY)&_ZN6S274C53v85Ev,
  (VTBL_ENTRY)&_ZN6S274C53v86Ev,
  (VTBL_ENTRY)&_ZN6S274C53v87Ev,
  (VTBL_ENTRY)&_ZN6S274C53v88Ev,
  (VTBL_ENTRY)&_ZN6S274C53v89Ev,
  (VTBL_ENTRY)&_ZN6S274C53v90Ev,
  (VTBL_ENTRY)&_ZN6S274C53v91Ev,
  (VTBL_ENTRY)&_ZN6S274C53v92Ev,
  (VTBL_ENTRY)&_ZN6S274C43v93Ev,
  (VTBL_ENTRY)&_ZN6S274C43v94Ev,
  (VTBL_ENTRY)&_ZN6S274C43v95Ev,
  (VTBL_ENTRY)&_ZN6S274C43v96Ev,
  (VTBL_ENTRY)&_ZN6S274C43v97Ev,
  (VTBL_ENTRY)&_ZN6S274C43v98Ev,
  (VTBL_ENTRY)&_ZN6S274C43v99Ev,
  (VTBL_ENTRY)&_ZN6S274C44v100Ev,
  (VTBL_ENTRY)&_ZN6S274C44v101Ev,
  (VTBL_ENTRY)&_ZN6S274C44v102Ev,
  (VTBL_ENTRY)&_ZN6S274C44v103Ev,
  (VTBL_ENTRY)&_ZN6S274C44v104Ev,
  (VTBL_ENTRY)&_ZN6S274C44v105Ev,
  (VTBL_ENTRY)&_ZN6S274C44v106Ev,
  (VTBL_ENTRY)&_ZN6S274C44v107Ev,
  (VTBL_ENTRY)&_ZN6S274C44v108Ev,
  (VTBL_ENTRY)&_ZN6S274C44v109Ev,
  (VTBL_ENTRY)&_ZN6S274C44v110Ev,
  (VTBL_ENTRY)&_ZN6S274C44v111Ev,
  (VTBL_ENTRY)&_ZN6S274C44v112Ev,
  (VTBL_ENTRY)&_ZN6S274C34v113Ev,
  (VTBL_ENTRY)&_ZN6S274C34v114Ev,
  (VTBL_ENTRY)&_ZN6S274C34v115Ev,
  (VTBL_ENTRY)&_ZN6S274C34v116Ev,
  (VTBL_ENTRY)&_ZN6S274C24v117Ev,
  (VTBL_ENTRY)&_ZN6S274C24v118Ev,
  (VTBL_ENTRY)&_ZN6S274C24v119Ev,
  (VTBL_ENTRY)&_ZN6S274C24v120Ev,
  (VTBL_ENTRY)&_ZN6S274C24v121Ev,
  (VTBL_ENTRY)&_ZN6S274C24v122Ev,
  (VTBL_ENTRY)&_ZN6S274C24v123Ev,
};
extern VTBL_ENTRY _ZTI6S274C2[];
extern  VTBL_ENTRY _ZTV6S274C2[];
Class_Descriptor cd_S274C2 = {  "S274C2", // class name
  bases_S274C2, 4,
  &(vtc_S274C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI6S274C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S274C2),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S274C1  : S274C2 {
  int s274c1f0[4];
  virtual  ~S274C1(); // _ZN6S274C1D1Ev
  virtual void  v1(); // _ZN6S274C12v1Ev
  virtual void  v2(); // _ZN6S274C12v2Ev
  virtual void  v3(); // _ZN6S274C12v3Ev
  virtual void  v4(); // _ZN6S274C12v4Ev
  virtual void  v5(); // _ZN6S274C12v5Ev
  virtual void  v6(); // _ZN6S274C12v6Ev
  S274C1(); // tgen
};
//SIG(1 S274C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 FC7{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v113 v114 v115 v116 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v117 v118 v119 v120 v121 v122 v123 FC23{ BC24{ BC11}} Fi:1} vd v1 v2 v3 v4 v5 v6 Fi[4]}


 S274C1 ::~S274C1(){ note_dtor("S274C1", this);}
void  S274C1 ::v1(){vfunc_called(this, "_ZN6S274C12v1Ev");}
void  S274C1 ::v2(){vfunc_called(this, "_ZN6S274C12v2Ev");}
void  S274C1 ::v3(){vfunc_called(this, "_ZN6S274C12v3Ev");}
void  S274C1 ::v4(){vfunc_called(this, "_ZN6S274C12v4Ev");}
void  S274C1 ::v5(){vfunc_called(this, "_ZN6S274C12v5Ev");}
void  S274C1 ::v6(){vfunc_called(this, "_ZN6S274C12v6Ev");}
S274C1 ::S274C1(){ note_ctor("S274C1", this);} // tgen

static void Test_S274C1()
{
  extern Class_Descriptor cd_S274C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,64)];
    init_test(&cd_S274C1, buf);
    S274C1 *dp, &lv = *(dp=new (buf) S274C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,252), "sizeof(S274C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S274C1)");
    check_base_class_offset(lv, (S274C6*)(S274C5*)(S274C4*)(S274C3*)(S274C2*), 0, "S274C1");
    check_base_class_offset(lv, (S274C5*)(S274C4*)(S274C3*)(S274C2*), 0, "S274C1");
    check_base_class_offset(lv, (S274C4*)(S274C3*)(S274C2*), 0, "S274C1");
    check_base_class_offset(lv, (S274C3*)(S274C2*), 0, "S274C1");
    check_base_class_offset(lv, (S274C2*), 0, "S274C1");
    check_field_offset(lv, s274c1f0, ABISELECT(316,236), "S274C1.s274c1f0");
    test_class_info(&lv, &cd_S274C1);
    dp->~S274C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS274C1(Test_S274C1, "S274C1", ABISELECT(336,252));

#else // __cplusplus

extern void _ZN6S274C1C1Ev();
extern void _ZN6S274C1D1Ev();
Name_Map name_map_S274C1[] = {
  NSPAIR(_ZN6S274C1C1Ev),
  NSPAIR(_ZN6S274C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S274C6;
extern VTBL_ENTRY _ZTI6S274C6[];
extern  VTBL_ENTRY _ZTV6S274C6[];
extern Class_Descriptor cd_S274C5;
extern VTBL_ENTRY _ZTI6S274C5[];
extern  VTBL_ENTRY _ZTV6S274C5[];
extern Class_Descriptor cd_S274C4;
extern VTBL_ENTRY _ZTI6S274C4[];
extern  VTBL_ENTRY _ZTV6S274C4[];
extern Class_Descriptor cd_S274C3;
extern VTBL_ENTRY _ZTI6S274C3[];
extern  VTBL_ENTRY _ZTV6S274C3[];
extern Class_Descriptor cd_S274C2;
extern VTBL_ENTRY _ZTI6S274C2[];
extern  VTBL_ENTRY _ZTV6S274C2[];
static Base_Class bases_S274C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S274C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S274C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S274C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S274C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S274C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S274C1[];
extern void _ZN6S274C1D1Ev();
extern void _ZN6S274C1D0Ev();
extern void _ZN6S274C62v7Ev();
extern void _ZN6S274C62v8Ev();
extern void _ZN6S274C62v9Ev();
extern void _ZN6S274C63v10Ev();
extern void _ZN6S274C63v11Ev();
extern void _ZN6S274C63v12Ev();
extern void _ZN6S274C63v13Ev();
extern void _ZN6S274C63v14Ev();
extern void _ZN6S274C63v15Ev();
extern void _ZN6S274C63v16Ev();
extern void _ZN6S274C63v17Ev();
extern void _ZN6S274C63v18Ev();
extern void _ZN6S274C63v19Ev();
extern void _ZN6S274C63v20Ev();
extern void _ZN6S274C63v21Ev();
extern void _ZN6S274C63v22Ev();
extern void _ZN6S274C63v23Ev();
extern void _ZN6S274C63v24Ev();
extern void _ZN6S274C63v25Ev();
extern void _ZN6S274C63v26Ev();
extern void _ZN6S274C63v27Ev();
extern void _ZN6S274C63v28Ev();
extern void _ZN6S274C63v29Ev();
extern void _ZN6S274C63v30Ev();
extern void _ZN6S274C63v31Ev();
extern void _ZN6S274C63v32Ev();
extern void _ZN6S274C63v33Ev();
extern void _ZN6S274C63v34Ev();
extern void _ZN6S274C63v35Ev();
extern void _ZN6S274C63v36Ev();
extern void _ZN6S274C63v37Ev();
extern void _ZN6S274C63v38Ev();
extern void _ZN6S274C63v39Ev();
extern void _ZN6S274C63v40Ev();
extern void _ZN6S274C63v41Ev();
extern void _ZN6S274C63v42Ev();
extern void _ZN6S274C63v43Ev();
extern void _ZN6S274C63v44Ev();
extern void _ZN6S274C63v45Ev();
extern void _ZN6S274C63v46Ev();
extern void _ZN6S274C63v47Ev();
extern void _ZN6S274C63v48Ev();
extern void _ZN6S274C63v49Ev();
extern void _ZN6S274C63v50Ev();
extern void _ZN6S274C63v51Ev();
extern void _ZN6S274C63v52Ev();
extern void _ZN6S274C63v53Ev();
extern void _ZN6S274C63v54Ev();
extern void _ZN6S274C63v55Ev();
extern void _ZN6S274C63v56Ev();
extern void _ZN6S274C63v57Ev();
extern void _ZN6S274C63v58Ev();
extern void _ZN6S274C63v59Ev();
extern void _ZN6S274C63v60Ev();
extern void _ZN6S274C63v61Ev();
extern void _ZN6S274C63v62Ev();
extern void _ZN6S274C63v63Ev();
extern void _ZN6S274C63v64Ev();
extern void _ZN6S274C63v65Ev();
extern void _ZN6S274C63v66Ev();
extern void _ZN6S274C63v67Ev();
extern void _ZN6S274C63v68Ev();
extern void _ZN6S274C63v69Ev();
extern void _ZN6S274C63v70Ev();
extern void _ZN6S274C53v71Ev();
extern void _ZN6S274C53v72Ev();
extern void _ZN6S274C53v73Ev();
extern void _ZN6S274C53v74Ev();
extern void _ZN6S274C53v75Ev();
extern void _ZN6S274C53v76Ev();
extern void _ZN6S274C53v77Ev();
extern void _ZN6S274C53v78Ev();
extern void _ZN6S274C53v79Ev();
extern void _ZN6S274C53v80Ev();
extern void _ZN6S274C53v81Ev();
extern void _ZN6S274C53v82Ev();
extern void _ZN6S274C53v83Ev();
extern void _ZN6S274C53v84Ev();
extern void _ZN6S274C53v85Ev();
extern void _ZN6S274C53v86Ev();
extern void _ZN6S274C53v87Ev();
extern void _ZN6S274C53v88Ev();
extern void _ZN6S274C53v89Ev();
extern void _ZN6S274C53v90Ev();
extern void _ZN6S274C53v91Ev();
extern void _ZN6S274C53v92Ev();
extern void _ZN6S274C43v93Ev();
extern void _ZN6S274C43v94Ev();
extern void _ZN6S274C43v95Ev();
extern void _ZN6S274C43v96Ev();
extern void _ZN6S274C43v97Ev();
extern void _ZN6S274C43v98Ev();
extern void _ZN6S274C43v99Ev();
extern void _ZN6S274C44v100Ev();
extern void _ZN6S274C44v101Ev();
extern void _ZN6S274C44v102Ev();
extern void _ZN6S274C44v103Ev();
extern void _ZN6S274C44v104Ev();
extern void _ZN6S274C44v105Ev();
extern void _ZN6S274C44v106Ev();
extern void _ZN6S274C44v107Ev();
extern void _ZN6S274C44v108Ev();
extern void _ZN6S274C44v109Ev();
extern void _ZN6S274C44v110Ev();
extern void _ZN6S274C44v111Ev();
extern void _ZN6S274C44v112Ev();
extern void _ZN6S274C34v113Ev();
extern void _ZN6S274C34v114Ev();
extern void _ZN6S274C34v115Ev();
extern void _ZN6S274C34v116Ev();
extern void _ZN6S274C24v117Ev();
extern void _ZN6S274C24v118Ev();
extern void _ZN6S274C24v119Ev();
extern void _ZN6S274C24v120Ev();
extern void _ZN6S274C24v121Ev();
extern void _ZN6S274C24v122Ev();
extern void _ZN6S274C24v123Ev();
extern void _ZN6S274C12v1Ev();
extern void _ZN6S274C12v2Ev();
extern void _ZN6S274C12v3Ev();
extern void _ZN6S274C12v4Ev();
extern void _ZN6S274C12v5Ev();
extern void _ZN6S274C12v6Ev();
static  VTBL_ENTRY vtc_S274C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S274C1[0]),
  (VTBL_ENTRY)&_ZN6S274C1D1Ev,
  (VTBL_ENTRY)&_ZN6S274C1D0Ev,
  (VTBL_ENTRY)&_ZN6S274C62v7Ev,
  (VTBL_ENTRY)&_ZN6S274C62v8Ev,
  (VTBL_ENTRY)&_ZN6S274C62v9Ev,
  (VTBL_ENTRY)&_ZN6S274C63v10Ev,
  (VTBL_ENTRY)&_ZN6S274C63v11Ev,
  (VTBL_ENTRY)&_ZN6S274C63v12Ev,
  (VTBL_ENTRY)&_ZN6S274C63v13Ev,
  (VTBL_ENTRY)&_ZN6S274C63v14Ev,
  (VTBL_ENTRY)&_ZN6S274C63v15Ev,
  (VTBL_ENTRY)&_ZN6S274C63v16Ev,
  (VTBL_ENTRY)&_ZN6S274C63v17Ev,
  (VTBL_ENTRY)&_ZN6S274C63v18Ev,
  (VTBL_ENTRY)&_ZN6S274C63v19Ev,
  (VTBL_ENTRY)&_ZN6S274C63v20Ev,
  (VTBL_ENTRY)&_ZN6S274C63v21Ev,
  (VTBL_ENTRY)&_ZN6S274C63v22Ev,
  (VTBL_ENTRY)&_ZN6S274C63v23Ev,
  (VTBL_ENTRY)&_ZN6S274C63v24Ev,
  (VTBL_ENTRY)&_ZN6S274C63v25Ev,
  (VTBL_ENTRY)&_ZN6S274C63v26Ev,
  (VTBL_ENTRY)&_ZN6S274C63v27Ev,
  (VTBL_ENTRY)&_ZN6S274C63v28Ev,
  (VTBL_ENTRY)&_ZN6S274C63v29Ev,
  (VTBL_ENTRY)&_ZN6S274C63v30Ev,
  (VTBL_ENTRY)&_ZN6S274C63v31Ev,
  (VTBL_ENTRY)&_ZN6S274C63v32Ev,
  (VTBL_ENTRY)&_ZN6S274C63v33Ev,
  (VTBL_ENTRY)&_ZN6S274C63v34Ev,
  (VTBL_ENTRY)&_ZN6S274C63v35Ev,
  (VTBL_ENTRY)&_ZN6S274C63v36Ev,
  (VTBL_ENTRY)&_ZN6S274C63v37Ev,
  (VTBL_ENTRY)&_ZN6S274C63v38Ev,
  (VTBL_ENTRY)&_ZN6S274C63v39Ev,
  (VTBL_ENTRY)&_ZN6S274C63v40Ev,
  (VTBL_ENTRY)&_ZN6S274C63v41Ev,
  (VTBL_ENTRY)&_ZN6S274C63v42Ev,
  (VTBL_ENTRY)&_ZN6S274C63v43Ev,
  (VTBL_ENTRY)&_ZN6S274C63v44Ev,
  (VTBL_ENTRY)&_ZN6S274C63v45Ev,
  (VTBL_ENTRY)&_ZN6S274C63v46Ev,
  (VTBL_ENTRY)&_ZN6S274C63v47Ev,
  (VTBL_ENTRY)&_ZN6S274C63v48Ev,
  (VTBL_ENTRY)&_ZN6S274C63v49Ev,
  (VTBL_ENTRY)&_ZN6S274C63v50Ev,
  (VTBL_ENTRY)&_ZN6S274C63v51Ev,
  (VTBL_ENTRY)&_ZN6S274C63v52Ev,
  (VTBL_ENTRY)&_ZN6S274C63v53Ev,
  (VTBL_ENTRY)&_ZN6S274C63v54Ev,
  (VTBL_ENTRY)&_ZN6S274C63v55Ev,
  (VTBL_ENTRY)&_ZN6S274C63v56Ev,
  (VTBL_ENTRY)&_ZN6S274C63v57Ev,
  (VTBL_ENTRY)&_ZN6S274C63v58Ev,
  (VTBL_ENTRY)&_ZN6S274C63v59Ev,
  (VTBL_ENTRY)&_ZN6S274C63v60Ev,
  (VTBL_ENTRY)&_ZN6S274C63v61Ev,
  (VTBL_ENTRY)&_ZN6S274C63v62Ev,
  (VTBL_ENTRY)&_ZN6S274C63v63Ev,
  (VTBL_ENTRY)&_ZN6S274C63v64Ev,
  (VTBL_ENTRY)&_ZN6S274C63v65Ev,
  (VTBL_ENTRY)&_ZN6S274C63v66Ev,
  (VTBL_ENTRY)&_ZN6S274C63v67Ev,
  (VTBL_ENTRY)&_ZN6S274C63v68Ev,
  (VTBL_ENTRY)&_ZN6S274C63v69Ev,
  (VTBL_ENTRY)&_ZN6S274C63v70Ev,
  (VTBL_ENTRY)&_ZN6S274C53v71Ev,
  (VTBL_ENTRY)&_ZN6S274C53v72Ev,
  (VTBL_ENTRY)&_ZN6S274C53v73Ev,
  (VTBL_ENTRY)&_ZN6S274C53v74Ev,
  (VTBL_ENTRY)&_ZN6S274C53v75Ev,
  (VTBL_ENTRY)&_ZN6S274C53v76Ev,
  (VTBL_ENTRY)&_ZN6S274C53v77Ev,
  (VTBL_ENTRY)&_ZN6S274C53v78Ev,
  (VTBL_ENTRY)&_ZN6S274C53v79Ev,
  (VTBL_ENTRY)&_ZN6S274C53v80Ev,
  (VTBL_ENTRY)&_ZN6S274C53v81Ev,
  (VTBL_ENTRY)&_ZN6S274C53v82Ev,
  (VTBL_ENTRY)&_ZN6S274C53v83Ev,
  (VTBL_ENTRY)&_ZN6S274C53v84Ev,
  (VTBL_ENTRY)&_ZN6S274C53v85Ev,
  (VTBL_ENTRY)&_ZN6S274C53v86Ev,
  (VTBL_ENTRY)&_ZN6S274C53v87Ev,
  (VTBL_ENTRY)&_ZN6S274C53v88Ev,
  (VTBL_ENTRY)&_ZN6S274C53v89Ev,
  (VTBL_ENTRY)&_ZN6S274C53v90Ev,
  (VTBL_ENTRY)&_ZN6S274C53v91Ev,
  (VTBL_ENTRY)&_ZN6S274C53v92Ev,
  (VTBL_ENTRY)&_ZN6S274C43v93Ev,
  (VTBL_ENTRY)&_ZN6S274C43v94Ev,
  (VTBL_ENTRY)&_ZN6S274C43v95Ev,
  (VTBL_ENTRY)&_ZN6S274C43v96Ev,
  (VTBL_ENTRY)&_ZN6S274C43v97Ev,
  (VTBL_ENTRY)&_ZN6S274C43v98Ev,
  (VTBL_ENTRY)&_ZN6S274C43v99Ev,
  (VTBL_ENTRY)&_ZN6S274C44v100Ev,
  (VTBL_ENTRY)&_ZN6S274C44v101Ev,
  (VTBL_ENTRY)&_ZN6S274C44v102Ev,
  (VTBL_ENTRY)&_ZN6S274C44v103Ev,
  (VTBL_ENTRY)&_ZN6S274C44v104Ev,
  (VTBL_ENTRY)&_ZN6S274C44v105Ev,
  (VTBL_ENTRY)&_ZN6S274C44v106Ev,
  (VTBL_ENTRY)&_ZN6S274C44v107Ev,
  (VTBL_ENTRY)&_ZN6S274C44v108Ev,
  (VTBL_ENTRY)&_ZN6S274C44v109Ev,
  (VTBL_ENTRY)&_ZN6S274C44v110Ev,
  (VTBL_ENTRY)&_ZN6S274C44v111Ev,
  (VTBL_ENTRY)&_ZN6S274C44v112Ev,
  (VTBL_ENTRY)&_ZN6S274C34v113Ev,
  (VTBL_ENTRY)&_ZN6S274C34v114Ev,
  (VTBL_ENTRY)&_ZN6S274C34v115Ev,
  (VTBL_ENTRY)&_ZN6S274C34v116Ev,
  (VTBL_ENTRY)&_ZN6S274C24v117Ev,
  (VTBL_ENTRY)&_ZN6S274C24v118Ev,
  (VTBL_ENTRY)&_ZN6S274C24v119Ev,
  (VTBL_ENTRY)&_ZN6S274C24v120Ev,
  (VTBL_ENTRY)&_ZN6S274C24v121Ev,
  (VTBL_ENTRY)&_ZN6S274C24v122Ev,
  (VTBL_ENTRY)&_ZN6S274C24v123Ev,
  (VTBL_ENTRY)&_ZN6S274C12v1Ev,
  (VTBL_ENTRY)&_ZN6S274C12v2Ev,
  (VTBL_ENTRY)&_ZN6S274C12v3Ev,
  (VTBL_ENTRY)&_ZN6S274C12v4Ev,
  (VTBL_ENTRY)&_ZN6S274C12v5Ev,
  (VTBL_ENTRY)&_ZN6S274C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S274C1[];
extern  VTBL_ENTRY _ZTV6S274C1[];
Class_Descriptor cd_S274C1 = {  "S274C1", // class name
  bases_S274C1, 5,
  &(vtc_S274C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,252), // object size
  NSPAIRA(_ZTI6S274C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S274C1),127, //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  S275C6  {
  int s275c6f0;
  __tsi64 s275c6f1;
  void *s275c6f2[4];
  int s275c6f3[2];
  void *s275c6f4;
  ::S3221C4_nt s275c6f5;
  void *s275c6f6[2];
  virtual  ~S275C6(); // _ZN6S275C6D1Ev
  virtual void  v7(); // _ZN6S275C62v7Ev
  virtual void  v8(); // _ZN6S275C62v8Ev
  virtual void  v9(); // _ZN6S275C62v9Ev
  virtual void  v10(); // _ZN6S275C63v10Ev
  virtual void  v11(); // _ZN6S275C63v11Ev
  virtual void  v12(); // _ZN6S275C63v12Ev
  virtual void  v13(); // _ZN6S275C63v13Ev
  virtual void  v14(); // _ZN6S275C63v14Ev
  virtual void  v15(); // _ZN6S275C63v15Ev
  virtual void  v16(); // _ZN6S275C63v16Ev
  virtual void  v17(); // _ZN6S275C63v17Ev
  virtual void  v18(); // _ZN6S275C63v18Ev
  virtual void  v19(); // _ZN6S275C63v19Ev
  virtual void  v20(); // _ZN6S275C63v20Ev
  virtual void  v21(); // _ZN6S275C63v21Ev
  virtual void  v22(); // _ZN6S275C63v22Ev
  virtual void  v23(); // _ZN6S275C63v23Ev
  virtual void  v24(); // _ZN6S275C63v24Ev
  virtual void  v25(); // _ZN6S275C63v25Ev
  virtual void  v26(); // _ZN6S275C63v26Ev
  virtual void  v27(); // _ZN6S275C63v27Ev
  virtual void  v28(); // _ZN6S275C63v28Ev
  virtual void  v29(); // _ZN6S275C63v29Ev
  virtual void  v30(); // _ZN6S275C63v30Ev
  virtual void  v31(); // _ZN6S275C63v31Ev
  virtual void  v32(); // _ZN6S275C63v32Ev
  virtual void  v33(); // _ZN6S275C63v33Ev
  virtual void  v34(); // _ZN6S275C63v34Ev
  virtual void  v35(); // _ZN6S275C63v35Ev
  virtual void  v36(); // _ZN6S275C63v36Ev
  virtual void  v37(); // _ZN6S275C63v37Ev
  virtual void  v38(); // _ZN6S275C63v38Ev
  virtual void  v39(); // _ZN6S275C63v39Ev
  virtual void  v40(); // _ZN6S275C63v40Ev
  virtual void  v41(); // _ZN6S275C63v41Ev
  virtual void  v42(); // _ZN6S275C63v42Ev
  virtual void  v43(); // _ZN6S275C63v43Ev
  virtual void  v44(); // _ZN6S275C63v44Ev
  virtual void  v45(); // _ZN6S275C63v45Ev
  virtual void  v46(); // _ZN6S275C63v46Ev
  virtual void  v47(); // _ZN6S275C63v47Ev
  virtual void  v48(); // _ZN6S275C63v48Ev
  virtual void  v49(); // _ZN6S275C63v49Ev
  virtual void  v50(); // _ZN6S275C63v50Ev
  virtual void  v51(); // _ZN6S275C63v51Ev
  virtual void  v52(); // _ZN6S275C63v52Ev
  virtual void  v53(); // _ZN6S275C63v53Ev
  virtual void  v54(); // _ZN6S275C63v54Ev
  virtual void  v55(); // _ZN6S275C63v55Ev
  virtual void  v56(); // _ZN6S275C63v56Ev
  virtual void  v57(); // _ZN6S275C63v57Ev
  virtual void  v58(); // _ZN6S275C63v58Ev
  virtual void  v59(); // _ZN6S275C63v59Ev
  virtual void  v60(); // _ZN6S275C63v60Ev
  virtual void  v61(); // _ZN6S275C63v61Ev
  virtual void  v62(); // _ZN6S275C63v62Ev
  virtual void  v63(); // _ZN6S275C63v63Ev
  virtual void  v64(); // _ZN6S275C63v64Ev
  virtual void  v65(); // _ZN6S275C63v65Ev
  virtual void  v66(); // _ZN6S275C63v66Ev
  virtual void  v67(); // _ZN6S275C63v67Ev
  virtual void  v68(); // _ZN6S275C63v68Ev
  virtual void  v69(); // _ZN6S275C63v69Ev
  virtual void  v70(); // _ZN6S275C63v70Ev
  S275C6(); // tgen
};
//SIG(-1 S275C6) 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]}


 S275C6 ::~S275C6(){ note_dtor("S275C6", this);}
void  S275C6 ::v7(){vfunc_called(this, "_ZN6S275C62v7Ev");}
void  S275C6 ::v8(){vfunc_called(this, "_ZN6S275C62v8Ev");}
void  S275C6 ::v9(){vfunc_called(this, "_ZN6S275C62v9Ev");}
void  S275C6 ::v10(){vfunc_called(this, "_ZN6S275C63v10Ev");}
void  S275C6 ::v11(){vfunc_called(this, "_ZN6S275C63v11Ev");}
void  S275C6 ::v12(){vfunc_called(this, "_ZN6S275C63v12Ev");}
void  S275C6 ::v13(){vfunc_called(this, "_ZN6S275C63v13Ev");}
void  S275C6 ::v14(){vfunc_called(this, "_ZN6S275C63v14Ev");}
void  S275C6 ::v15(){vfunc_called(this, "_ZN6S275C63v15Ev");}
void  S275C6 ::v16(){vfunc_called(this, "_ZN6S275C63v16Ev");}
void  S275C6 ::v17(){vfunc_called(this, "_ZN6S275C63v17Ev");}
void  S275C6 ::v18(){vfunc_called(this, "_ZN6S275C63v18Ev");}
void  S275C6 ::v19(){vfunc_called(this, "_ZN6S275C63v19Ev");}
void  S275C6 ::v20(){vfunc_called(this, "_ZN6S275C63v20Ev");}
void  S275C6 ::v21(){vfunc_called(this, "_ZN6S275C63v21Ev");}
void  S275C6 ::v22(){vfunc_called(this, "_ZN6S275C63v22Ev");}
void  S275C6 ::v23(){vfunc_called(this, "_ZN6S275C63v23Ev");}
void  S275C6 ::v24(){vfunc_called(this, "_ZN6S275C63v24Ev");}
void  S275C6 ::v25(){vfunc_called(this, "_ZN6S275C63v25Ev");}
void  S275C6 ::v26(){vfunc_called(this, "_ZN6S275C63v26Ev");}
void  S275C6 ::v27(){vfunc_called(this, "_ZN6S275C63v27Ev");}
void  S275C6 ::v28(){vfunc_called(this, "_ZN6S275C63v28Ev");}
void  S275C6 ::v29(){vfunc_called(this, "_ZN6S275C63v29Ev");}
void  S275C6 ::v30(){vfunc_called(this, "_ZN6S275C63v30Ev");}
void  S275C6 ::v31(){vfunc_called(this, "_ZN6S275C63v31Ev");}
void  S275C6 ::v32(){vfunc_called(this, "_ZN6S275C63v32Ev");}
void  S275C6 ::v33(){vfunc_called(this, "_ZN6S275C63v33Ev");}
void  S275C6 ::v34(){vfunc_called(this, "_ZN6S275C63v34Ev");}
void  S275C6 ::v35(){vfunc_called(this, "_ZN6S275C63v35Ev");}
void  S275C6 ::v36(){vfunc_called(this, "_ZN6S275C63v36Ev");}
void  S275C6 ::v37(){vfunc_called(this, "_ZN6S275C63v37Ev");}
void  S275C6 ::v38(){vfunc_called(this, "_ZN6S275C63v38Ev");}
void  S275C6 ::v39(){vfunc_called(this, "_ZN6S275C63v39Ev");}
void  S275C6 ::v40(){vfunc_called(this, "_ZN6S275C63v40Ev");}
void  S275C6 ::v41(){vfunc_called(this, "_ZN6S275C63v41Ev");}
void  S275C6 ::v42(){vfunc_called(this, "_ZN6S275C63v42Ev");}
void  S275C6 ::v43(){vfunc_called(this, "_ZN6S275C63v43Ev");}
void  S275C6 ::v44(){vfunc_called(this, "_ZN6S275C63v44Ev");}
void  S275C6 ::v45(){vfunc_called(this, "_ZN6S275C63v45Ev");}
void  S275C6 ::v46(){vfunc_called(this, "_ZN6S275C63v46Ev");}
void  S275C6 ::v47(){vfunc_called(this, "_ZN6S275C63v47Ev");}
void  S275C6 ::v48(){vfunc_called(this, "_ZN6S275C63v48Ev");}
void  S275C6 ::v49(){vfunc_called(this, "_ZN6S275C63v49Ev");}
void  S275C6 ::v50(){vfunc_called(this, "_ZN6S275C63v50Ev");}
void  S275C6 ::v51(){vfunc_called(this, "_ZN6S275C63v51Ev");}
void  S275C6 ::v52(){vfunc_called(this, "_ZN6S275C63v52Ev");}
void  S275C6 ::v53(){vfunc_called(this, "_ZN6S275C63v53Ev");}
void  S275C6 ::v54(){vfunc_called(this, "_ZN6S275C63v54Ev");}
void  S275C6 ::v55(){vfunc_called(this, "_ZN6S275C63v55Ev");}
void  S275C6 ::v56(){vfunc_called(this, "_ZN6S275C63v56Ev");}
void  S275C6 ::v57(){vfunc_called(this, "_ZN6S275C63v57Ev");}
void  S275C6 ::v58(){vfunc_called(this, "_ZN6S275C63v58Ev");}
void  S275C6 ::v59(){vfunc_called(this, "_ZN6S275C63v59Ev");}
void  S275C6 ::v60(){vfunc_called(this, "_ZN6S275C63v60Ev");}
void  S275C6 ::v61(){vfunc_called(this, "_ZN6S275C63v61Ev");}
void  S275C6 ::v62(){vfunc_called(this, "_ZN6S275C63v62Ev");}
void  S275C6 ::v63(){vfunc_called(this, "_ZN6S275C63v63Ev");}
void  S275C6 ::v64(){vfunc_called(this, "_ZN6S275C63v64Ev");}
void  S275C6 ::v65(){vfunc_called(this, "_ZN6S275C63v65Ev");}
void  S275C6 ::v66(){vfunc_called(this, "_ZN6S275C63v66Ev");}
void  S275C6 ::v67(){vfunc_called(this, "_ZN6S275C63v67Ev");}
void  S275C6 ::v68(){vfunc_called(this, "_ZN6S275C63v68Ev");}
void  S275C6 ::v69(){vfunc_called(this, "_ZN6S275C63v69Ev");}
void  S275C6 ::v70(){vfunc_called(this, "_ZN6S275C63v70Ev");}
S275C6 ::S275C6(){ note_ctor("S275C6", this);} // tgen

static void Test_S275C6()
{
  extern Class_Descriptor cd_S275C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S275C6, buf);
    S275C6 *dp, &lv = *(dp=new (buf) S275C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S275C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S275C6)");
    check_field_offset(lv, s275c6f0, ABISELECT(8,4), "S275C6.s275c6f0");
    check_field_offset(lv, s275c6f1, ABISELECT(16,8), "S275C6.s275c6f1");
    check_field_offset(lv, s275c6f2, ABISELECT(24,16), "S275C6.s275c6f2");
    check_field_offset(lv, s275c6f3, ABISELECT(56,32), "S275C6.s275c6f3");
    check_field_offset(lv, s275c6f4, ABISELECT(64,40), "S275C6.s275c6f4");
    check_field_offset(lv, s275c6f5, ABISELECT(72,44), "S275C6.s275c6f5");
    check_field_offset(lv, s275c6f6, ABISELECT(80,52), "S275C6.s275c6f6");
    test_class_info(&lv, &cd_S275C6);
    dp->~S275C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS275C6(Test_S275C6, "S275C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S275C6C1Ev();
extern void _ZN6S275C6D1Ev();
Name_Map name_map_S275C6[] = {
  NSPAIR(_ZN6S275C6C1Ev),
  NSPAIR(_ZN6S275C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S275C6[];
extern void _ZN6S275C6D1Ev();
extern void _ZN6S275C6D0Ev();
extern void _ZN6S275C62v7Ev();
extern void _ZN6S275C62v8Ev();
extern void _ZN6S275C62v9Ev();
extern void _ZN6S275C63v10Ev();
extern void _ZN6S275C63v11Ev();
extern void _ZN6S275C63v12Ev();
extern void _ZN6S275C63v13Ev();
extern void _ZN6S275C63v14Ev();
extern void _ZN6S275C63v15Ev();
extern void _ZN6S275C63v16Ev();
extern void _ZN6S275C63v17Ev();
extern void _ZN6S275C63v18Ev();
extern void _ZN6S275C63v19Ev();
extern void _ZN6S275C63v20Ev();
extern void _ZN6S275C63v21Ev();
extern void _ZN6S275C63v22Ev();
extern void _ZN6S275C63v23Ev();
extern void _ZN6S275C63v24Ev();
extern void _ZN6S275C63v25Ev();
extern void _ZN6S275C63v26Ev();
extern void _ZN6S275C63v27Ev();
extern void _ZN6S275C63v28Ev();
extern void _ZN6S275C63v29Ev();
extern void _ZN6S275C63v30Ev();
extern void _ZN6S275C63v31Ev();
extern void _ZN6S275C63v32Ev();
extern void _ZN6S275C63v33Ev();
extern void _ZN6S275C63v34Ev();
extern void _ZN6S275C63v35Ev();
extern void _ZN6S275C63v36Ev();
extern void _ZN6S275C63v37Ev();
extern void _ZN6S275C63v38Ev();
extern void _ZN6S275C63v39Ev();
extern void _ZN6S275C63v40Ev();
extern void _ZN6S275C63v41Ev();
extern void _ZN6S275C63v42Ev();
extern void _ZN6S275C63v43Ev();
extern void _ZN6S275C63v44Ev();
extern void _ZN6S275C63v45Ev();
extern void _ZN6S275C63v46Ev();
extern void _ZN6S275C63v47Ev();
extern void _ZN6S275C63v48Ev();
extern void _ZN6S275C63v49Ev();
extern void _ZN6S275C63v50Ev();
extern void _ZN6S275C63v51Ev();
extern void _ZN6S275C63v52Ev();
extern void _ZN6S275C63v53Ev();
extern void _ZN6S275C63v54Ev();
extern void _ZN6S275C63v55Ev();
extern void _ZN6S275C63v56Ev();
extern void _ZN6S275C63v57Ev();
extern void _ZN6S275C63v58Ev();
extern void _ZN6S275C63v59Ev();
extern void _ZN6S275C63v60Ev();
extern void _ZN6S275C63v61Ev();
extern void _ZN6S275C63v62Ev();
extern void _ZN6S275C63v63Ev();
extern void _ZN6S275C63v64Ev();
extern void _ZN6S275C63v65Ev();
extern void _ZN6S275C63v66Ev();
extern void _ZN6S275C63v67Ev();
extern void _ZN6S275C63v68Ev();
extern void _ZN6S275C63v69Ev();
extern void _ZN6S275C63v70Ev();
static  VTBL_ENTRY vtc_S275C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S275C6[0]),
  (VTBL_ENTRY)&_ZN6S275C6D1Ev,
  (VTBL_ENTRY)&_ZN6S275C6D0Ev,
  (VTBL_ENTRY)&_ZN6S275C62v7Ev,
  (VTBL_ENTRY)&_ZN6S275C62v8Ev,
  (VTBL_ENTRY)&_ZN6S275C62v9Ev,
  (VTBL_ENTRY)&_ZN6S275C63v10Ev,
  (VTBL_ENTRY)&_ZN6S275C63v11Ev,
  (VTBL_ENTRY)&_ZN6S275C63v12Ev,
  (VTBL_ENTRY)&_ZN6S275C63v13Ev,
  (VTBL_ENTRY)&_ZN6S275C63v14Ev,
  (VTBL_ENTRY)&_ZN6S275C63v15Ev,
  (VTBL_ENTRY)&_ZN6S275C63v16Ev,
  (VTBL_ENTRY)&_ZN6S275C63v17Ev,
  (VTBL_ENTRY)&_ZN6S275C63v18Ev,
  (VTBL_ENTRY)&_ZN6S275C63v19Ev,
  (VTBL_ENTRY)&_ZN6S275C63v20Ev,
  (VTBL_ENTRY)&_ZN6S275C63v21Ev,
  (VTBL_ENTRY)&_ZN6S275C63v22Ev,
  (VTBL_ENTRY)&_ZN6S275C63v23Ev,
  (VTBL_ENTRY)&_ZN6S275C63v24Ev,
  (VTBL_ENTRY)&_ZN6S275C63v25Ev,
  (VTBL_ENTRY)&_ZN6S275C63v26Ev,
  (VTBL_ENTRY)&_ZN6S275C63v27Ev,
  (VTBL_ENTRY)&_ZN6S275C63v28Ev,
  (VTBL_ENTRY)&_ZN6S275C63v29Ev,
  (VTBL_ENTRY)&_ZN6S275C63v30Ev,
  (VTBL_ENTRY)&_ZN6S275C63v31Ev,
  (VTBL_ENTRY)&_ZN6S275C63v32Ev,
  (VTBL_ENTRY)&_ZN6S275C63v33Ev,
  (VTBL_ENTRY)&_ZN6S275C63v34Ev,
  (VTBL_ENTRY)&_ZN6S275C63v35Ev,
  (VTBL_ENTRY)&_ZN6S275C63v36Ev,
  (VTBL_ENTRY)&_ZN6S275C63v37Ev,
  (VTBL_ENTRY)&_ZN6S275C63v38Ev,
  (VTBL_ENTRY)&_ZN6S275C63v39Ev,
  (VTBL_ENTRY)&_ZN6S275C63v40Ev,
  (VTBL_ENTRY)&_ZN6S275C63v41Ev,
  (VTBL_ENTRY)&_ZN6S275C63v42Ev,
  (VTBL_ENTRY)&_ZN6S275C63v43Ev,
  (VTBL_ENTRY)&_ZN6S275C63v44Ev,
  (VTBL_ENTRY)&_ZN6S275C63v45Ev,
  (VTBL_ENTRY)&_ZN6S275C63v46Ev,
  (VTBL_ENTRY)&_ZN6S275C63v47Ev,
  (VTBL_ENTRY)&_ZN6S275C63v48Ev,
  (VTBL_ENTRY)&_ZN6S275C63v49Ev,
  (VTBL_ENTRY)&_ZN6S275C63v50Ev,
  (VTBL_ENTRY)&_ZN6S275C63v51Ev,
  (VTBL_ENTRY)&_ZN6S275C63v52Ev,
  (VTBL_ENTRY)&_ZN6S275C63v53Ev,
  (VTBL_ENTRY)&_ZN6S275C63v54Ev,
  (VTBL_ENTRY)&_ZN6S275C63v55Ev,
  (VTBL_ENTRY)&_ZN6S275C63v56Ev,
  (VTBL_ENTRY)&_ZN6S275C63v57Ev,
  (VTBL_ENTRY)&_ZN6S275C63v58Ev,
  (VTBL_ENTRY)&_ZN6S275C63v59Ev,
  (VTBL_ENTRY)&_ZN6S275C63v60Ev,
  (VTBL_ENTRY)&_ZN6S275C63v61Ev,
  (VTBL_ENTRY)&_ZN6S275C63v62Ev,
  (VTBL_ENTRY)&_ZN6S275C63v63Ev,
  (VTBL_ENTRY)&_ZN6S275C63v64Ev,
  (VTBL_ENTRY)&_ZN6S275C63v65Ev,
  (VTBL_ENTRY)&_ZN6S275C63v66Ev,
  (VTBL_ENTRY)&_ZN6S275C63v67Ev,
  (VTBL_ENTRY)&_ZN6S275C63v68Ev,
  (VTBL_ENTRY)&_ZN6S275C63v69Ev,
  (VTBL_ENTRY)&_ZN6S275C63v70Ev,
};
extern VTBL_ENTRY _ZTI6S275C6[];
extern  VTBL_ENTRY _ZTV6S275C6[];
Class_Descriptor cd_S275C6 = {  "S275C6", // class name
  0,0,//no base classes
  &(vtc_S275C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S275C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S275C6),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  S275C5  : S275C6 {
  int s275c5f0[2];
  void *s275c5f1;
  int s275c5f2[2];
  ::S239C8_nt s275c5f3;
  ::S239C8_nt s275c5f4;
  ::S239C12_nt s275c5f5;
  ::S239C8_nt s275c5f6;
  unsigned int s275c5f7:1;
  unsigned int s275c5f8:1;
  unsigned int s275c5f9:1;
  unsigned int s275c5f10:1;
  unsigned int s275c5f11:1;
  int s275c5f12[2];
  virtual  ~S275C5(); // _ZN6S275C5D1Ev
  virtual void  v71(); // _ZN6S275C53v71Ev
  virtual void  v72(); // _ZN6S275C53v72Ev
  virtual void  v73(); // _ZN6S275C53v73Ev
  virtual void  v74(); // _ZN6S275C53v74Ev
  virtual void  v75(); // _ZN6S275C53v75Ev
  virtual void  v76(); // _ZN6S275C53v76Ev
  virtual void  v77(); // _ZN6S275C53v77Ev
  virtual void  v78(); // _ZN6S275C53v78Ev
  virtual void  v79(); // _ZN6S275C53v79Ev
  virtual void  v80(); // _ZN6S275C53v80Ev
  virtual void  v81(); // _ZN6S275C53v81Ev
  virtual void  v82(); // _ZN6S275C53v82Ev
  virtual void  v83(); // _ZN6S275C53v83Ev
  virtual void  v84(); // _ZN6S275C53v84Ev
  virtual void  v85(); // _ZN6S275C53v85Ev
  virtual void  v86(); // _ZN6S275C53v86Ev
  virtual void  v87(); // _ZN6S275C53v87Ev
  virtual void  v88(); // _ZN6S275C53v88Ev
  virtual void  v89(); // _ZN6S275C53v89Ev
  virtual void  v90(); // _ZN6S275C53v90Ev
  virtual void  v91(); // _ZN6S275C53v91Ev
  virtual void  v92(); // _ZN6S275C53v92Ev
  S275C5(); // tgen
};
//SIG(-1 S275C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S275C5 ::~S275C5(){ note_dtor("S275C5", this);}
void  S275C5 ::v71(){vfunc_called(this, "_ZN6S275C53v71Ev");}
void  S275C5 ::v72(){vfunc_called(this, "_ZN6S275C53v72Ev");}
void  S275C5 ::v73(){vfunc_called(this, "_ZN6S275C53v73Ev");}
void  S275C5 ::v74(){vfunc_called(this, "_ZN6S275C53v74Ev");}
void  S275C5 ::v75(){vfunc_called(this, "_ZN6S275C53v75Ev");}
void  S275C5 ::v76(){vfunc_called(this, "_ZN6S275C53v76Ev");}
void  S275C5 ::v77(){vfunc_called(this, "_ZN6S275C53v77Ev");}
void  S275C5 ::v78(){vfunc_called(this, "_ZN6S275C53v78Ev");}
void  S275C5 ::v79(){vfunc_called(this, "_ZN6S275C53v79Ev");}
void  S275C5 ::v80(){vfunc_called(this, "_ZN6S275C53v80Ev");}
void  S275C5 ::v81(){vfunc_called(this, "_ZN6S275C53v81Ev");}
void  S275C5 ::v82(){vfunc_called(this, "_ZN6S275C53v82Ev");}
void  S275C5 ::v83(){vfunc_called(this, "_ZN6S275C53v83Ev");}
void  S275C5 ::v84(){vfunc_called(this, "_ZN6S275C53v84Ev");}
void  S275C5 ::v85(){vfunc_called(this, "_ZN6S275C53v85Ev");}
void  S275C5 ::v86(){vfunc_called(this, "_ZN6S275C53v86Ev");}
void  S275C5 ::v87(){vfunc_called(this, "_ZN6S275C53v87Ev");}
void  S275C5 ::v88(){vfunc_called(this, "_ZN6S275C53v88Ev");}
void  S275C5 ::v89(){vfunc_called(this, "_ZN6S275C53v89Ev");}
void  S275C5 ::v90(){vfunc_called(this, "_ZN6S275C53v90Ev");}
void  S275C5 ::v91(){vfunc_called(this, "_ZN6S275C53v91Ev");}
void  S275C5 ::v92(){vfunc_called(this, "_ZN6S275C53v92Ev");}
S275C5 ::S275C5(){ note_ctor("S275C5", this);} // tgen

static void Test_S275C5()
{
  extern Class_Descriptor cd_S275C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S275C5, buf);
    S275C5 *dp, &lv = *(dp=new (buf) S275C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S275C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S275C5)");
    check_base_class_offset(lv, (S275C6*), 0, "S275C5");
    check_field_offset(lv, s275c5f0, ABISELECT(96,60), "S275C5.s275c5f0");
    check_field_offset(lv, s275c5f1, ABISELECT(104,68), "S275C5.s275c5f1");
    check_field_offset(lv, s275c5f2, ABISELECT(112,72), "S275C5.s275c5f2");
    check_field_offset(lv, s275c5f3, ABISELECT(120,80), "S275C5.s275c5f3");
    check_field_offset(lv, s275c5f4, ABISELECT(136,92), "S275C5.s275c5f4");
    check_field_offset(lv, s275c5f5, ABISELECT(152,104), "S275C5.s275c5f5");
    check_field_offset(lv, s275c5f6, ABISELECT(160,108), "S275C5.s275c5f6");
    set_bf_and_test(lv, s275c5f7, ABISELECT(176,120), 0, 1, 1, "S275C5");
    set_bf_and_test(lv, s275c5f8, ABISELECT(176,120), 1, 1, 1, "S275C5");
    set_bf_and_test(lv, s275c5f9, ABISELECT(176,120), 2, 1, 1, "S275C5");
    set_bf_and_test(lv, s275c5f10, ABISELECT(176,120), 3, 1, 1, "S275C5");
    set_bf_and_test(lv, s275c5f11, ABISELECT(176,120), 4, 1, 1, "S275C5");
    check_field_offset(lv, s275c5f12, ABISELECT(180,124), "S275C5.s275c5f12");
    test_class_info(&lv, &cd_S275C5);
    dp->~S275C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS275C5(Test_S275C5, "S275C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S275C5C1Ev();
extern void _ZN6S275C5D1Ev();
Name_Map name_map_S275C5[] = {
  NSPAIR(_ZN6S275C5C1Ev),
  NSPAIR(_ZN6S275C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S275C6;
extern VTBL_ENTRY _ZTI6S275C6[];
extern  VTBL_ENTRY _ZTV6S275C6[];
static Base_Class bases_S275C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S275C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S275C5[];
extern void _ZN6S275C5D1Ev();
extern void _ZN6S275C5D0Ev();
extern void _ZN6S275C62v7Ev();
extern void _ZN6S275C62v8Ev();
extern void _ZN6S275C62v9Ev();
extern void _ZN6S275C63v10Ev();
extern void _ZN6S275C63v11Ev();
extern void _ZN6S275C63v12Ev();
extern void _ZN6S275C63v13Ev();
extern void _ZN6S275C63v14Ev();
extern void _ZN6S275C63v15Ev();
extern void _ZN6S275C63v16Ev();
extern void _ZN6S275C63v17Ev();
extern void _ZN6S275C63v18Ev();
extern void _ZN6S275C63v19Ev();
extern void _ZN6S275C63v20Ev();
extern void _ZN6S275C63v21Ev();
extern void _ZN6S275C63v22Ev();
extern void _ZN6S275C63v23Ev();
extern void _ZN6S275C63v24Ev();
extern void _ZN6S275C63v25Ev();
extern void _ZN6S275C63v26Ev();
extern void _ZN6S275C63v27Ev();
extern void _ZN6S275C63v28Ev();
extern void _ZN6S275C63v29Ev();
extern void _ZN6S275C63v30Ev();
extern void _ZN6S275C63v31Ev();
extern void _ZN6S275C63v32Ev();
extern void _ZN6S275C63v33Ev();
extern void _ZN6S275C63v34Ev();
extern void _ZN6S275C63v35Ev();
extern void _ZN6S275C63v36Ev();
extern void _ZN6S275C63v37Ev();
extern void _ZN6S275C63v38Ev();
extern void _ZN6S275C63v39Ev();
extern void _ZN6S275C63v40Ev();
extern void _ZN6S275C63v41Ev();
extern void _ZN6S275C63v42Ev();
extern void _ZN6S275C63v43Ev();
extern void _ZN6S275C63v44Ev();
extern void _ZN6S275C63v45Ev();
extern void _ZN6S275C63v46Ev();
extern void _ZN6S275C63v47Ev();
extern void _ZN6S275C63v48Ev();
extern void _ZN6S275C63v49Ev();
extern void _ZN6S275C63v50Ev();
extern void _ZN6S275C63v51Ev();
extern void _ZN6S275C63v52Ev();
extern void _ZN6S275C63v53Ev();
extern void _ZN6S275C63v54Ev();
extern void _ZN6S275C63v55Ev();
extern void _ZN6S275C63v56Ev();
extern void _ZN6S275C63v57Ev();
extern void _ZN6S275C63v58Ev();
extern void _ZN6S275C63v59Ev();
extern void _ZN6S275C63v60Ev();
extern void _ZN6S275C63v61Ev();
extern void _ZN6S275C63v62Ev();
extern void _ZN6S275C63v63Ev();
extern void _ZN6S275C63v64Ev();
extern void _ZN6S275C63v65Ev();
extern void _ZN6S275C63v66Ev();
extern void _ZN6S275C63v67Ev();
extern void _ZN6S275C63v68Ev();
extern void _ZN6S275C63v69Ev();
extern void _ZN6S275C63v70Ev();
extern void _ZN6S275C53v71Ev();
extern void _ZN6S275C53v72Ev();
extern void _ZN6S275C53v73Ev();
extern void _ZN6S275C53v74Ev();
extern void _ZN6S275C53v75Ev();
extern void _ZN6S275C53v76Ev();
extern void _ZN6S275C53v77Ev();
extern void _ZN6S275C53v78Ev();
extern void _ZN6S275C53v79Ev();
extern void _ZN6S275C53v80Ev();
extern void _ZN6S275C53v81Ev();
extern void _ZN6S275C53v82Ev();
extern void _ZN6S275C53v83Ev();
extern void _ZN6S275C53v84Ev();
extern void _ZN6S275C53v85Ev();
extern void _ZN6S275C53v86Ev();
extern void _ZN6S275C53v87Ev();
extern void _ZN6S275C53v88Ev();
extern void _ZN6S275C53v89Ev();
extern void _ZN6S275C53v90Ev();
extern void _ZN6S275C53v91Ev();
extern void _ZN6S275C53v92Ev();
static  VTBL_ENTRY vtc_S275C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S275C5[0]),
  (VTBL_ENTRY)&_ZN6S275C5D1Ev,
  (VTBL_ENTRY)&_ZN6S275C5D0Ev,
  (VTBL_ENTRY)&_ZN6S275C62v7Ev,
  (VTBL_ENTRY)&_ZN6S275C62v8Ev,
  (VTBL_ENTRY)&_ZN6S275C62v9Ev,
  (VTBL_ENTRY)&_ZN6S275C63v10Ev,
  (VTBL_ENTRY)&_ZN6S275C63v11Ev,
  (VTBL_ENTRY)&_ZN6S275C63v12Ev,
  (VTBL_ENTRY)&_ZN6S275C63v13Ev,
  (VTBL_ENTRY)&_ZN6S275C63v14Ev,
  (VTBL_ENTRY)&_ZN6S275C63v15Ev,
  (VTBL_ENTRY)&_ZN6S275C63v16Ev,
  (VTBL_ENTRY)&_ZN6S275C63v17Ev,
  (VTBL_ENTRY)&_ZN6S275C63v18Ev,
  (VTBL_ENTRY)&_ZN6S275C63v19Ev,
  (VTBL_ENTRY)&_ZN6S275C63v20Ev,
  (VTBL_ENTRY)&_ZN6S275C63v21Ev,
  (VTBL_ENTRY)&_ZN6S275C63v22Ev,
  (VTBL_ENTRY)&_ZN6S275C63v23Ev,
  (VTBL_ENTRY)&_ZN6S275C63v24Ev,
  (VTBL_ENTRY)&_ZN6S275C63v25Ev,
  (VTBL_ENTRY)&_ZN6S275C63v26Ev,
  (VTBL_ENTRY)&_ZN6S275C63v27Ev,
  (VTBL_ENTRY)&_ZN6S275C63v28Ev,
  (VTBL_ENTRY)&_ZN6S275C63v29Ev,
  (VTBL_ENTRY)&_ZN6S275C63v30Ev,
  (VTBL_ENTRY)&_ZN6S275C63v31Ev,
  (VTBL_ENTRY)&_ZN6S275C63v32Ev,
  (VTBL_ENTRY)&_ZN6S275C63v33Ev,
  (VTBL_ENTRY)&_ZN6S275C63v34Ev,
  (VTBL_ENTRY)&_ZN6S275C63v35Ev,
  (VTBL_ENTRY)&_ZN6S275C63v36Ev,
  (VTBL_ENTRY)&_ZN6S275C63v37Ev,
  (VTBL_ENTRY)&_ZN6S275C63v38Ev,
  (VTBL_ENTRY)&_ZN6S275C63v39Ev,
  (VTBL_ENTRY)&_ZN6S275C63v40Ev,
  (VTBL_ENTRY)&_ZN6S275C63v41Ev,
  (VTBL_ENTRY)&_ZN6S275C63v42Ev,
  (VTBL_ENTRY)&_ZN6S275C63v43Ev,
  (VTBL_ENTRY)&_ZN6S275C63v44Ev,
  (VTBL_ENTRY)&_ZN6S275C63v45Ev,
  (VTBL_ENTRY)&_ZN6S275C63v46Ev,
  (VTBL_ENTRY)&_ZN6S275C63v47Ev,
  (VTBL_ENTRY)&_ZN6S275C63v48Ev,
  (VTBL_ENTRY)&_ZN6S275C63v49Ev,
  (VTBL_ENTRY)&_ZN6S275C63v50Ev,
  (VTBL_ENTRY)&_ZN6S275C63v51Ev,
  (VTBL_ENTRY)&_ZN6S275C63v52Ev,
  (VTBL_ENTRY)&_ZN6S275C63v53Ev,
  (VTBL_ENTRY)&_ZN6S275C63v54Ev,
  (VTBL_ENTRY)&_ZN6S275C63v55Ev,
  (VTBL_ENTRY)&_ZN6S275C63v56Ev,
  (VTBL_ENTRY)&_ZN6S275C63v57Ev,
  (VTBL_ENTRY)&_ZN6S275C63v58Ev,
  (VTBL_ENTRY)&_ZN6S275C63v59Ev,
  (VTBL_ENTRY)&_ZN6S275C63v60Ev,
  (VTBL_ENTRY)&_ZN6S275C63v61Ev,
  (VTBL_ENTRY)&_ZN6S275C63v62Ev,
  (VTBL_ENTRY)&_ZN6S275C63v63Ev,
  (VTBL_ENTRY)&_ZN6S275C63v64Ev,
  (VTBL_ENTRY)&_ZN6S275C63v65Ev,
  (VTBL_ENTRY)&_ZN6S275C63v66Ev,
  (VTBL_ENTRY)&_ZN6S275C63v67Ev,
  (VTBL_ENTRY)&_ZN6S275C63v68Ev,
  (VTBL_ENTRY)&_ZN6S275C63v69Ev,
  (VTBL_ENTRY)&_ZN6S275C63v70Ev,
  (VTBL_ENTRY)&_ZN6S275C53v71Ev,
  (VTBL_ENTRY)&_ZN6S275C53v72Ev,
  (VTBL_ENTRY)&_ZN6S275C53v73Ev,
  (VTBL_ENTRY)&_ZN6S275C53v74Ev,
  (VTBL_ENTRY)&_ZN6S275C53v75Ev,
  (VTBL_ENTRY)&_ZN6S275C53v76Ev,
  (VTBL_ENTRY)&_ZN6S275C53v77Ev,
  (VTBL_ENTRY)&_ZN6S275C53v78Ev,
  (VTBL_ENTRY)&_ZN6S275C53v79Ev,
  (VTBL_ENTRY)&_ZN6S275C53v80Ev,
  (VTBL_ENTRY)&_ZN6S275C53v81Ev,
  (VTBL_ENTRY)&_ZN6S275C53v82Ev,
  (VTBL_ENTRY)&_ZN6S275C53v83Ev,
  (VTBL_ENTRY)&_ZN6S275C53v84Ev,
  (VTBL_ENTRY)&_ZN6S275C53v85Ev,
  (VTBL_ENTRY)&_ZN6S275C53v86Ev,
  (VTBL_ENTRY)&_ZN6S275C53v87Ev,
  (VTBL_ENTRY)&_ZN6S275C53v88Ev,
  (VTBL_ENTRY)&_ZN6S275C53v89Ev,
  (VTBL_ENTRY)&_ZN6S275C53v90Ev,
  (VTBL_ENTRY)&_ZN6S275C53v91Ev,
  (VTBL_ENTRY)&_ZN6S275C53v92Ev,
};
extern VTBL_ENTRY _ZTI6S275C5[];
extern  VTBL_ENTRY _ZTV6S275C5[];
Class_Descriptor cd_S275C5 = {  "S275C5", // class name
  bases_S275C5, 1,
  &(vtc_S275C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S275C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S275C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S275C4  : S275C5 {
  unsigned int s275c4f0:1;
  unsigned int s275c4f1:1;
  unsigned int s275c4f2:1;
  ::S3221C17 s275c4f3;
  ::S3221C11 s275c4f4;
  ::S3221C5_nt s275c4f5;
  ::S3168C19 s275c4f6;
  int s275c4f7[3];
  virtual  ~S275C4(); // _ZN6S275C4D1Ev
  virtual void  v93(); // _ZN6S275C43v93Ev
  virtual void  v94(); // _ZN6S275C43v94Ev
  virtual void  v95(); // _ZN6S275C43v95Ev
  virtual void  v96(); // _ZN6S275C43v96Ev
  virtual void  v97(); // _ZN6S275C43v97Ev
  virtual void  v98(); // _ZN6S275C43v98Ev
  virtual void  v99(); // _ZN6S275C43v99Ev
  virtual void  v100(); // _ZN6S275C44v100Ev
  virtual void  v101(); // _ZN6S275C44v101Ev
  virtual void  v102(); // _ZN6S275C44v102Ev
  virtual void  v103(); // _ZN6S275C44v103Ev
  virtual void  v104(); // _ZN6S275C44v104Ev
  virtual void  v105(); // _ZN6S275C44v105Ev
  virtual void  v106(); // _ZN6S275C44v106Ev
  virtual void  v107(); // _ZN6S275C44v107Ev
  virtual void  v108(); // _ZN6S275C44v108Ev
  virtual void  v109(); // _ZN6S275C44v109Ev
  virtual void  v110(); // _ZN6S275C44v110Ev
  virtual void  v111(); // _ZN6S275C44v111Ev
  virtual void  v112(); // _ZN6S275C44v112Ev
  S275C4(); // tgen
};
//SIG(-1 S275C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S275C4 ::~S275C4(){ note_dtor("S275C4", this);}
void  S275C4 ::v93(){vfunc_called(this, "_ZN6S275C43v93Ev");}
void  S275C4 ::v94(){vfunc_called(this, "_ZN6S275C43v94Ev");}
void  S275C4 ::v95(){vfunc_called(this, "_ZN6S275C43v95Ev");}
void  S275C4 ::v96(){vfunc_called(this, "_ZN6S275C43v96Ev");}
void  S275C4 ::v97(){vfunc_called(this, "_ZN6S275C43v97Ev");}
void  S275C4 ::v98(){vfunc_called(this, "_ZN6S275C43v98Ev");}
void  S275C4 ::v99(){vfunc_called(this, "_ZN6S275C43v99Ev");}
void  S275C4 ::v100(){vfunc_called(this, "_ZN6S275C44v100Ev");}
void  S275C4 ::v101(){vfunc_called(this, "_ZN6S275C44v101Ev");}
void  S275C4 ::v102(){vfunc_called(this, "_ZN6S275C44v102Ev");}
void  S275C4 ::v103(){vfunc_called(this, "_ZN6S275C44v103Ev");}
void  S275C4 ::v104(){vfunc_called(this, "_ZN6S275C44v104Ev");}
void  S275C4 ::v105(){vfunc_called(this, "_ZN6S275C44v105Ev");}
void  S275C4 ::v106(){vfunc_called(this, "_ZN6S275C44v106Ev");}
void  S275C4 ::v107(){vfunc_called(this, "_ZN6S275C44v107Ev");}
void  S275C4 ::v108(){vfunc_called(this, "_ZN6S275C44v108Ev");}
void  S275C4 ::v109(){vfunc_called(this, "_ZN6S275C44v109Ev");}
void  S275C4 ::v110(){vfunc_called(this, "_ZN6S275C44v110Ev");}
void  S275C4 ::v111(){vfunc_called(this, "_ZN6S275C44v111Ev");}
void  S275C4 ::v112(){vfunc_called(this, "_ZN6S275C44v112Ev");}
S275C4 ::S275C4(){ note_ctor("S275C4", this);} // tgen

static void Test_S275C4()
{
  extern Class_Descriptor cd_S275C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S275C4, buf);
    S275C4 *dp, &lv = *(dp=new (buf) S275C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S275C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S275C4)");
    check_base_class_offset(lv, (S275C6*)(S275C5*), 0, "S275C4");
    check_base_class_offset(lv, (S275C5*), 0, "S275C4");
    set_bf_and_test(lv, s275c4f0, ABISELECT(188,132), 0, 1, 1, "S275C4");
    set_bf_and_test(lv, s275c4f1, ABISELECT(188,132), 1, 1, 1, "S275C4");
    set_bf_and_test(lv, s275c4f2, ABISELECT(188,132), 2, 1, 1, "S275C4");
    check_field_offset(lv, s275c4f3, ABISELECT(192,136), "S275C4.s275c4f3");
    check_field_offset(lv, s275c4f4, ABISELECT(208,148), "S275C4.s275c4f4");
    check_field_offset(lv, s275c4f5, ABISELECT(224,160), "S275C4.s275c4f5");
    check_field_offset(lv, s275c4f6, ABISELECT(240,172), "S275C4.s275c4f6");
    check_field_offset(lv, s275c4f7, ABISELECT(256,184), "S275C4.s275c4f7");
    test_class_info(&lv, &cd_S275C4);
    dp->~S275C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS275C4(Test_S275C4, "S275C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S275C4C1Ev();
extern void _ZN6S275C4D1Ev();
Name_Map name_map_S275C4[] = {
  NSPAIR(_ZN6S275C4C1Ev),
  NSPAIR(_ZN6S275C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S275C6;
extern VTBL_ENTRY _ZTI6S275C6[];
extern  VTBL_ENTRY _ZTV6S275C6[];
extern Class_Descriptor cd_S275C5;
extern VTBL_ENTRY _ZTI6S275C5[];
extern  VTBL_ENTRY _ZTV6S275C5[];
static Base_Class bases_S275C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S275C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S275C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S275C4[];
extern void _ZN6S275C4D1Ev();
extern void _ZN6S275C4D0Ev();
extern void _ZN6S275C62v7Ev();
extern void _ZN6S275C62v8Ev();
extern void _ZN6S275C62v9Ev();
extern void _ZN6S275C63v10Ev();
extern void _ZN6S275C63v11Ev();
extern void _ZN6S275C63v12Ev();
extern void _ZN6S275C63v13Ev();
extern void _ZN6S275C63v14Ev();
extern void _ZN6S275C63v15Ev();
extern void _ZN6S275C63v16Ev();
extern void _ZN6S275C63v17Ev();
extern void _ZN6S275C63v18Ev();
extern void _ZN6S275C63v19Ev();
extern void _ZN6S275C63v20Ev();
extern void _ZN6S275C63v21Ev();
extern void _ZN6S275C63v22Ev();
extern void _ZN6S275C63v23Ev();
extern void _ZN6S275C63v24Ev();
extern void _ZN6S275C63v25Ev();
extern void _ZN6S275C63v26Ev();
extern void _ZN6S275C63v27Ev();
extern void _ZN6S275C63v28Ev();
extern void _ZN6S275C63v29Ev();
extern void _ZN6S275C63v30Ev();
extern void _ZN6S275C63v31Ev();
extern void _ZN6S275C63v32Ev();
extern void _ZN6S275C63v33Ev();
extern void _ZN6S275C63v34Ev();
extern void _ZN6S275C63v35Ev();
extern void _ZN6S275C63v36Ev();
extern void _ZN6S275C63v37Ev();
extern void _ZN6S275C63v38Ev();
extern void _ZN6S275C63v39Ev();
extern void _ZN6S275C63v40Ev();
extern void _ZN6S275C63v41Ev();
extern void _ZN6S275C63v42Ev();
extern void _ZN6S275C63v43Ev();
extern void _ZN6S275C63v44Ev();
extern void _ZN6S275C63v45Ev();
extern void _ZN6S275C63v46Ev();
extern void _ZN6S275C63v47Ev();
extern void _ZN6S275C63v48Ev();
extern void _ZN6S275C63v49Ev();
extern void _ZN6S275C63v50Ev();
extern void _ZN6S275C63v51Ev();
extern void _ZN6S275C63v52Ev();
extern void _ZN6S275C63v53Ev();
extern void _ZN6S275C63v54Ev();
extern void _ZN6S275C63v55Ev();
extern void _ZN6S275C63v56Ev();
extern void _ZN6S275C63v57Ev();
extern void _ZN6S275C63v58Ev();
extern void _ZN6S275C63v59Ev();
extern void _ZN6S275C63v60Ev();
extern void _ZN6S275C63v61Ev();
extern void _ZN6S275C63v62Ev();
extern void _ZN6S275C63v63Ev();
extern void _ZN6S275C63v64Ev();
extern void _ZN6S275C63v65Ev();
extern void _ZN6S275C63v66Ev();
extern void _ZN6S275C63v67Ev();
extern void _ZN6S275C63v68Ev();
extern void _ZN6S275C63v69Ev();
extern void _ZN6S275C63v70Ev();
extern void _ZN6S275C53v71Ev();
extern void _ZN6S275C53v72Ev();
extern void _ZN6S275C53v73Ev();
extern void _ZN6S275C53v74Ev();
extern void _ZN6S275C53v75Ev();
extern void _ZN6S275C53v76Ev();
extern void _ZN6S275C53v77Ev();
extern void _ZN6S275C53v78Ev();
extern void _ZN6S275C53v79Ev();
extern void _ZN6S275C53v80Ev();
extern void _ZN6S275C53v81Ev();
extern void _ZN6S275C53v82Ev();
extern void _ZN6S275C53v83Ev();
extern void _ZN6S275C53v84Ev();
extern void _ZN6S275C53v85Ev();
extern void _ZN6S275C53v86Ev();
extern void _ZN6S275C53v87Ev();
extern void _ZN6S275C53v88Ev();
extern void _ZN6S275C53v89Ev();
extern void _ZN6S275C53v90Ev();
extern void _ZN6S275C53v91Ev();
extern void _ZN6S275C53v92Ev();
extern void _ZN6S275C43v93Ev();
extern void _ZN6S275C43v94Ev();
extern void _ZN6S275C43v95Ev();
extern void _ZN6S275C43v96Ev();
extern void _ZN6S275C43v97Ev();
extern void _ZN6S275C43v98Ev();
extern void _ZN6S275C43v99Ev();
extern void _ZN6S275C44v100Ev();
extern void _ZN6S275C44v101Ev();
extern void _ZN6S275C44v102Ev();
extern void _ZN6S275C44v103Ev();
extern void _ZN6S275C44v104Ev();
extern void _ZN6S275C44v105Ev();
extern void _ZN6S275C44v106Ev();
extern void _ZN6S275C44v107Ev();
extern void _ZN6S275C44v108Ev();
extern void _ZN6S275C44v109Ev();
extern void _ZN6S275C44v110Ev();
extern void _ZN6S275C44v111Ev();
extern void _ZN6S275C44v112Ev();
static  VTBL_ENTRY vtc_S275C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S275C4[0]),
  (VTBL_ENTRY)&_ZN6S275C4D1Ev,
  (VTBL_ENTRY)&_ZN6S275C4D0Ev,
  (VTBL_ENTRY)&_ZN6S275C62v7Ev,
  (VTBL_ENTRY)&_ZN6S275C62v8Ev,
  (VTBL_ENTRY)&_ZN6S275C62v9Ev,
  (VTBL_ENTRY)&_ZN6S275C63v10Ev,
  (VTBL_ENTRY)&_ZN6S275C63v11Ev,
  (VTBL_ENTRY)&_ZN6S275C63v12Ev,
  (VTBL_ENTRY)&_ZN6S275C63v13Ev,
  (VTBL_ENTRY)&_ZN6S275C63v14Ev,
  (VTBL_ENTRY)&_ZN6S275C63v15Ev,
  (VTBL_ENTRY)&_ZN6S275C63v16Ev,
  (VTBL_ENTRY)&_ZN6S275C63v17Ev,
  (VTBL_ENTRY)&_ZN6S275C63v18Ev,
  (VTBL_ENTRY)&_ZN6S275C63v19Ev,
  (VTBL_ENTRY)&_ZN6S275C63v20Ev,
  (VTBL_ENTRY)&_ZN6S275C63v21Ev,
  (VTBL_ENTRY)&_ZN6S275C63v22Ev,
  (VTBL_ENTRY)&_ZN6S275C63v23Ev,
  (VTBL_ENTRY)&_ZN6S275C63v24Ev,
  (VTBL_ENTRY)&_ZN6S275C63v25Ev,
  (VTBL_ENTRY)&_ZN6S275C63v26Ev,
  (VTBL_ENTRY)&_ZN6S275C63v27Ev,
  (VTBL_ENTRY)&_ZN6S275C63v28Ev,
  (VTBL_ENTRY)&_ZN6S275C63v29Ev,
  (VTBL_ENTRY)&_ZN6S275C63v30Ev,
  (VTBL_ENTRY)&_ZN6S275C63v31Ev,
  (VTBL_ENTRY)&_ZN6S275C63v32Ev,
  (VTBL_ENTRY)&_ZN6S275C63v33Ev,
  (VTBL_ENTRY)&_ZN6S275C63v34Ev,
  (VTBL_ENTRY)&_ZN6S275C63v35Ev,
  (VTBL_ENTRY)&_ZN6S275C63v36Ev,
  (VTBL_ENTRY)&_ZN6S275C63v37Ev,
  (VTBL_ENTRY)&_ZN6S275C63v38Ev,
  (VTBL_ENTRY)&_ZN6S275C63v39Ev,
  (VTBL_ENTRY)&_ZN6S275C63v40Ev,
  (VTBL_ENTRY)&_ZN6S275C63v41Ev,
  (VTBL_ENTRY)&_ZN6S275C63v42Ev,
  (VTBL_ENTRY)&_ZN6S275C63v43Ev,
  (VTBL_ENTRY)&_ZN6S275C63v44Ev,
  (VTBL_ENTRY)&_ZN6S275C63v45Ev,
  (VTBL_ENTRY)&_ZN6S275C63v46Ev,
  (VTBL_ENTRY)&_ZN6S275C63v47Ev,
  (VTBL_ENTRY)&_ZN6S275C63v48Ev,
  (VTBL_ENTRY)&_ZN6S275C63v49Ev,
  (VTBL_ENTRY)&_ZN6S275C63v50Ev,
  (VTBL_ENTRY)&_ZN6S275C63v51Ev,
  (VTBL_ENTRY)&_ZN6S275C63v52Ev,
  (VTBL_ENTRY)&_ZN6S275C63v53Ev,
  (VTBL_ENTRY)&_ZN6S275C63v54Ev,
  (VTBL_ENTRY)&_ZN6S275C63v55Ev,
  (VTBL_ENTRY)&_ZN6S275C63v56Ev,
  (VTBL_ENTRY)&_ZN6S275C63v57Ev,
  (VTBL_ENTRY)&_ZN6S275C63v58Ev,
  (VTBL_ENTRY)&_ZN6S275C63v59Ev,
  (VTBL_ENTRY)&_ZN6S275C63v60Ev,
  (VTBL_ENTRY)&_ZN6S275C63v61Ev,
  (VTBL_ENTRY)&_ZN6S275C63v62Ev,
  (VTBL_ENTRY)&_ZN6S275C63v63Ev,
  (VTBL_ENTRY)&_ZN6S275C63v64Ev,
  (VTBL_ENTRY)&_ZN6S275C63v65Ev,
  (VTBL_ENTRY)&_ZN6S275C63v66Ev,
  (VTBL_ENTRY)&_ZN6S275C63v67Ev,
  (VTBL_ENTRY)&_ZN6S275C63v68Ev,
  (VTBL_ENTRY)&_ZN6S275C63v69Ev,
  (VTBL_ENTRY)&_ZN6S275C63v70Ev,
  (VTBL_ENTRY)&_ZN6S275C53v71Ev,
  (VTBL_ENTRY)&_ZN6S275C53v72Ev,
  (VTBL_ENTRY)&_ZN6S275C53v73Ev,
  (VTBL_ENTRY)&_ZN6S275C53v74Ev,
  (VTBL_ENTRY)&_ZN6S275C53v75Ev,
  (VTBL_ENTRY)&_ZN6S275C53v76Ev,
  (VTBL_ENTRY)&_ZN6S275C53v77Ev,
  (VTBL_ENTRY)&_ZN6S275C53v78Ev,
  (VTBL_ENTRY)&_ZN6S275C53v79Ev,
  (VTBL_ENTRY)&_ZN6S275C53v80Ev,
  (VTBL_ENTRY)&_ZN6S275C53v81Ev,
  (VTBL_ENTRY)&_ZN6S275C53v82Ev,
  (VTBL_ENTRY)&_ZN6S275C53v83Ev,
  (VTBL_ENTRY)&_ZN6S275C53v84Ev,
  (VTBL_ENTRY)&_ZN6S275C53v85Ev,
  (VTBL_ENTRY)&_ZN6S275C53v86Ev,
  (VTBL_ENTRY)&_ZN6S275C53v87Ev,
  (VTBL_ENTRY)&_ZN6S275C53v88Ev,
  (VTBL_ENTRY)&_ZN6S275C53v89Ev,
  (VTBL_ENTRY)&_ZN6S275C53v90Ev,
  (VTBL_ENTRY)&_ZN6S275C53v91Ev,
  (VTBL_ENTRY)&_ZN6S275C53v92Ev,
  (VTBL_ENTRY)&_ZN6S275C43v93Ev,
  (VTBL_ENTRY)&_ZN6S275C43v94Ev,
  (VTBL_ENTRY)&_ZN6S275C43v95Ev,
  (VTBL_ENTRY)&_ZN6S275C43v96Ev,
  (VTBL_ENTRY)&_ZN6S275C43v97Ev,
  (VTBL_ENTRY)&_ZN6S275C43v98Ev,
  (VTBL_ENTRY)&_ZN6S275C43v99Ev,
  (VTBL_ENTRY)&_ZN6S275C44v100Ev,
  (VTBL_ENTRY)&_ZN6S275C44v101Ev,
  (VTBL_ENTRY)&_ZN6S275C44v102Ev,
  (VTBL_ENTRY)&_ZN6S275C44v103Ev,
  (VTBL_ENTRY)&_ZN6S275C44v104Ev,
  (VTBL_ENTRY)&_ZN6S275C44v105Ev,
  (VTBL_ENTRY)&_ZN6S275C44v106Ev,
  (VTBL_ENTRY)&_ZN6S275C44v107Ev,
  (VTBL_ENTRY)&_ZN6S275C44v108Ev,
  (VTBL_ENTRY)&_ZN6S275C44v109Ev,
  (VTBL_ENTRY)&_ZN6S275C44v110Ev,
  (VTBL_ENTRY)&_ZN6S275C44v111Ev,
  (VTBL_ENTRY)&_ZN6S275C44v112Ev,
};
extern VTBL_ENTRY _ZTI6S275C4[];
extern  VTBL_ENTRY _ZTV6S275C4[];
Class_Descriptor cd_S275C4 = {  "S275C4", // class name
  bases_S275C4, 2,
  &(vtc_S275C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S275C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S275C4),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S275C3 ::~S275C3(){ note_dtor("S275C3", this);}
void  S275C3 ::v113(){vfunc_called(this, "_ZN6S275C34v113Ev");}
void  S275C3 ::v114(){vfunc_called(this, "_ZN6S275C34v114Ev");}
S275C3 ::S275C3(){ note_ctor("S275C3", this);} // tgen

static void Test_S275C3()
{
  extern Class_Descriptor cd_S275C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S275C3, buf);
    S275C3 *dp, &lv = *(dp=new (buf) S275C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S275C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S275C3)");
    check_base_class_offset(lv, (S275C6*)(S275C5*)(S275C4*), 0, "S275C3");
    check_base_class_offset(lv, (S275C5*)(S275C4*), 0, "S275C3");
    check_base_class_offset(lv, (S275C4*), 0, "S275C3");
    test_class_info(&lv, &cd_S275C3);
    dp->~S275C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS275C3(Test_S275C3, "S275C3", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S275C3C1Ev();
extern void _ZN6S275C3D1Ev();
Name_Map name_map_S275C3[] = {
  NSPAIR(_ZN6S275C3C1Ev),
  NSPAIR(_ZN6S275C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S275C6;
extern VTBL_ENTRY _ZTI6S275C6[];
extern  VTBL_ENTRY _ZTV6S275C6[];
extern Class_Descriptor cd_S275C5;
extern VTBL_ENTRY _ZTI6S275C5[];
extern  VTBL_ENTRY _ZTV6S275C5[];
extern Class_Descriptor cd_S275C4;
extern VTBL_ENTRY _ZTI6S275C4[];
extern  VTBL_ENTRY _ZTV6S275C4[];
static Base_Class bases_S275C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S275C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S275C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S275C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S275C3[];
extern void _ZN6S275C3D1Ev();
extern void _ZN6S275C3D0Ev();
extern void _ZN6S275C62v7Ev();
extern void _ZN6S275C62v8Ev();
extern void _ZN6S275C62v9Ev();
extern void _ZN6S275C63v10Ev();
extern void _ZN6S275C63v11Ev();
extern void _ZN6S275C63v12Ev();
extern void _ZN6S275C63v13Ev();
extern void _ZN6S275C63v14Ev();
extern void _ZN6S275C63v15Ev();
extern void _ZN6S275C63v16Ev();
extern void _ZN6S275C63v17Ev();
extern void _ZN6S275C63v18Ev();
extern void _ZN6S275C63v19Ev();
extern void _ZN6S275C63v20Ev();
extern void _ZN6S275C63v21Ev();
extern void _ZN6S275C63v22Ev();
extern void _ZN6S275C63v23Ev();
extern void _ZN6S275C63v24Ev();
extern void _ZN6S275C63v25Ev();
extern void _ZN6S275C63v26Ev();
extern void _ZN6S275C63v27Ev();
extern void _ZN6S275C63v28Ev();
extern void _ZN6S275C63v29Ev();
extern void _ZN6S275C63v30Ev();
extern void _ZN6S275C63v31Ev();
extern void _ZN6S275C63v32Ev();
extern void _ZN6S275C63v33Ev();
extern void _ZN6S275C63v34Ev();
extern void _ZN6S275C63v35Ev();
extern void _ZN6S275C63v36Ev();
extern void _ZN6S275C63v37Ev();
extern void _ZN6S275C63v38Ev();
extern void _ZN6S275C63v39Ev();
extern void _ZN6S275C63v40Ev();
extern void _ZN6S275C63v41Ev();
extern void _ZN6S275C63v42Ev();
extern void _ZN6S275C63v43Ev();
extern void _ZN6S275C63v44Ev();
extern void _ZN6S275C63v45Ev();
extern void _ZN6S275C63v46Ev();
extern void _ZN6S275C63v47Ev();
extern void _ZN6S275C63v48Ev();
extern void _ZN6S275C63v49Ev();
extern void _ZN6S275C63v50Ev();
extern void _ZN6S275C63v51Ev();
extern void _ZN6S275C63v52Ev();
extern void _ZN6S275C63v53Ev();
extern void _ZN6S275C63v54Ev();
extern void _ZN6S275C63v55Ev();
extern void _ZN6S275C63v56Ev();
extern void _ZN6S275C63v57Ev();
extern void _ZN6S275C63v58Ev();
extern void _ZN6S275C63v59Ev();
extern void _ZN6S275C63v60Ev();
extern void _ZN6S275C63v61Ev();
extern void _ZN6S275C63v62Ev();
extern void _ZN6S275C63v63Ev();
extern void _ZN6S275C63v64Ev();
extern void _ZN6S275C63v65Ev();
extern void _ZN6S275C63v66Ev();
extern void _ZN6S275C63v67Ev();
extern void _ZN6S275C63v68Ev();
extern void _ZN6S275C63v69Ev();
extern void _ZN6S275C63v70Ev();
extern void _ZN6S275C53v71Ev();
extern void _ZN6S275C53v72Ev();
extern void _ZN6S275C53v73Ev();
extern void _ZN6S275C53v74Ev();
extern void _ZN6S275C53v75Ev();
extern void _ZN6S275C53v76Ev();
extern void _ZN6S275C53v77Ev();
extern void _ZN6S275C53v78Ev();
extern void _ZN6S275C53v79Ev();
extern void _ZN6S275C53v80Ev();
extern void _ZN6S275C53v81Ev();
extern void _ZN6S275C53v82Ev();
extern void _ZN6S275C53v83Ev();
extern void _ZN6S275C53v84Ev();
extern void _ZN6S275C53v85Ev();
extern void _ZN6S275C53v86Ev();
extern void _ZN6S275C53v87Ev();
extern void _ZN6S275C53v88Ev();
extern void _ZN6S275C53v89Ev();
extern void _ZN6S275C53v90Ev();
extern void _ZN6S275C53v91Ev();
extern void _ZN6S275C53v92Ev();
extern void _ZN6S275C43v93Ev();
extern void _ZN6S275C43v94Ev();
extern void _ZN6S275C43v95Ev();
extern void _ZN6S275C43v96Ev();
extern void _ZN6S275C43v97Ev();
extern void _ZN6S275C43v98Ev();
extern void _ZN6S275C43v99Ev();
extern void _ZN6S275C44v100Ev();
extern void _ZN6S275C44v101Ev();
extern void _ZN6S275C44v102Ev();
extern void _ZN6S275C44v103Ev();
extern void _ZN6S275C44v104Ev();
extern void _ZN6S275C44v105Ev();
extern void _ZN6S275C44v106Ev();
extern void _ZN6S275C44v107Ev();
extern void _ZN6S275C44v108Ev();
extern void _ZN6S275C44v109Ev();
extern void _ZN6S275C44v110Ev();
extern void _ZN6S275C44v111Ev();
extern void _ZN6S275C44v112Ev();
extern void _ZN6S275C34v113Ev();
extern void _ZN6S275C34v114Ev();
static  VTBL_ENTRY vtc_S275C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S275C3[0]),
  (VTBL_ENTRY)&_ZN6S275C3D1Ev,
  (VTBL_ENTRY)&_ZN6S275C3D0Ev,
  (VTBL_ENTRY)&_ZN6S275C62v7Ev,
  (VTBL_ENTRY)&_ZN6S275C62v8Ev,
  (VTBL_ENTRY)&_ZN6S275C62v9Ev,
  (VTBL_ENTRY)&_ZN6S275C63v10Ev,
  (VTBL_ENTRY)&_ZN6S275C63v11Ev,
  (VTBL_ENTRY)&_ZN6S275C63v12Ev,
  (VTBL_ENTRY)&_ZN6S275C63v13Ev,
  (VTBL_ENTRY)&_ZN6S275C63v14Ev,
  (VTBL_ENTRY)&_ZN6S275C63v15Ev,
  (VTBL_ENTRY)&_ZN6S275C63v16Ev,
  (VTBL_ENTRY)&_ZN6S275C63v17Ev,
  (VTBL_ENTRY)&_ZN6S275C63v18Ev,
  (VTBL_ENTRY)&_ZN6S275C63v19Ev,
  (VTBL_ENTRY)&_ZN6S275C63v20Ev,
  (VTBL_ENTRY)&_ZN6S275C63v21Ev,
  (VTBL_ENTRY)&_ZN6S275C63v22Ev,
  (VTBL_ENTRY)&_ZN6S275C63v23Ev,
  (VTBL_ENTRY)&_ZN6S275C63v24Ev,
  (VTBL_ENTRY)&_ZN6S275C63v25Ev,
  (VTBL_ENTRY)&_ZN6S275C63v26Ev,
  (VTBL_ENTRY)&_ZN6S275C63v27Ev,
  (VTBL_ENTRY)&_ZN6S275C63v28Ev,
  (VTBL_ENTRY)&_ZN6S275C63v29Ev,
  (VTBL_ENTRY)&_ZN6S275C63v30Ev,
  (VTBL_ENTRY)&_ZN6S275C63v31Ev,
  (VTBL_ENTRY)&_ZN6S275C63v32Ev,
  (VTBL_ENTRY)&_ZN6S275C63v33Ev,
  (VTBL_ENTRY)&_ZN6S275C63v34Ev,
  (VTBL_ENTRY)&_ZN6S275C63v35Ev,
  (VTBL_ENTRY)&_ZN6S275C63v36Ev,
  (VTBL_ENTRY)&_ZN6S275C63v37Ev,
  (VTBL_ENTRY)&_ZN6S275C63v38Ev,
  (VTBL_ENTRY)&_ZN6S275C63v39Ev,
  (VTBL_ENTRY)&_ZN6S275C63v40Ev,
  (VTBL_ENTRY)&_ZN6S275C63v41Ev,
  (VTBL_ENTRY)&_ZN6S275C63v42Ev,
  (VTBL_ENTRY)&_ZN6S275C63v43Ev,
  (VTBL_ENTRY)&_ZN6S275C63v44Ev,
  (VTBL_ENTRY)&_ZN6S275C63v45Ev,
  (VTBL_ENTRY)&_ZN6S275C63v46Ev,
  (VTBL_ENTRY)&_ZN6S275C63v47Ev,
  (VTBL_ENTRY)&_ZN6S275C63v48Ev,
  (VTBL_ENTRY)&_ZN6S275C63v49Ev,
  (VTBL_ENTRY)&_ZN6S275C63v50Ev,
  (VTBL_ENTRY)&_ZN6S275C63v51Ev,
  (VTBL_ENTRY)&_ZN6S275C63v52Ev,
  (VTBL_ENTRY)&_ZN6S275C63v53Ev,
  (VTBL_ENTRY)&_ZN6S275C63v54Ev,
  (VTBL_ENTRY)&_ZN6S275C63v55Ev,
  (VTBL_ENTRY)&_ZN6S275C63v56Ev,
  (VTBL_ENTRY)&_ZN6S275C63v57Ev,
  (VTBL_ENTRY)&_ZN6S275C63v58Ev,
  (VTBL_ENTRY)&_ZN6S275C63v59Ev,
  (VTBL_ENTRY)&_ZN6S275C63v60Ev,
  (VTBL_ENTRY)&_ZN6S275C63v61Ev,
  (VTBL_ENTRY)&_ZN6S275C63v62Ev,
  (VTBL_ENTRY)&_ZN6S275C63v63Ev,
  (VTBL_ENTRY)&_ZN6S275C63v64Ev,
  (VTBL_ENTRY)&_ZN6S275C63v65Ev,
  (VTBL_ENTRY)&_ZN6S275C63v66Ev,
  (VTBL_ENTRY)&_ZN6S275C63v67Ev,
  (VTBL_ENTRY)&_ZN6S275C63v68Ev,
  (VTBL_ENTRY)&_ZN6S275C63v69Ev,
  (VTBL_ENTRY)&_ZN6S275C63v70Ev,
  (VTBL_ENTRY)&_ZN6S275C53v71Ev,
  (VTBL_ENTRY)&_ZN6S275C53v72Ev,
  (VTBL_ENTRY)&_ZN6S275C53v73Ev,
  (VTBL_ENTRY)&_ZN6S275C53v74Ev,
  (VTBL_ENTRY)&_ZN6S275C53v75Ev,
  (VTBL_ENTRY)&_ZN6S275C53v76Ev,
  (VTBL_ENTRY)&_ZN6S275C53v77Ev,
  (VTBL_ENTRY)&_ZN6S275C53v78Ev,
  (VTBL_ENTRY)&_ZN6S275C53v79Ev,
  (VTBL_ENTRY)&_ZN6S275C53v80Ev,
  (VTBL_ENTRY)&_ZN6S275C53v81Ev,
  (VTBL_ENTRY)&_ZN6S275C53v82Ev,
  (VTBL_ENTRY)&_ZN6S275C53v83Ev,
  (VTBL_ENTRY)&_ZN6S275C53v84Ev,
  (VTBL_ENTRY)&_ZN6S275C53v85Ev,
  (VTBL_ENTRY)&_ZN6S275C53v86Ev,
  (VTBL_ENTRY)&_ZN6S275C53v87Ev,
  (VTBL_ENTRY)&_ZN6S275C53v88Ev,
  (VTBL_ENTRY)&_ZN6S275C53v89Ev,
  (VTBL_ENTRY)&_ZN6S275C53v90Ev,
  (VTBL_ENTRY)&_ZN6S275C53v91Ev,
  (VTBL_ENTRY)&_ZN6S275C53v92Ev,
  (VTBL_ENTRY)&_ZN6S275C43v93Ev,
  (VTBL_ENTRY)&_ZN6S275C43v94Ev,
  (VTBL_ENTRY)&_ZN6S275C43v95Ev,
  (VTBL_ENTRY)&_ZN6S275C43v96Ev,
  (VTBL_ENTRY)&_ZN6S275C43v97Ev,
  (VTBL_ENTRY)&_ZN6S275C43v98Ev,
  (VTBL_ENTRY)&_ZN6S275C43v99Ev,
  (VTBL_ENTRY)&_ZN6S275C44v100Ev,
  (VTBL_ENTRY)&_ZN6S275C44v101Ev,
  (VTBL_ENTRY)&_ZN6S275C44v102Ev,
  (VTBL_ENTRY)&_ZN6S275C44v103Ev,
  (VTBL_ENTRY)&_ZN6S275C44v104Ev,
  (VTBL_ENTRY)&_ZN6S275C44v105Ev,
  (VTBL_ENTRY)&_ZN6S275C44v106Ev,
  (VTBL_ENTRY)&_ZN6S275C44v107Ev,
  (VTBL_ENTRY)&_ZN6S275C44v108Ev,
  (VTBL_ENTRY)&_ZN6S275C44v109Ev,
  (VTBL_ENTRY)&_ZN6S275C44v110Ev,
  (VTBL_ENTRY)&_ZN6S275C44v111Ev,
  (VTBL_ENTRY)&_ZN6S275C44v112Ev,
  (VTBL_ENTRY)&_ZN6S275C34v113Ev,
  (VTBL_ENTRY)&_ZN6S275C34v114Ev,
};
extern VTBL_ENTRY _ZTI6S275C3[];
extern  VTBL_ENTRY _ZTV6S275C3[];
Class_Descriptor cd_S275C3 = {  "S275C3", // class name
  bases_S275C3, 3,
  &(vtc_S275C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S275C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S275C3),112, //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  S275C2  : S275C3 {
  virtual  ~S275C2(); // _ZN6S275C2D1Ev
  virtual void  v115(); // _ZN6S275C24v115Ev
  virtual void  v116(); // _ZN6S275C24v116Ev
  virtual void  v117(); // _ZN6S275C24v117Ev
  virtual void  v118(); // _ZN6S275C24v118Ev
  virtual void  v119(); // _ZN6S275C24v119Ev
  virtual void  v120(); // _ZN6S275C24v120Ev
  virtual void  v121(); // _ZN6S275C24v121Ev
  virtual void  v122(); // _ZN6S275C24v122Ev
  virtual void  v123(); // _ZN6S275C24v123Ev
  S275C2(); // tgen
};
//SIG(-1 S275C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v116 v117} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S275C2 ::~S275C2(){ note_dtor("S275C2", this);}
void  S275C2 ::v115(){vfunc_called(this, "_ZN6S275C24v115Ev");}
void  S275C2 ::v116(){vfunc_called(this, "_ZN6S275C24v116Ev");}
void  S275C2 ::v117(){vfunc_called(this, "_ZN6S275C24v117Ev");}
void  S275C2 ::v118(){vfunc_called(this, "_ZN6S275C24v118Ev");}
void  S275C2 ::v119(){vfunc_called(this, "_ZN6S275C24v119Ev");}
void  S275C2 ::v120(){vfunc_called(this, "_ZN6S275C24v120Ev");}
void  S275C2 ::v121(){vfunc_called(this, "_ZN6S275C24v121Ev");}
void  S275C2 ::v122(){vfunc_called(this, "_ZN6S275C24v122Ev");}
void  S275C2 ::v123(){vfunc_called(this, "_ZN6S275C24v123Ev");}
S275C2 ::S275C2(){ note_ctor("S275C2", this);} // tgen

static void Test_S275C2()
{
  extern Class_Descriptor cd_S275C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S275C2, buf);
    S275C2 *dp, &lv = *(dp=new (buf) S275C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S275C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S275C2)");
    check_base_class_offset(lv, (S275C6*)(S275C5*)(S275C4*)(S275C3*), 0, "S275C2");
    check_base_class_offset(lv, (S275C5*)(S275C4*)(S275C3*), 0, "S275C2");
    check_base_class_offset(lv, (S275C4*)(S275C3*), 0, "S275C2");
    check_base_class_offset(lv, (S275C3*), 0, "S275C2");
    test_class_info(&lv, &cd_S275C2);
    dp->~S275C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS275C2(Test_S275C2, "S275C2", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S275C2C1Ev();
extern void _ZN6S275C2D1Ev();
Name_Map name_map_S275C2[] = {
  NSPAIR(_ZN6S275C2C1Ev),
  NSPAIR(_ZN6S275C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S275C6;
extern VTBL_ENTRY _ZTI6S275C6[];
extern  VTBL_ENTRY _ZTV6S275C6[];
extern Class_Descriptor cd_S275C5;
extern VTBL_ENTRY _ZTI6S275C5[];
extern  VTBL_ENTRY _ZTV6S275C5[];
extern Class_Descriptor cd_S275C4;
extern VTBL_ENTRY _ZTI6S275C4[];
extern  VTBL_ENTRY _ZTV6S275C4[];
extern Class_Descriptor cd_S275C3;
extern VTBL_ENTRY _ZTI6S275C3[];
extern  VTBL_ENTRY _ZTV6S275C3[];
static Base_Class bases_S275C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S275C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S275C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S275C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S275C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S275C2[];
extern void _ZN6S275C2D1Ev();
extern void _ZN6S275C2D0Ev();
extern void _ZN6S275C62v7Ev();
extern void _ZN6S275C62v8Ev();
extern void _ZN6S275C62v9Ev();
extern void _ZN6S275C63v10Ev();
extern void _ZN6S275C63v11Ev();
extern void _ZN6S275C63v12Ev();
extern void _ZN6S275C63v13Ev();
extern void _ZN6S275C63v14Ev();
extern void _ZN6S275C63v15Ev();
extern void _ZN6S275C63v16Ev();
extern void _ZN6S275C63v17Ev();
extern void _ZN6S275C63v18Ev();
extern void _ZN6S275C63v19Ev();
extern void _ZN6S275C63v20Ev();
extern void _ZN6S275C63v21Ev();
extern void _ZN6S275C63v22Ev();
extern void _ZN6S275C63v23Ev();
extern void _ZN6S275C63v24Ev();
extern void _ZN6S275C63v25Ev();
extern void _ZN6S275C63v26Ev();
extern void _ZN6S275C63v27Ev();
extern void _ZN6S275C63v28Ev();
extern void _ZN6S275C63v29Ev();
extern void _ZN6S275C63v30Ev();
extern void _ZN6S275C63v31Ev();
extern void _ZN6S275C63v32Ev();
extern void _ZN6S275C63v33Ev();
extern void _ZN6S275C63v34Ev();
extern void _ZN6S275C63v35Ev();
extern void _ZN6S275C63v36Ev();
extern void _ZN6S275C63v37Ev();
extern void _ZN6S275C63v38Ev();
extern void _ZN6S275C63v39Ev();
extern void _ZN6S275C63v40Ev();
extern void _ZN6S275C63v41Ev();
extern void _ZN6S275C63v42Ev();
extern void _ZN6S275C63v43Ev();
extern void _ZN6S275C63v44Ev();
extern void _ZN6S275C63v45Ev();
extern void _ZN6S275C63v46Ev();
extern void _ZN6S275C63v47Ev();
extern void _ZN6S275C63v48Ev();
extern void _ZN6S275C63v49Ev();
extern void _ZN6S275C63v50Ev();
extern void _ZN6S275C63v51Ev();
extern void _ZN6S275C63v52Ev();
extern void _ZN6S275C63v53Ev();
extern void _ZN6S275C63v54Ev();
extern void _ZN6S275C63v55Ev();
extern void _ZN6S275C63v56Ev();
extern void _ZN6S275C63v57Ev();
extern void _ZN6S275C63v58Ev();
extern void _ZN6S275C63v59Ev();
extern void _ZN6S275C63v60Ev();
extern void _ZN6S275C63v61Ev();
extern void _ZN6S275C63v62Ev();
extern void _ZN6S275C63v63Ev();
extern void _ZN6S275C63v64Ev();
extern void _ZN6S275C63v65Ev();
extern void _ZN6S275C63v66Ev();
extern void _ZN6S275C63v67Ev();
extern void _ZN6S275C63v68Ev();
extern void _ZN6S275C63v69Ev();
extern void _ZN6S275C63v70Ev();
extern void _ZN6S275C53v71Ev();
extern void _ZN6S275C53v72Ev();
extern void _ZN6S275C53v73Ev();
extern void _ZN6S275C53v74Ev();
extern void _ZN6S275C53v75Ev();
extern void _ZN6S275C53v76Ev();
extern void _ZN6S275C53v77Ev();
extern void _ZN6S275C53v78Ev();
extern void _ZN6S275C53v79Ev();
extern void _ZN6S275C53v80Ev();
extern void _ZN6S275C53v81Ev();
extern void _ZN6S275C53v82Ev();
extern void _ZN6S275C53v83Ev();
extern void _ZN6S275C53v84Ev();
extern void _ZN6S275C53v85Ev();
extern void _ZN6S275C53v86Ev();
extern void _ZN6S275C53v87Ev();
extern void _ZN6S275C53v88Ev();
extern void _ZN6S275C53v89Ev();
extern void _ZN6S275C53v90Ev();
extern void _ZN6S275C53v91Ev();
extern void _ZN6S275C53v92Ev();
extern void _ZN6S275C43v93Ev();
extern void _ZN6S275C43v94Ev();
extern void _ZN6S275C43v95Ev();
extern void _ZN6S275C43v96Ev();
extern void _ZN6S275C43v97Ev();
extern void _ZN6S275C43v98Ev();
extern void _ZN6S275C43v99Ev();
extern void _ZN6S275C44v100Ev();
extern void _ZN6S275C44v101Ev();
extern void _ZN6S275C44v102Ev();
extern void _ZN6S275C44v103Ev();
extern void _ZN6S275C44v104Ev();
extern void _ZN6S275C44v105Ev();
extern void _ZN6S275C44v106Ev();
extern void _ZN6S275C44v107Ev();
extern void _ZN6S275C44v108Ev();
extern void _ZN6S275C44v109Ev();
extern void _ZN6S275C44v110Ev();
extern void _ZN6S275C44v111Ev();
extern void _ZN6S275C44v112Ev();
extern void _ZN6S275C34v113Ev();
extern void _ZN6S275C34v114Ev();
extern void _ZN6S275C24v115Ev();
extern void _ZN6S275C24v116Ev();
extern void _ZN6S275C24v117Ev();
extern void _ZN6S275C24v118Ev();
extern void _ZN6S275C24v119Ev();
extern void _ZN6S275C24v120Ev();
extern void _ZN6S275C24v121Ev();
extern void _ZN6S275C24v122Ev();
extern void _ZN6S275C24v123Ev();
static  VTBL_ENTRY vtc_S275C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S275C2[0]),
  (VTBL_ENTRY)&_ZN6S275C2D1Ev,
  (VTBL_ENTRY)&_ZN6S275C2D0Ev,
  (VTBL_ENTRY)&_ZN6S275C62v7Ev,
  (VTBL_ENTRY)&_ZN6S275C62v8Ev,
  (VTBL_ENTRY)&_ZN6S275C62v9Ev,
  (VTBL_ENTRY)&_ZN6S275C63v10Ev,
  (VTBL_ENTRY)&_ZN6S275C63v11Ev,
  (VTBL_ENTRY)&_ZN6S275C63v12Ev,
  (VTBL_ENTRY)&_ZN6S275C63v13Ev,
  (VTBL_ENTRY)&_ZN6S275C63v14Ev,
  (VTBL_ENTRY)&_ZN6S275C63v15Ev,
  (VTBL_ENTRY)&_ZN6S275C63v16Ev,
  (VTBL_ENTRY)&_ZN6S275C63v17Ev,
  (VTBL_ENTRY)&_ZN6S275C63v18Ev,
  (VTBL_ENTRY)&_ZN6S275C63v19Ev,
  (VTBL_ENTRY)&_ZN6S275C63v20Ev,
  (VTBL_ENTRY)&_ZN6S275C63v21Ev,
  (VTBL_ENTRY)&_ZN6S275C63v22Ev,
  (VTBL_ENTRY)&_ZN6S275C63v23Ev,
  (VTBL_ENTRY)&_ZN6S275C63v24Ev,
  (VTBL_ENTRY)&_ZN6S275C63v25Ev,
  (VTBL_ENTRY)&_ZN6S275C63v26Ev,
  (VTBL_ENTRY)&_ZN6S275C63v27Ev,
  (VTBL_ENTRY)&_ZN6S275C63v28Ev,
  (VTBL_ENTRY)&_ZN6S275C63v29Ev,
  (VTBL_ENTRY)&_ZN6S275C63v30Ev,
  (VTBL_ENTRY)&_ZN6S275C63v31Ev,
  (VTBL_ENTRY)&_ZN6S275C63v32Ev,
  (VTBL_ENTRY)&_ZN6S275C63v33Ev,
  (VTBL_ENTRY)&_ZN6S275C63v34Ev,
  (VTBL_ENTRY)&_ZN6S275C63v35Ev,
  (VTBL_ENTRY)&_ZN6S275C63v36Ev,
  (VTBL_ENTRY)&_ZN6S275C63v37Ev,
  (VTBL_ENTRY)&_ZN6S275C63v38Ev,
  (VTBL_ENTRY)&_ZN6S275C63v39Ev,
  (VTBL_ENTRY)&_ZN6S275C63v40Ev,
  (VTBL_ENTRY)&_ZN6S275C63v41Ev,
  (VTBL_ENTRY)&_ZN6S275C63v42Ev,
  (VTBL_ENTRY)&_ZN6S275C63v43Ev,
  (VTBL_ENTRY)&_ZN6S275C63v44Ev,
  (VTBL_ENTRY)&_ZN6S275C63v45Ev,
  (VTBL_ENTRY)&_ZN6S275C63v46Ev,
  (VTBL_ENTRY)&_ZN6S275C63v47Ev,
  (VTBL_ENTRY)&_ZN6S275C63v48Ev,
  (VTBL_ENTRY)&_ZN6S275C63v49Ev,
  (VTBL_ENTRY)&_ZN6S275C63v50Ev,
  (VTBL_ENTRY)&_ZN6S275C63v51Ev,
  (VTBL_ENTRY)&_ZN6S275C63v52Ev,
  (VTBL_ENTRY)&_ZN6S275C63v53Ev,
  (VTBL_ENTRY)&_ZN6S275C63v54Ev,
  (VTBL_ENTRY)&_ZN6S275C63v55Ev,
  (VTBL_ENTRY)&_ZN6S275C63v56Ev,
  (VTBL_ENTRY)&_ZN6S275C63v57Ev,
  (VTBL_ENTRY)&_ZN6S275C63v58Ev,
  (VTBL_ENTRY)&_ZN6S275C63v59Ev,
  (VTBL_ENTRY)&_ZN6S275C63v60Ev,
  (VTBL_ENTRY)&_ZN6S275C63v61Ev,
  (VTBL_ENTRY)&_ZN6S275C63v62Ev,
  (VTBL_ENTRY)&_ZN6S275C63v63Ev,
  (VTBL_ENTRY)&_ZN6S275C63v64Ev,
  (VTBL_ENTRY)&_ZN6S275C63v65Ev,
  (VTBL_ENTRY)&_ZN6S275C63v66Ev,
  (VTBL_ENTRY)&_ZN6S275C63v67Ev,
  (VTBL_ENTRY)&_ZN6S275C63v68Ev,
  (VTBL_ENTRY)&_ZN6S275C63v69Ev,
  (VTBL_ENTRY)&_ZN6S275C63v70Ev,
  (VTBL_ENTRY)&_ZN6S275C53v71Ev,
  (VTBL_ENTRY)&_ZN6S275C53v72Ev,
  (VTBL_ENTRY)&_ZN6S275C53v73Ev,
  (VTBL_ENTRY)&_ZN6S275C53v74Ev,
  (VTBL_ENTRY)&_ZN6S275C53v75Ev,
  (VTBL_ENTRY)&_ZN6S275C53v76Ev,
  (VTBL_ENTRY)&_ZN6S275C53v77Ev,
  (VTBL_ENTRY)&_ZN6S275C53v78Ev,
  (VTBL_ENTRY)&_ZN6S275C53v79Ev,
  (VTBL_ENTRY)&_ZN6S275C53v80Ev,
  (VTBL_ENTRY)&_ZN6S275C53v81Ev,
  (VTBL_ENTRY)&_ZN6S275C53v82Ev,
  (VTBL_ENTRY)&_ZN6S275C53v83Ev,
  (VTBL_ENTRY)&_ZN6S275C53v84Ev,
  (VTBL_ENTRY)&_ZN6S275C53v85Ev,
  (VTBL_ENTRY)&_ZN6S275C53v86Ev,
  (VTBL_ENTRY)&_ZN6S275C53v87Ev,
  (VTBL_ENTRY)&_ZN6S275C53v88Ev,
  (VTBL_ENTRY)&_ZN6S275C53v89Ev,
  (VTBL_ENTRY)&_ZN6S275C53v90Ev,
  (VTBL_ENTRY)&_ZN6S275C53v91Ev,
  (VTBL_ENTRY)&_ZN6S275C53v92Ev,
  (VTBL_ENTRY)&_ZN6S275C43v93Ev,
  (VTBL_ENTRY)&_ZN6S275C43v94Ev,
  (VTBL_ENTRY)&_ZN6S275C43v95Ev,
  (VTBL_ENTRY)&_ZN6S275C43v96Ev,
  (VTBL_ENTRY)&_ZN6S275C43v97Ev,
  (VTBL_ENTRY)&_ZN6S275C43v98Ev,
  (VTBL_ENTRY)&_ZN6S275C43v99Ev,
  (VTBL_ENTRY)&_ZN6S275C44v100Ev,
  (VTBL_ENTRY)&_ZN6S275C44v101Ev,
  (VTBL_ENTRY)&_ZN6S275C44v102Ev,
  (VTBL_ENTRY)&_ZN6S275C44v103Ev,
  (VTBL_ENTRY)&_ZN6S275C44v104Ev,
  (VTBL_ENTRY)&_ZN6S275C44v105Ev,
  (VTBL_ENTRY)&_ZN6S275C44v106Ev,
  (VTBL_ENTRY)&_ZN6S275C44v107Ev,
  (VTBL_ENTRY)&_ZN6S275C44v108Ev,
  (VTBL_ENTRY)&_ZN6S275C44v109Ev,
  (VTBL_ENTRY)&_ZN6S275C44v110Ev,
  (VTBL_ENTRY)&_ZN6S275C44v111Ev,
  (VTBL_ENTRY)&_ZN6S275C44v112Ev,
  (VTBL_ENTRY)&_ZN6S275C34v113Ev,
  (VTBL_ENTRY)&_ZN6S275C34v114Ev,
  (VTBL_ENTRY)&_ZN6S275C24v115Ev,
  (VTBL_ENTRY)&_ZN6S275C24v116Ev,
  (VTBL_ENTRY)&_ZN6S275C24v117Ev,
  (VTBL_ENTRY)&_ZN6S275C24v118Ev,
  (VTBL_ENTRY)&_ZN6S275C24v119Ev,
  (VTBL_ENTRY)&_ZN6S275C24v120Ev,
  (VTBL_ENTRY)&_ZN6S275C24v121Ev,
  (VTBL_ENTRY)&_ZN6S275C24v122Ev,
  (VTBL_ENTRY)&_ZN6S275C24v123Ev,
};
extern VTBL_ENTRY _ZTI6S275C2[];
extern  VTBL_ENTRY _ZTV6S275C2[];
Class_Descriptor cd_S275C2 = {  "S275C2", // class name
  bases_S275C2, 4,
  &(vtc_S275C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S275C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S275C2),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S275C1  : S275C2 {
  ::S3168C15_nt s275c1f0;
  void *s275c1f1;
  virtual  ~S275C1(); // _ZN6S275C1D1Ev
  virtual void  v1(); // _ZN6S275C12v1Ev
  virtual void  v2(); // _ZN6S275C12v2Ev
  virtual void  v3(); // _ZN6S275C12v3Ev
  virtual void  v4(); // _ZN6S275C12v4Ev
  virtual void  v5(); // _ZN6S275C12v5Ev
  virtual void  v6(); // _ZN6S275C12v6Ev
  S275C1(); // tgen
};
//SIG(1 S275C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 FC7{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v113 v114} vd v115 v116 v117 v118 v119 v120 v121 v122 v123} vd v1 v2 v3 v4 v5 v6 FC21{ BC22{ BC11}} Fp}


 S275C1 ::~S275C1(){ note_dtor("S275C1", this);}
void  S275C1 ::v1(){vfunc_called(this, "_ZN6S275C12v1Ev");}
void  S275C1 ::v2(){vfunc_called(this, "_ZN6S275C12v2Ev");}
void  S275C1 ::v3(){vfunc_called(this, "_ZN6S275C12v3Ev");}
void  S275C1 ::v4(){vfunc_called(this, "_ZN6S275C12v4Ev");}
void  S275C1 ::v5(){vfunc_called(this, "_ZN6S275C12v5Ev");}
void  S275C1 ::v6(){vfunc_called(this, "_ZN6S275C12v6Ev");}
S275C1 ::S275C1(){ note_ctor("S275C1", this);} // tgen

static void Test_S275C1()
{
  extern Class_Descriptor cd_S275C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,54)];
    init_test(&cd_S275C1, buf);
    S275C1 *dp, &lv = *(dp=new (buf) S275C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,212), "sizeof(S275C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S275C1)");
    check_base_class_offset(lv, (S275C6*)(S275C5*)(S275C4*)(S275C3*)(S275C2*), 0, "S275C1");
    check_base_class_offset(lv, (S275C5*)(S275C4*)(S275C3*)(S275C2*), 0, "S275C1");
    check_base_class_offset(lv, (S275C4*)(S275C3*)(S275C2*), 0, "S275C1");
    check_base_class_offset(lv, (S275C3*)(S275C2*), 0, "S275C1");
    check_base_class_offset(lv, (S275C2*), 0, "S275C1");
    check_field_offset(lv, s275c1f0, ABISELECT(272,196), "S275C1.s275c1f0");
    check_field_offset(lv, s275c1f1, ABISELECT(288,208), "S275C1.s275c1f1");
    test_class_info(&lv, &cd_S275C1);
    dp->~S275C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS275C1(Test_S275C1, "S275C1", ABISELECT(296,212));

#else // __cplusplus

extern void _ZN6S275C1C1Ev();
extern void _ZN6S275C1D1Ev();
Name_Map name_map_S275C1[] = {
  NSPAIR(_ZN6S275C1C1Ev),
  NSPAIR(_ZN6S275C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S275C6;
extern VTBL_ENTRY _ZTI6S275C6[];
extern  VTBL_ENTRY _ZTV6S275C6[];
extern Class_Descriptor cd_S275C5;
extern VTBL_ENTRY _ZTI6S275C5[];
extern  VTBL_ENTRY _ZTV6S275C5[];
extern Class_Descriptor cd_S275C4;
extern VTBL_ENTRY _ZTI6S275C4[];
extern  VTBL_ENTRY _ZTV6S275C4[];
extern Class_Descriptor cd_S275C3;
extern VTBL_ENTRY _ZTI6S275C3[];
extern  VTBL_ENTRY _ZTV6S275C3[];
extern Class_Descriptor cd_S275C2;
extern VTBL_ENTRY _ZTI6S275C2[];
extern  VTBL_ENTRY _ZTV6S275C2[];
static Base_Class bases_S275C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S275C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S275C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S275C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S275C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S275C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S275C1[];
extern void _ZN6S275C1D1Ev();
extern void _ZN6S275C1D0Ev();
extern void _ZN6S275C62v7Ev();
extern void _ZN6S275C62v8Ev();
extern void _ZN6S275C62v9Ev();
extern void _ZN6S275C63v10Ev();
extern void _ZN6S275C63v11Ev();
extern void _ZN6S275C63v12Ev();
extern void _ZN6S275C63v13Ev();
extern void _ZN6S275C63v14Ev();
extern void _ZN6S275C63v15Ev();
extern void _ZN6S275C63v16Ev();
extern void _ZN6S275C63v17Ev();
extern void _ZN6S275C63v18Ev();
extern void _ZN6S275C63v19Ev();
extern void _ZN6S275C63v20Ev();
extern void _ZN6S275C63v21Ev();
extern void _ZN6S275C63v22Ev();
extern void _ZN6S275C63v23Ev();
extern void _ZN6S275C63v24Ev();
extern void _ZN6S275C63v25Ev();
extern void _ZN6S275C63v26Ev();
extern void _ZN6S275C63v27Ev();
extern void _ZN6S275C63v28Ev();
extern void _ZN6S275C63v29Ev();
extern void _ZN6S275C63v30Ev();
extern void _ZN6S275C63v31Ev();
extern void _ZN6S275C63v32Ev();
extern void _ZN6S275C63v33Ev();
extern void _ZN6S275C63v34Ev();
extern void _ZN6S275C63v35Ev();
extern void _ZN6S275C63v36Ev();
extern void _ZN6S275C63v37Ev();
extern void _ZN6S275C63v38Ev();
extern void _ZN6S275C63v39Ev();
extern void _ZN6S275C63v40Ev();
extern void _ZN6S275C63v41Ev();
extern void _ZN6S275C63v42Ev();
extern void _ZN6S275C63v43Ev();
extern void _ZN6S275C63v44Ev();
extern void _ZN6S275C63v45Ev();
extern void _ZN6S275C63v46Ev();
extern void _ZN6S275C63v47Ev();
extern void _ZN6S275C63v48Ev();
extern void _ZN6S275C63v49Ev();
extern void _ZN6S275C63v50Ev();
extern void _ZN6S275C63v51Ev();
extern void _ZN6S275C63v52Ev();
extern void _ZN6S275C63v53Ev();
extern void _ZN6S275C63v54Ev();
extern void _ZN6S275C63v55Ev();
extern void _ZN6S275C63v56Ev();
extern void _ZN6S275C63v57Ev();
extern void _ZN6S275C63v58Ev();
extern void _ZN6S275C63v59Ev();
extern void _ZN6S275C63v60Ev();
extern void _ZN6S275C63v61Ev();
extern void _ZN6S275C63v62Ev();
extern void _ZN6S275C63v63Ev();
extern void _ZN6S275C63v64Ev();
extern void _ZN6S275C63v65Ev();
extern void _ZN6S275C63v66Ev();
extern void _ZN6S275C63v67Ev();
extern void _ZN6S275C63v68Ev();
extern void _ZN6S275C63v69Ev();
extern void _ZN6S275C63v70Ev();
extern void _ZN6S275C53v71Ev();
extern void _ZN6S275C53v72Ev();
extern void _ZN6S275C53v73Ev();
extern void _ZN6S275C53v74Ev();
extern void _ZN6S275C53v75Ev();
extern void _ZN6S275C53v76Ev();
extern void _ZN6S275C53v77Ev();
extern void _ZN6S275C53v78Ev();
extern void _ZN6S275C53v79Ev();
extern void _ZN6S275C53v80Ev();
extern void _ZN6S275C53v81Ev();
extern void _ZN6S275C53v82Ev();
extern void _ZN6S275C53v83Ev();
extern void _ZN6S275C53v84Ev();
extern void _ZN6S275C53v85Ev();
extern void _ZN6S275C53v86Ev();
extern void _ZN6S275C53v87Ev();
extern void _ZN6S275C53v88Ev();
extern void _ZN6S275C53v89Ev();
extern void _ZN6S275C53v90Ev();
extern void _ZN6S275C53v91Ev();
extern void _ZN6S275C53v92Ev();
extern void _ZN6S275C43v93Ev();
extern void _ZN6S275C43v94Ev();
extern void _ZN6S275C43v95Ev();
extern void _ZN6S275C43v96Ev();
extern void _ZN6S275C43v97Ev();
extern void _ZN6S275C43v98Ev();
extern void _ZN6S275C43v99Ev();
extern void _ZN6S275C44v100Ev();
extern void _ZN6S275C44v101Ev();
extern void _ZN6S275C44v102Ev();
extern void _ZN6S275C44v103Ev();
extern void _ZN6S275C44v104Ev();
extern void _ZN6S275C44v105Ev();
extern void _ZN6S275C44v106Ev();
extern void _ZN6S275C44v107Ev();
extern void _ZN6S275C44v108Ev();
extern void _ZN6S275C44v109Ev();
extern void _ZN6S275C44v110Ev();
extern void _ZN6S275C44v111Ev();
extern void _ZN6S275C44v112Ev();
extern void _ZN6S275C34v113Ev();
extern void _ZN6S275C34v114Ev();
extern void _ZN6S275C24v115Ev();
extern void _ZN6S275C24v116Ev();
extern void _ZN6S275C24v117Ev();
extern void _ZN6S275C24v118Ev();
extern void _ZN6S275C24v119Ev();
extern void _ZN6S275C24v120Ev();
extern void _ZN6S275C24v121Ev();
extern void _ZN6S275C24v122Ev();
extern void _ZN6S275C24v123Ev();
extern void _ZN6S275C12v1Ev();
extern void _ZN6S275C12v2Ev();
extern void _ZN6S275C12v3Ev();
extern void _ZN6S275C12v4Ev();
extern void _ZN6S275C12v5Ev();
extern void _ZN6S275C12v6Ev();
static  VTBL_ENTRY vtc_S275C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S275C1[0]),
  (VTBL_ENTRY)&_ZN6S275C1D1Ev,
  (VTBL_ENTRY)&_ZN6S275C1D0Ev,
  (VTBL_ENTRY)&_ZN6S275C62v7Ev,
  (VTBL_ENTRY)&_ZN6S275C62v8Ev,
  (VTBL_ENTRY)&_ZN6S275C62v9Ev,
  (VTBL_ENTRY)&_ZN6S275C63v10Ev,
  (VTBL_ENTRY)&_ZN6S275C63v11Ev,
  (VTBL_ENTRY)&_ZN6S275C63v12Ev,
  (VTBL_ENTRY)&_ZN6S275C63v13Ev,
  (VTBL_ENTRY)&_ZN6S275C63v14Ev,
  (VTBL_ENTRY)&_ZN6S275C63v15Ev,
  (VTBL_ENTRY)&_ZN6S275C63v16Ev,
  (VTBL_ENTRY)&_ZN6S275C63v17Ev,
  (VTBL_ENTRY)&_ZN6S275C63v18Ev,
  (VTBL_ENTRY)&_ZN6S275C63v19Ev,
  (VTBL_ENTRY)&_ZN6S275C63v20Ev,
  (VTBL_ENTRY)&_ZN6S275C63v21Ev,
  (VTBL_ENTRY)&_ZN6S275C63v22Ev,
  (VTBL_ENTRY)&_ZN6S275C63v23Ev,
  (VTBL_ENTRY)&_ZN6S275C63v24Ev,
  (VTBL_ENTRY)&_ZN6S275C63v25Ev,
  (VTBL_ENTRY)&_ZN6S275C63v26Ev,
  (VTBL_ENTRY)&_ZN6S275C63v27Ev,
  (VTBL_ENTRY)&_ZN6S275C63v28Ev,
  (VTBL_ENTRY)&_ZN6S275C63v29Ev,
  (VTBL_ENTRY)&_ZN6S275C63v30Ev,
  (VTBL_ENTRY)&_ZN6S275C63v31Ev,
  (VTBL_ENTRY)&_ZN6S275C63v32Ev,
  (VTBL_ENTRY)&_ZN6S275C63v33Ev,
  (VTBL_ENTRY)&_ZN6S275C63v34Ev,
  (VTBL_ENTRY)&_ZN6S275C63v35Ev,
  (VTBL_ENTRY)&_ZN6S275C63v36Ev,
  (VTBL_ENTRY)&_ZN6S275C63v37Ev,
  (VTBL_ENTRY)&_ZN6S275C63v38Ev,
  (VTBL_ENTRY)&_ZN6S275C63v39Ev,
  (VTBL_ENTRY)&_ZN6S275C63v40Ev,
  (VTBL_ENTRY)&_ZN6S275C63v41Ev,
  (VTBL_ENTRY)&_ZN6S275C63v42Ev,
  (VTBL_ENTRY)&_ZN6S275C63v43Ev,
  (VTBL_ENTRY)&_ZN6S275C63v44Ev,
  (VTBL_ENTRY)&_ZN6S275C63v45Ev,
  (VTBL_ENTRY)&_ZN6S275C63v46Ev,
  (VTBL_ENTRY)&_ZN6S275C63v47Ev,
  (VTBL_ENTRY)&_ZN6S275C63v48Ev,
  (VTBL_ENTRY)&_ZN6S275C63v49Ev,
  (VTBL_ENTRY)&_ZN6S275C63v50Ev,
  (VTBL_ENTRY)&_ZN6S275C63v51Ev,
  (VTBL_ENTRY)&_ZN6S275C63v52Ev,
  (VTBL_ENTRY)&_ZN6S275C63v53Ev,
  (VTBL_ENTRY)&_ZN6S275C63v54Ev,
  (VTBL_ENTRY)&_ZN6S275C63v55Ev,
  (VTBL_ENTRY)&_ZN6S275C63v56Ev,
  (VTBL_ENTRY)&_ZN6S275C63v57Ev,
  (VTBL_ENTRY)&_ZN6S275C63v58Ev,
  (VTBL_ENTRY)&_ZN6S275C63v59Ev,
  (VTBL_ENTRY)&_ZN6S275C63v60Ev,
  (VTBL_ENTRY)&_ZN6S275C63v61Ev,
  (VTBL_ENTRY)&_ZN6S275C63v62Ev,
  (VTBL_ENTRY)&_ZN6S275C63v63Ev,
  (VTBL_ENTRY)&_ZN6S275C63v64Ev,
  (VTBL_ENTRY)&_ZN6S275C63v65Ev,
  (VTBL_ENTRY)&_ZN6S275C63v66Ev,
  (VTBL_ENTRY)&_ZN6S275C63v67Ev,
  (VTBL_ENTRY)&_ZN6S275C63v68Ev,
  (VTBL_ENTRY)&_ZN6S275C63v69Ev,
  (VTBL_ENTRY)&_ZN6S275C63v70Ev,
  (VTBL_ENTRY)&_ZN6S275C53v71Ev,
  (VTBL_ENTRY)&_ZN6S275C53v72Ev,
  (VTBL_ENTRY)&_ZN6S275C53v73Ev,
  (VTBL_ENTRY)&_ZN6S275C53v74Ev,
  (VTBL_ENTRY)&_ZN6S275C53v75Ev,
  (VTBL_ENTRY)&_ZN6S275C53v76Ev,
  (VTBL_ENTRY)&_ZN6S275C53v77Ev,
  (VTBL_ENTRY)&_ZN6S275C53v78Ev,
  (VTBL_ENTRY)&_ZN6S275C53v79Ev,
  (VTBL_ENTRY)&_ZN6S275C53v80Ev,
  (VTBL_ENTRY)&_ZN6S275C53v81Ev,
  (VTBL_ENTRY)&_ZN6S275C53v82Ev,
  (VTBL_ENTRY)&_ZN6S275C53v83Ev,
  (VTBL_ENTRY)&_ZN6S275C53v84Ev,
  (VTBL_ENTRY)&_ZN6S275C53v85Ev,
  (VTBL_ENTRY)&_ZN6S275C53v86Ev,
  (VTBL_ENTRY)&_ZN6S275C53v87Ev,
  (VTBL_ENTRY)&_ZN6S275C53v88Ev,
  (VTBL_ENTRY)&_ZN6S275C53v89Ev,
  (VTBL_ENTRY)&_ZN6S275C53v90Ev,
  (VTBL_ENTRY)&_ZN6S275C53v91Ev,
  (VTBL_ENTRY)&_ZN6S275C53v92Ev,
  (VTBL_ENTRY)&_ZN6S275C43v93Ev,
  (VTBL_ENTRY)&_ZN6S275C43v94Ev,
  (VTBL_ENTRY)&_ZN6S275C43v95Ev,
  (VTBL_ENTRY)&_ZN6S275C43v96Ev,
  (VTBL_ENTRY)&_ZN6S275C43v97Ev,
  (VTBL_ENTRY)&_ZN6S275C43v98Ev,
  (VTBL_ENTRY)&_ZN6S275C43v99Ev,
  (VTBL_ENTRY)&_ZN6S275C44v100Ev,
  (VTBL_ENTRY)&_ZN6S275C44v101Ev,
  (VTBL_ENTRY)&_ZN6S275C44v102Ev,
  (VTBL_ENTRY)&_ZN6S275C44v103Ev,
  (VTBL_ENTRY)&_ZN6S275C44v104Ev,
  (VTBL_ENTRY)&_ZN6S275C44v105Ev,
  (VTBL_ENTRY)&_ZN6S275C44v106Ev,
  (VTBL_ENTRY)&_ZN6S275C44v107Ev,
  (VTBL_ENTRY)&_ZN6S275C44v108Ev,
  (VTBL_ENTRY)&_ZN6S275C44v109Ev,
  (VTBL_ENTRY)&_ZN6S275C44v110Ev,
  (VTBL_ENTRY)&_ZN6S275C44v111Ev,
  (VTBL_ENTRY)&_ZN6S275C44v112Ev,
  (VTBL_ENTRY)&_ZN6S275C34v113Ev,
  (VTBL_ENTRY)&_ZN6S275C34v114Ev,
  (VTBL_ENTRY)&_ZN6S275C24v115Ev,
  (VTBL_ENTRY)&_ZN6S275C24v116Ev,
  (VTBL_ENTRY)&_ZN6S275C24v117Ev,
  (VTBL_ENTRY)&_ZN6S275C24v118Ev,
  (VTBL_ENTRY)&_ZN6S275C24v119Ev,
  (VTBL_ENTRY)&_ZN6S275C24v120Ev,
  (VTBL_ENTRY)&_ZN6S275C24v121Ev,
  (VTBL_ENTRY)&_ZN6S275C24v122Ev,
  (VTBL_ENTRY)&_ZN6S275C24v123Ev,
  (VTBL_ENTRY)&_ZN6S275C12v1Ev,
  (VTBL_ENTRY)&_ZN6S275C12v2Ev,
  (VTBL_ENTRY)&_ZN6S275C12v3Ev,
  (VTBL_ENTRY)&_ZN6S275C12v4Ev,
  (VTBL_ENTRY)&_ZN6S275C12v5Ev,
  (VTBL_ENTRY)&_ZN6S275C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S275C1[];
extern  VTBL_ENTRY _ZTV6S275C1[];
Class_Descriptor cd_S275C1 = {  "S275C1", // class name
  bases_S275C1, 5,
  &(vtc_S275C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,212), // object size
  NSPAIRA(_ZTI6S275C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S275C1),127, //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  S276C6  {
  int s276c6f0;
  __tsi64 s276c6f1;
  void *s276c6f2[4];
  int s276c6f3[2];
  void *s276c6f4;
  ::S3221C4_nt s276c6f5;
  void *s276c6f6[2];
  virtual  ~S276C6(); // _ZN6S276C6D1Ev
  virtual void  v7(); // _ZN6S276C62v7Ev
  virtual void  v8(); // _ZN6S276C62v8Ev
  virtual void  v9(); // _ZN6S276C62v9Ev
  virtual void  v10(); // _ZN6S276C63v10Ev
  virtual void  v11(); // _ZN6S276C63v11Ev
  virtual void  v12(); // _ZN6S276C63v12Ev
  virtual void  v13(); // _ZN6S276C63v13Ev
  virtual void  v14(); // _ZN6S276C63v14Ev
  virtual void  v15(); // _ZN6S276C63v15Ev
  virtual void  v16(); // _ZN6S276C63v16Ev
  virtual void  v17(); // _ZN6S276C63v17Ev
  virtual void  v18(); // _ZN6S276C63v18Ev
  virtual void  v19(); // _ZN6S276C63v19Ev
  virtual void  v20(); // _ZN6S276C63v20Ev
  virtual void  v21(); // _ZN6S276C63v21Ev
  virtual void  v22(); // _ZN6S276C63v22Ev
  virtual void  v23(); // _ZN6S276C63v23Ev
  virtual void  v24(); // _ZN6S276C63v24Ev
  virtual void  v25(); // _ZN6S276C63v25Ev
  virtual void  v26(); // _ZN6S276C63v26Ev
  virtual void  v27(); // _ZN6S276C63v27Ev
  virtual void  v28(); // _ZN6S276C63v28Ev
  virtual void  v29(); // _ZN6S276C63v29Ev
  virtual void  v30(); // _ZN6S276C63v30Ev
  virtual void  v31(); // _ZN6S276C63v31Ev
  virtual void  v32(); // _ZN6S276C63v32Ev
  virtual void  v33(); // _ZN6S276C63v33Ev
  virtual void  v34(); // _ZN6S276C63v34Ev
  virtual void  v35(); // _ZN6S276C63v35Ev
  virtual void  v36(); // _ZN6S276C63v36Ev
  virtual void  v37(); // _ZN6S276C63v37Ev
  virtual void  v38(); // _ZN6S276C63v38Ev
  virtual void  v39(); // _ZN6S276C63v39Ev
  virtual void  v40(); // _ZN6S276C63v40Ev
  virtual void  v41(); // _ZN6S276C63v41Ev
  virtual void  v42(); // _ZN6S276C63v42Ev
  virtual void  v43(); // _ZN6S276C63v43Ev
  virtual void  v44(); // _ZN6S276C63v44Ev
  virtual void  v45(); // _ZN6S276C63v45Ev
  virtual void  v46(); // _ZN6S276C63v46Ev
  virtual void  v47(); // _ZN6S276C63v47Ev
  virtual void  v48(); // _ZN6S276C63v48Ev
  virtual void  v49(); // _ZN6S276C63v49Ev
  virtual void  v50(); // _ZN6S276C63v50Ev
  virtual void  v51(); // _ZN6S276C63v51Ev
  virtual void  v52(); // _ZN6S276C63v52Ev
  virtual void  v53(); // _ZN6S276C63v53Ev
  virtual void  v54(); // _ZN6S276C63v54Ev
  virtual void  v55(); // _ZN6S276C63v55Ev
  virtual void  v56(); // _ZN6S276C63v56Ev
  virtual void  v57(); // _ZN6S276C63v57Ev
  virtual void  v58(); // _ZN6S276C63v58Ev
  virtual void  v59(); // _ZN6S276C63v59Ev
  virtual void  v60(); // _ZN6S276C63v60Ev
  virtual void  v61(); // _ZN6S276C63v61Ev
  virtual void  v62(); // _ZN6S276C63v62Ev
  virtual void  v63(); // _ZN6S276C63v63Ev
  virtual void  v64(); // _ZN6S276C63v64Ev
  virtual void  v65(); // _ZN6S276C63v65Ev
  virtual void  v66(); // _ZN6S276C63v66Ev
  virtual void  v67(); // _ZN6S276C63v67Ev
  virtual void  v68(); // _ZN6S276C63v68Ev
  virtual void  v69(); // _ZN6S276C63v69Ev
  virtual void  v70(); // _ZN6S276C63v70Ev
  S276C6(); // tgen
};
//SIG(-1 S276C6) 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]}


 S276C6 ::~S276C6(){ note_dtor("S276C6", this);}
void  S276C6 ::v7(){vfunc_called(this, "_ZN6S276C62v7Ev");}
void  S276C6 ::v8(){vfunc_called(this, "_ZN6S276C62v8Ev");}
void  S276C6 ::v9(){vfunc_called(this, "_ZN6S276C62v9Ev");}
void  S276C6 ::v10(){vfunc_called(this, "_ZN6S276C63v10Ev");}
void  S276C6 ::v11(){vfunc_called(this, "_ZN6S276C63v11Ev");}
void  S276C6 ::v12(){vfunc_called(this, "_ZN6S276C63v12Ev");}
void  S276C6 ::v13(){vfunc_called(this, "_ZN6S276C63v13Ev");}
void  S276C6 ::v14(){vfunc_called(this, "_ZN6S276C63v14Ev");}
void  S276C6 ::v15(){vfunc_called(this, "_ZN6S276C63v15Ev");}
void  S276C6 ::v16(){vfunc_called(this, "_ZN6S276C63v16Ev");}
void  S276C6 ::v17(){vfunc_called(this, "_ZN6S276C63v17Ev");}
void  S276C6 ::v18(){vfunc_called(this, "_ZN6S276C63v18Ev");}
void  S276C6 ::v19(){vfunc_called(this, "_ZN6S276C63v19Ev");}
void  S276C6 ::v20(){vfunc_called(this, "_ZN6S276C63v20Ev");}
void  S276C6 ::v21(){vfunc_called(this, "_ZN6S276C63v21Ev");}
void  S276C6 ::v22(){vfunc_called(this, "_ZN6S276C63v22Ev");}
void  S276C6 ::v23(){vfunc_called(this, "_ZN6S276C63v23Ev");}
void  S276C6 ::v24(){vfunc_called(this, "_ZN6S276C63v24Ev");}
void  S276C6 ::v25(){vfunc_called(this, "_ZN6S276C63v25Ev");}
void  S276C6 ::v26(){vfunc_called(this, "_ZN6S276C63v26Ev");}
void  S276C6 ::v27(){vfunc_called(this, "_ZN6S276C63v27Ev");}
void  S276C6 ::v28(){vfunc_called(this, "_ZN6S276C63v28Ev");}
void  S276C6 ::v29(){vfunc_called(this, "_ZN6S276C63v29Ev");}
void  S276C6 ::v30(){vfunc_called(this, "_ZN6S276C63v30Ev");}
void  S276C6 ::v31(){vfunc_called(this, "_ZN6S276C63v31Ev");}
void  S276C6 ::v32(){vfunc_called(this, "_ZN6S276C63v32Ev");}
void  S276C6 ::v33(){vfunc_called(this, "_ZN6S276C63v33Ev");}
void  S276C6 ::v34(){vfunc_called(this, "_ZN6S276C63v34Ev");}
void  S276C6 ::v35(){vfunc_called(this, "_ZN6S276C63v35Ev");}
void  S276C6 ::v36(){vfunc_called(this, "_ZN6S276C63v36Ev");}
void  S276C6 ::v37(){vfunc_called(this, "_ZN6S276C63v37Ev");}
void  S276C6 ::v38(){vfunc_called(this, "_ZN6S276C63v38Ev");}
void  S276C6 ::v39(){vfunc_called(this, "_ZN6S276C63v39Ev");}
void  S276C6 ::v40(){vfunc_called(this, "_ZN6S276C63v40Ev");}
void  S276C6 ::v41(){vfunc_called(this, "_ZN6S276C63v41Ev");}
void  S276C6 ::v42(){vfunc_called(this, "_ZN6S276C63v42Ev");}
void  S276C6 ::v43(){vfunc_called(this, "_ZN6S276C63v43Ev");}
void  S276C6 ::v44(){vfunc_called(this, "_ZN6S276C63v44Ev");}
void  S276C6 ::v45(){vfunc_called(this, "_ZN6S276C63v45Ev");}
void  S276C6 ::v46(){vfunc_called(this, "_ZN6S276C63v46Ev");}
void  S276C6 ::v47(){vfunc_called(this, "_ZN6S276C63v47Ev");}
void  S276C6 ::v48(){vfunc_called(this, "_ZN6S276C63v48Ev");}
void  S276C6 ::v49(){vfunc_called(this, "_ZN6S276C63v49Ev");}
void  S276C6 ::v50(){vfunc_called(this, "_ZN6S276C63v50Ev");}
void  S276C6 ::v51(){vfunc_called(this, "_ZN6S276C63v51Ev");}
void  S276C6 ::v52(){vfunc_called(this, "_ZN6S276C63v52Ev");}
void  S276C6 ::v53(){vfunc_called(this, "_ZN6S276C63v53Ev");}
void  S276C6 ::v54(){vfunc_called(this, "_ZN6S276C63v54Ev");}
void  S276C6 ::v55(){vfunc_called(this, "_ZN6S276C63v55Ev");}
void  S276C6 ::v56(){vfunc_called(this, "_ZN6S276C63v56Ev");}
void  S276C6 ::v57(){vfunc_called(this, "_ZN6S276C63v57Ev");}
void  S276C6 ::v58(){vfunc_called(this, "_ZN6S276C63v58Ev");}
void  S276C6 ::v59(){vfunc_called(this, "_ZN6S276C63v59Ev");}
void  S276C6 ::v60(){vfunc_called(this, "_ZN6S276C63v60Ev");}
void  S276C6 ::v61(){vfunc_called(this, "_ZN6S276C63v61Ev");}
void  S276C6 ::v62(){vfunc_called(this, "_ZN6S276C63v62Ev");}
void  S276C6 ::v63(){vfunc_called(this, "_ZN6S276C63v63Ev");}
void  S276C6 ::v64(){vfunc_called(this, "_ZN6S276C63v64Ev");}
void  S276C6 ::v65(){vfunc_called(this, "_ZN6S276C63v65Ev");}
void  S276C6 ::v66(){vfunc_called(this, "_ZN6S276C63v66Ev");}
void  S276C6 ::v67(){vfunc_called(this, "_ZN6S276C63v67Ev");}
void  S276C6 ::v68(){vfunc_called(this, "_ZN6S276C63v68Ev");}
void  S276C6 ::v69(){vfunc_called(this, "_ZN6S276C63v69Ev");}
void  S276C6 ::v70(){vfunc_called(this, "_ZN6S276C63v70Ev");}
S276C6 ::S276C6(){ note_ctor("S276C6", this);} // tgen

static void Test_S276C6()
{
  extern Class_Descriptor cd_S276C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S276C6, buf);
    S276C6 *dp, &lv = *(dp=new (buf) S276C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S276C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S276C6)");
    check_field_offset(lv, s276c6f0, ABISELECT(8,4), "S276C6.s276c6f0");
    check_field_offset(lv, s276c6f1, ABISELECT(16,8), "S276C6.s276c6f1");
    check_field_offset(lv, s276c6f2, ABISELECT(24,16), "S276C6.s276c6f2");
    check_field_offset(lv, s276c6f3, ABISELECT(56,32), "S276C6.s276c6f3");
    check_field_offset(lv, s276c6f4, ABISELECT(64,40), "S276C6.s276c6f4");
    check_field_offset(lv, s276c6f5, ABISELECT(72,44), "S276C6.s276c6f5");
    check_field_offset(lv, s276c6f6, ABISELECT(80,52), "S276C6.s276c6f6");
    test_class_info(&lv, &cd_S276C6);
    dp->~S276C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS276C6(Test_S276C6, "S276C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S276C6C1Ev();
extern void _ZN6S276C6D1Ev();
Name_Map name_map_S276C6[] = {
  NSPAIR(_ZN6S276C6C1Ev),
  NSPAIR(_ZN6S276C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S276C6[];
extern void _ZN6S276C6D1Ev();
extern void _ZN6S276C6D0Ev();
extern void _ZN6S276C62v7Ev();
extern void _ZN6S276C62v8Ev();
extern void _ZN6S276C62v9Ev();
extern void _ZN6S276C63v10Ev();
extern void _ZN6S276C63v11Ev();
extern void _ZN6S276C63v12Ev();
extern void _ZN6S276C63v13Ev();
extern void _ZN6S276C63v14Ev();
extern void _ZN6S276C63v15Ev();
extern void _ZN6S276C63v16Ev();
extern void _ZN6S276C63v17Ev();
extern void _ZN6S276C63v18Ev();
extern void _ZN6S276C63v19Ev();
extern void _ZN6S276C63v20Ev();
extern void _ZN6S276C63v21Ev();
extern void _ZN6S276C63v22Ev();
extern void _ZN6S276C63v23Ev();
extern void _ZN6S276C63v24Ev();
extern void _ZN6S276C63v25Ev();
extern void _ZN6S276C63v26Ev();
extern void _ZN6S276C63v27Ev();
extern void _ZN6S276C63v28Ev();
extern void _ZN6S276C63v29Ev();
extern void _ZN6S276C63v30Ev();
extern void _ZN6S276C63v31Ev();
extern void _ZN6S276C63v32Ev();
extern void _ZN6S276C63v33Ev();
extern void _ZN6S276C63v34Ev();
extern void _ZN6S276C63v35Ev();
extern void _ZN6S276C63v36Ev();
extern void _ZN6S276C63v37Ev();
extern void _ZN6S276C63v38Ev();
extern void _ZN6S276C63v39Ev();
extern void _ZN6S276C63v40Ev();
extern void _ZN6S276C63v41Ev();
extern void _ZN6S276C63v42Ev();
extern void _ZN6S276C63v43Ev();
extern void _ZN6S276C63v44Ev();
extern void _ZN6S276C63v45Ev();
extern void _ZN6S276C63v46Ev();
extern void _ZN6S276C63v47Ev();
extern void _ZN6S276C63v48Ev();
extern void _ZN6S276C63v49Ev();
extern void _ZN6S276C63v50Ev();
extern void _ZN6S276C63v51Ev();
extern void _ZN6S276C63v52Ev();
extern void _ZN6S276C63v53Ev();
extern void _ZN6S276C63v54Ev();
extern void _ZN6S276C63v55Ev();
extern void _ZN6S276C63v56Ev();
extern void _ZN6S276C63v57Ev();
extern void _ZN6S276C63v58Ev();
extern void _ZN6S276C63v59Ev();
extern void _ZN6S276C63v60Ev();
extern void _ZN6S276C63v61Ev();
extern void _ZN6S276C63v62Ev();
extern void _ZN6S276C63v63Ev();
extern void _ZN6S276C63v64Ev();
extern void _ZN6S276C63v65Ev();
extern void _ZN6S276C63v66Ev();
extern void _ZN6S276C63v67Ev();
extern void _ZN6S276C63v68Ev();
extern void _ZN6S276C63v69Ev();
extern void _ZN6S276C63v70Ev();
static  VTBL_ENTRY vtc_S276C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S276C6[0]),
  (VTBL_ENTRY)&_ZN6S276C6D1Ev,
  (VTBL_ENTRY)&_ZN6S276C6D0Ev,
  (VTBL_ENTRY)&_ZN6S276C62v7Ev,
  (VTBL_ENTRY)&_ZN6S276C62v8Ev,
  (VTBL_ENTRY)&_ZN6S276C62v9Ev,
  (VTBL_ENTRY)&_ZN6S276C63v10Ev,
  (VTBL_ENTRY)&_ZN6S276C63v11Ev,
  (VTBL_ENTRY)&_ZN6S276C63v12Ev,
  (VTBL_ENTRY)&_ZN6S276C63v13Ev,
  (VTBL_ENTRY)&_ZN6S276C63v14Ev,
  (VTBL_ENTRY)&_ZN6S276C63v15Ev,
  (VTBL_ENTRY)&_ZN6S276C63v16Ev,
  (VTBL_ENTRY)&_ZN6S276C63v17Ev,
  (VTBL_ENTRY)&_ZN6S276C63v18Ev,
  (VTBL_ENTRY)&_ZN6S276C63v19Ev,
  (VTBL_ENTRY)&_ZN6S276C63v20Ev,
  (VTBL_ENTRY)&_ZN6S276C63v21Ev,
  (VTBL_ENTRY)&_ZN6S276C63v22Ev,
  (VTBL_ENTRY)&_ZN6S276C63v23Ev,
  (VTBL_ENTRY)&_ZN6S276C63v24Ev,
  (VTBL_ENTRY)&_ZN6S276C63v25Ev,
  (VTBL_ENTRY)&_ZN6S276C63v26Ev,
  (VTBL_ENTRY)&_ZN6S276C63v27Ev,
  (VTBL_ENTRY)&_ZN6S276C63v28Ev,
  (VTBL_ENTRY)&_ZN6S276C63v29Ev,
  (VTBL_ENTRY)&_ZN6S276C63v30Ev,
  (VTBL_ENTRY)&_ZN6S276C63v31Ev,
  (VTBL_ENTRY)&_ZN6S276C63v32Ev,
  (VTBL_ENTRY)&_ZN6S276C63v33Ev,
  (VTBL_ENTRY)&_ZN6S276C63v34Ev,
  (VTBL_ENTRY)&_ZN6S276C63v35Ev,
  (VTBL_ENTRY)&_ZN6S276C63v36Ev,
  (VTBL_ENTRY)&_ZN6S276C63v37Ev,
  (VTBL_ENTRY)&_ZN6S276C63v38Ev,
  (VTBL_ENTRY)&_ZN6S276C63v39Ev,
  (VTBL_ENTRY)&_ZN6S276C63v40Ev,
  (VTBL_ENTRY)&_ZN6S276C63v41Ev,
  (VTBL_ENTRY)&_ZN6S276C63v42Ev,
  (VTBL_ENTRY)&_ZN6S276C63v43Ev,
  (VTBL_ENTRY)&_ZN6S276C63v44Ev,
  (VTBL_ENTRY)&_ZN6S276C63v45Ev,
  (VTBL_ENTRY)&_ZN6S276C63v46Ev,
  (VTBL_ENTRY)&_ZN6S276C63v47Ev,
  (VTBL_ENTRY)&_ZN6S276C63v48Ev,
  (VTBL_ENTRY)&_ZN6S276C63v49Ev,
  (VTBL_ENTRY)&_ZN6S276C63v50Ev,
  (VTBL_ENTRY)&_ZN6S276C63v51Ev,
  (VTBL_ENTRY)&_ZN6S276C63v52Ev,
  (VTBL_ENTRY)&_ZN6S276C63v53Ev,
  (VTBL_ENTRY)&_ZN6S276C63v54Ev,
  (VTBL_ENTRY)&_ZN6S276C63v55Ev,
  (VTBL_ENTRY)&_ZN6S276C63v56Ev,
  (VTBL_ENTRY)&_ZN6S276C63v57Ev,
  (VTBL_ENTRY)&_ZN6S276C63v58Ev,
  (VTBL_ENTRY)&_ZN6S276C63v59Ev,
  (VTBL_ENTRY)&_ZN6S276C63v60Ev,
  (VTBL_ENTRY)&_ZN6S276C63v61Ev,
  (VTBL_ENTRY)&_ZN6S276C63v62Ev,
  (VTBL_ENTRY)&_ZN6S276C63v63Ev,
  (VTBL_ENTRY)&_ZN6S276C63v64Ev,
  (VTBL_ENTRY)&_ZN6S276C63v65Ev,
  (VTBL_ENTRY)&_ZN6S276C63v66Ev,
  (VTBL_ENTRY)&_ZN6S276C63v67Ev,
  (VTBL_ENTRY)&_ZN6S276C63v68Ev,
  (VTBL_ENTRY)&_ZN6S276C63v69Ev,
  (VTBL_ENTRY)&_ZN6S276C63v70Ev,
};
extern VTBL_ENTRY _ZTI6S276C6[];
extern  VTBL_ENTRY _ZTV6S276C6[];
Class_Descriptor cd_S276C6 = {  "S276C6", // class name
  0,0,//no base classes
  &(vtc_S276C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S276C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S276C6),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  S276C5  : S276C6 {
  int s276c5f0[2];
  void *s276c5f1;
  int s276c5f2[2];
  ::S239C8_nt s276c5f3;
  ::S239C8_nt s276c5f4;
  ::S239C12_nt s276c5f5;
  ::S239C8_nt s276c5f6;
  unsigned int s276c5f7:1;
  unsigned int s276c5f8:1;
  unsigned int s276c5f9:1;
  unsigned int s276c5f10:1;
  unsigned int s276c5f11:1;
  int s276c5f12[2];
  virtual  ~S276C5(); // _ZN6S276C5D1Ev
  virtual void  v71(); // _ZN6S276C53v71Ev
  virtual void  v72(); // _ZN6S276C53v72Ev
  virtual void  v73(); // _ZN6S276C53v73Ev
  virtual void  v74(); // _ZN6S276C53v74Ev
  virtual void  v75(); // _ZN6S276C53v75Ev
  virtual void  v76(); // _ZN6S276C53v76Ev
  virtual void  v77(); // _ZN6S276C53v77Ev
  virtual void  v78(); // _ZN6S276C53v78Ev
  virtual void  v79(); // _ZN6S276C53v79Ev
  virtual void  v80(); // _ZN6S276C53v80Ev
  virtual void  v81(); // _ZN6S276C53v81Ev
  virtual void  v82(); // _ZN6S276C53v82Ev
  virtual void  v83(); // _ZN6S276C53v83Ev
  virtual void  v84(); // _ZN6S276C53v84Ev
  virtual void  v85(); // _ZN6S276C53v85Ev
  virtual void  v86(); // _ZN6S276C53v86Ev
  virtual void  v87(); // _ZN6S276C53v87Ev
  virtual void  v88(); // _ZN6S276C53v88Ev
  virtual void  v89(); // _ZN6S276C53v89Ev
  virtual void  v90(); // _ZN6S276C53v90Ev
  virtual void  v91(); // _ZN6S276C53v91Ev
  virtual void  v92(); // _ZN6S276C53v92Ev
  S276C5(); // tgen
};
//SIG(-1 S276C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S276C5 ::~S276C5(){ note_dtor("S276C5", this);}
void  S276C5 ::v71(){vfunc_called(this, "_ZN6S276C53v71Ev");}
void  S276C5 ::v72(){vfunc_called(this, "_ZN6S276C53v72Ev");}
void  S276C5 ::v73(){vfunc_called(this, "_ZN6S276C53v73Ev");}
void  S276C5 ::v74(){vfunc_called(this, "_ZN6S276C53v74Ev");}
void  S276C5 ::v75(){vfunc_called(this, "_ZN6S276C53v75Ev");}
void  S276C5 ::v76(){vfunc_called(this, "_ZN6S276C53v76Ev");}
void  S276C5 ::v77(){vfunc_called(this, "_ZN6S276C53v77Ev");}
void  S276C5 ::v78(){vfunc_called(this, "_ZN6S276C53v78Ev");}
void  S276C5 ::v79(){vfunc_called(this, "_ZN6S276C53v79Ev");}
void  S276C5 ::v80(){vfunc_called(this, "_ZN6S276C53v80Ev");}
void  S276C5 ::v81(){vfunc_called(this, "_ZN6S276C53v81Ev");}
void  S276C5 ::v82(){vfunc_called(this, "_ZN6S276C53v82Ev");}
void  S276C5 ::v83(){vfunc_called(this, "_ZN6S276C53v83Ev");}
void  S276C5 ::v84(){vfunc_called(this, "_ZN6S276C53v84Ev");}
void  S276C5 ::v85(){vfunc_called(this, "_ZN6S276C53v85Ev");}
void  S276C5 ::v86(){vfunc_called(this, "_ZN6S276C53v86Ev");}
void  S276C5 ::v87(){vfunc_called(this, "_ZN6S276C53v87Ev");}
void  S276C5 ::v88(){vfunc_called(this, "_ZN6S276C53v88Ev");}
void  S276C5 ::v89(){vfunc_called(this, "_ZN6S276C53v89Ev");}
void  S276C5 ::v90(){vfunc_called(this, "_ZN6S276C53v90Ev");}
void  S276C5 ::v91(){vfunc_called(this, "_ZN6S276C53v91Ev");}
void  S276C5 ::v92(){vfunc_called(this, "_ZN6S276C53v92Ev");}
S276C5 ::S276C5(){ note_ctor("S276C5", this);} // tgen

static void Test_S276C5()
{
  extern Class_Descriptor cd_S276C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S276C5, buf);
    S276C5 *dp, &lv = *(dp=new (buf) S276C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S276C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S276C5)");
    check_base_class_offset(lv, (S276C6*), 0, "S276C5");
    check_field_offset(lv, s276c5f0, ABISELECT(96,60), "S276C5.s276c5f0");
    check_field_offset(lv, s276c5f1, ABISELECT(104,68), "S276C5.s276c5f1");
    check_field_offset(lv, s276c5f2, ABISELECT(112,72), "S276C5.s276c5f2");
    check_field_offset(lv, s276c5f3, ABISELECT(120,80), "S276C5.s276c5f3");
    check_field_offset(lv, s276c5f4, ABISELECT(136,92), "S276C5.s276c5f4");
    check_field_offset(lv, s276c5f5, ABISELECT(152,104), "S276C5.s276c5f5");
    check_field_offset(lv, s276c5f6, ABISELECT(160,108), "S276C5.s276c5f6");
    set_bf_and_test(lv, s276c5f7, ABISELECT(176,120), 0, 1, 1, "S276C5");
    set_bf_and_test(lv, s276c5f8, ABISELECT(176,120), 1, 1, 1, "S276C5");
    set_bf_and_test(lv, s276c5f9, ABISELECT(176,120), 2, 1, 1, "S276C5");
    set_bf_and_test(lv, s276c5f10, ABISELECT(176,120), 3, 1, 1, "S276C5");
    set_bf_and_test(lv, s276c5f11, ABISELECT(176,120), 4, 1, 1, "S276C5");
    check_field_offset(lv, s276c5f12, ABISELECT(180,124), "S276C5.s276c5f12");
    test_class_info(&lv, &cd_S276C5);
    dp->~S276C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS276C5(Test_S276C5, "S276C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S276C5C1Ev();
extern void _ZN6S276C5D1Ev();
Name_Map name_map_S276C5[] = {
  NSPAIR(_ZN6S276C5C1Ev),
  NSPAIR(_ZN6S276C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S276C6;
extern VTBL_ENTRY _ZTI6S276C6[];
extern  VTBL_ENTRY _ZTV6S276C6[];
static Base_Class bases_S276C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S276C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S276C5[];
extern void _ZN6S276C5D1Ev();
extern void _ZN6S276C5D0Ev();
extern void _ZN6S276C62v7Ev();
extern void _ZN6S276C62v8Ev();
extern void _ZN6S276C62v9Ev();
extern void _ZN6S276C63v10Ev();
extern void _ZN6S276C63v11Ev();
extern void _ZN6S276C63v12Ev();
extern void _ZN6S276C63v13Ev();
extern void _ZN6S276C63v14Ev();
extern void _ZN6S276C63v15Ev();
extern void _ZN6S276C63v16Ev();
extern void _ZN6S276C63v17Ev();
extern void _ZN6S276C63v18Ev();
extern void _ZN6S276C63v19Ev();
extern void _ZN6S276C63v20Ev();
extern void _ZN6S276C63v21Ev();
extern void _ZN6S276C63v22Ev();
extern void _ZN6S276C63v23Ev();
extern void _ZN6S276C63v24Ev();
extern void _ZN6S276C63v25Ev();
extern void _ZN6S276C63v26Ev();
extern void _ZN6S276C63v27Ev();
extern void _ZN6S276C63v28Ev();
extern void _ZN6S276C63v29Ev();
extern void _ZN6S276C63v30Ev();
extern void _ZN6S276C63v31Ev();
extern void _ZN6S276C63v32Ev();
extern void _ZN6S276C63v33Ev();
extern void _ZN6S276C63v34Ev();
extern void _ZN6S276C63v35Ev();
extern void _ZN6S276C63v36Ev();
extern void _ZN6S276C63v37Ev();
extern void _ZN6S276C63v38Ev();
extern void _ZN6S276C63v39Ev();
extern void _ZN6S276C63v40Ev();
extern void _ZN6S276C63v41Ev();
extern void _ZN6S276C63v42Ev();
extern void _ZN6S276C63v43Ev();
extern void _ZN6S276C63v44Ev();
extern void _ZN6S276C63v45Ev();
extern void _ZN6S276C63v46Ev();
extern void _ZN6S276C63v47Ev();
extern void _ZN6S276C63v48Ev();
extern void _ZN6S276C63v49Ev();
extern void _ZN6S276C63v50Ev();
extern void _ZN6S276C63v51Ev();
extern void _ZN6S276C63v52Ev();
extern void _ZN6S276C63v53Ev();
extern void _ZN6S276C63v54Ev();
extern void _ZN6S276C63v55Ev();
extern void _ZN6S276C63v56Ev();
extern void _ZN6S276C63v57Ev();
extern void _ZN6S276C63v58Ev();
extern void _ZN6S276C63v59Ev();
extern void _ZN6S276C63v60Ev();
extern void _ZN6S276C63v61Ev();
extern void _ZN6S276C63v62Ev();
extern void _ZN6S276C63v63Ev();
extern void _ZN6S276C63v64Ev();
extern void _ZN6S276C63v65Ev();
extern void _ZN6S276C63v66Ev();
extern void _ZN6S276C63v67Ev();
extern void _ZN6S276C63v68Ev();
extern void _ZN6S276C63v69Ev();
extern void _ZN6S276C63v70Ev();
extern void _ZN6S276C53v71Ev();
extern void _ZN6S276C53v72Ev();
extern void _ZN6S276C53v73Ev();
extern void _ZN6S276C53v74Ev();
extern void _ZN6S276C53v75Ev();
extern void _ZN6S276C53v76Ev();
extern void _ZN6S276C53v77Ev();
extern void _ZN6S276C53v78Ev();
extern void _ZN6S276C53v79Ev();
extern void _ZN6S276C53v80Ev();
extern void _ZN6S276C53v81Ev();
extern void _ZN6S276C53v82Ev();
extern void _ZN6S276C53v83Ev();
extern void _ZN6S276C53v84Ev();
extern void _ZN6S276C53v85Ev();
extern void _ZN6S276C53v86Ev();
extern void _ZN6S276C53v87Ev();
extern void _ZN6S276C53v88Ev();
extern void _ZN6S276C53v89Ev();
extern void _ZN6S276C53v90Ev();
extern void _ZN6S276C53v91Ev();
extern void _ZN6S276C53v92Ev();
static  VTBL_ENTRY vtc_S276C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S276C5[0]),
  (VTBL_ENTRY)&_ZN6S276C5D1Ev,
  (VTBL_ENTRY)&_ZN6S276C5D0Ev,
  (VTBL_ENTRY)&_ZN6S276C62v7Ev,
  (VTBL_ENTRY)&_ZN6S276C62v8Ev,
  (VTBL_ENTRY)&_ZN6S276C62v9Ev,
  (VTBL_ENTRY)&_ZN6S276C63v10Ev,
  (VTBL_ENTRY)&_ZN6S276C63v11Ev,
  (VTBL_ENTRY)&_ZN6S276C63v12Ev,
  (VTBL_ENTRY)&_ZN6S276C63v13Ev,
  (VTBL_ENTRY)&_ZN6S276C63v14Ev,
  (VTBL_ENTRY)&_ZN6S276C63v15Ev,
  (VTBL_ENTRY)&_ZN6S276C63v16Ev,
  (VTBL_ENTRY)&_ZN6S276C63v17Ev,
  (VTBL_ENTRY)&_ZN6S276C63v18Ev,
  (VTBL_ENTRY)&_ZN6S276C63v19Ev,
  (VTBL_ENTRY)&_ZN6S276C63v20Ev,
  (VTBL_ENTRY)&_ZN6S276C63v21Ev,
  (VTBL_ENTRY)&_ZN6S276C63v22Ev,
  (VTBL_ENTRY)&_ZN6S276C63v23Ev,
  (VTBL_ENTRY)&_ZN6S276C63v24Ev,
  (VTBL_ENTRY)&_ZN6S276C63v25Ev,
  (VTBL_ENTRY)&_ZN6S276C63v26Ev,
  (VTBL_ENTRY)&_ZN6S276C63v27Ev,
  (VTBL_ENTRY)&_ZN6S276C63v28Ev,
  (VTBL_ENTRY)&_ZN6S276C63v29Ev,
  (VTBL_ENTRY)&_ZN6S276C63v30Ev,
  (VTBL_ENTRY)&_ZN6S276C63v31Ev,
  (VTBL_ENTRY)&_ZN6S276C63v32Ev,
  (VTBL_ENTRY)&_ZN6S276C63v33Ev,
  (VTBL_ENTRY)&_ZN6S276C63v34Ev,
  (VTBL_ENTRY)&_ZN6S276C63v35Ev,
  (VTBL_ENTRY)&_ZN6S276C63v36Ev,
  (VTBL_ENTRY)&_ZN6S276C63v37Ev,
  (VTBL_ENTRY)&_ZN6S276C63v38Ev,
  (VTBL_ENTRY)&_ZN6S276C63v39Ev,
  (VTBL_ENTRY)&_ZN6S276C63v40Ev,
  (VTBL_ENTRY)&_ZN6S276C63v41Ev,
  (VTBL_ENTRY)&_ZN6S276C63v42Ev,
  (VTBL_ENTRY)&_ZN6S276C63v43Ev,
  (VTBL_ENTRY)&_ZN6S276C63v44Ev,
  (VTBL_ENTRY)&_ZN6S276C63v45Ev,
  (VTBL_ENTRY)&_ZN6S276C63v46Ev,
  (VTBL_ENTRY)&_ZN6S276C63v47Ev,
  (VTBL_ENTRY)&_ZN6S276C63v48Ev,
  (VTBL_ENTRY)&_ZN6S276C63v49Ev,
  (VTBL_ENTRY)&_ZN6S276C63v50Ev,
  (VTBL_ENTRY)&_ZN6S276C63v51Ev,
  (VTBL_ENTRY)&_ZN6S276C63v52Ev,
  (VTBL_ENTRY)&_ZN6S276C63v53Ev,
  (VTBL_ENTRY)&_ZN6S276C63v54Ev,
  (VTBL_ENTRY)&_ZN6S276C63v55Ev,
  (VTBL_ENTRY)&_ZN6S276C63v56Ev,
  (VTBL_ENTRY)&_ZN6S276C63v57Ev,
  (VTBL_ENTRY)&_ZN6S276C63v58Ev,
  (VTBL_ENTRY)&_ZN6S276C63v59Ev,
  (VTBL_ENTRY)&_ZN6S276C63v60Ev,
  (VTBL_ENTRY)&_ZN6S276C63v61Ev,
  (VTBL_ENTRY)&_ZN6S276C63v62Ev,
  (VTBL_ENTRY)&_ZN6S276C63v63Ev,
  (VTBL_ENTRY)&_ZN6S276C63v64Ev,
  (VTBL_ENTRY)&_ZN6S276C63v65Ev,
  (VTBL_ENTRY)&_ZN6S276C63v66Ev,
  (VTBL_ENTRY)&_ZN6S276C63v67Ev,
  (VTBL_ENTRY)&_ZN6S276C63v68Ev,
  (VTBL_ENTRY)&_ZN6S276C63v69Ev,
  (VTBL_ENTRY)&_ZN6S276C63v70Ev,
  (VTBL_ENTRY)&_ZN6S276C53v71Ev,
  (VTBL_ENTRY)&_ZN6S276C53v72Ev,
  (VTBL_ENTRY)&_ZN6S276C53v73Ev,
  (VTBL_ENTRY)&_ZN6S276C53v74Ev,
  (VTBL_ENTRY)&_ZN6S276C53v75Ev,
  (VTBL_ENTRY)&_ZN6S276C53v76Ev,
  (VTBL_ENTRY)&_ZN6S276C53v77Ev,
  (VTBL_ENTRY)&_ZN6S276C53v78Ev,
  (VTBL_ENTRY)&_ZN6S276C53v79Ev,
  (VTBL_ENTRY)&_ZN6S276C53v80Ev,
  (VTBL_ENTRY)&_ZN6S276C53v81Ev,
  (VTBL_ENTRY)&_ZN6S276C53v82Ev,
  (VTBL_ENTRY)&_ZN6S276C53v83Ev,
  (VTBL_ENTRY)&_ZN6S276C53v84Ev,
  (VTBL_ENTRY)&_ZN6S276C53v85Ev,
  (VTBL_ENTRY)&_ZN6S276C53v86Ev,
  (VTBL_ENTRY)&_ZN6S276C53v87Ev,
  (VTBL_ENTRY)&_ZN6S276C53v88Ev,
  (VTBL_ENTRY)&_ZN6S276C53v89Ev,
  (VTBL_ENTRY)&_ZN6S276C53v90Ev,
  (VTBL_ENTRY)&_ZN6S276C53v91Ev,
  (VTBL_ENTRY)&_ZN6S276C53v92Ev,
};
extern VTBL_ENTRY _ZTI6S276C5[];
extern  VTBL_ENTRY _ZTV6S276C5[];
Class_Descriptor cd_S276C5 = {  "S276C5", // class name
  bases_S276C5, 1,
  &(vtc_S276C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S276C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S276C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S276C4  : S276C5 {
  unsigned int s276c4f0:1;
  unsigned int s276c4f1:1;
  unsigned int s276c4f2:1;
  ::S3221C17 s276c4f3;
  ::S3221C11 s276c4f4;
  ::S3221C5_nt s276c4f5;
  ::S3168C19 s276c4f6;
  int s276c4f7[3];
  virtual  ~S276C4(); // _ZN6S276C4D1Ev
  virtual void  v93(); // _ZN6S276C43v93Ev
  virtual void  v94(); // _ZN6S276C43v94Ev
  virtual void  v95(); // _ZN6S276C43v95Ev
  virtual void  v96(); // _ZN6S276C43v96Ev
  virtual void  v97(); // _ZN6S276C43v97Ev
  virtual void  v98(); // _ZN6S276C43v98Ev
  virtual void  v99(); // _ZN6S276C43v99Ev
  virtual void  v100(); // _ZN6S276C44v100Ev
  virtual void  v101(); // _ZN6S276C44v101Ev
  virtual void  v102(); // _ZN6S276C44v102Ev
  virtual void  v103(); // _ZN6S276C44v103Ev
  virtual void  v104(); // _ZN6S276C44v104Ev
  virtual void  v105(); // _ZN6S276C44v105Ev
  virtual void  v106(); // _ZN6S276C44v106Ev
  virtual void  v107(); // _ZN6S276C44v107Ev
  virtual void  v108(); // _ZN6S276C44v108Ev
  virtual void  v109(); // _ZN6S276C44v109Ev
  virtual void  v110(); // _ZN6S276C44v110Ev
  virtual void  v111(); // _ZN6S276C44v111Ev
  virtual void  v112(); // _ZN6S276C44v112Ev
  S276C4(); // tgen
};
//SIG(-1 S276C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S276C4 ::~S276C4(){ note_dtor("S276C4", this);}
void  S276C4 ::v93(){vfunc_called(this, "_ZN6S276C43v93Ev");}
void  S276C4 ::v94(){vfunc_called(this, "_ZN6S276C43v94Ev");}
void  S276C4 ::v95(){vfunc_called(this, "_ZN6S276C43v95Ev");}
void  S276C4 ::v96(){vfunc_called(this, "_ZN6S276C43v96Ev");}
void  S276C4 ::v97(){vfunc_called(this, "_ZN6S276C43v97Ev");}
void  S276C4 ::v98(){vfunc_called(this, "_ZN6S276C43v98Ev");}
void  S276C4 ::v99(){vfunc_called(this, "_ZN6S276C43v99Ev");}
void  S276C4 ::v100(){vfunc_called(this, "_ZN6S276C44v100Ev");}
void  S276C4 ::v101(){vfunc_called(this, "_ZN6S276C44v101Ev");}
void  S276C4 ::v102(){vfunc_called(this, "_ZN6S276C44v102Ev");}
void  S276C4 ::v103(){vfunc_called(this, "_ZN6S276C44v103Ev");}
void  S276C4 ::v104(){vfunc_called(this, "_ZN6S276C44v104Ev");}
void  S276C4 ::v105(){vfunc_called(this, "_ZN6S276C44v105Ev");}
void  S276C4 ::v106(){vfunc_called(this, "_ZN6S276C44v106Ev");}
void  S276C4 ::v107(){vfunc_called(this, "_ZN6S276C44v107Ev");}
void  S276C4 ::v108(){vfunc_called(this, "_ZN6S276C44v108Ev");}
void  S276C4 ::v109(){vfunc_called(this, "_ZN6S276C44v109Ev");}
void  S276C4 ::v110(){vfunc_called(this, "_ZN6S276C44v110Ev");}
void  S276C4 ::v111(){vfunc_called(this, "_ZN6S276C44v111Ev");}
void  S276C4 ::v112(){vfunc_called(this, "_ZN6S276C44v112Ev");}
S276C4 ::S276C4(){ note_ctor("S276C4", this);} // tgen

static void Test_S276C4()
{
  extern Class_Descriptor cd_S276C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S276C4, buf);
    S276C4 *dp, &lv = *(dp=new (buf) S276C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S276C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S276C4)");
    check_base_class_offset(lv, (S276C6*)(S276C5*), 0, "S276C4");
    check_base_class_offset(lv, (S276C5*), 0, "S276C4");
    set_bf_and_test(lv, s276c4f0, ABISELECT(188,132), 0, 1, 1, "S276C4");
    set_bf_and_test(lv, s276c4f1, ABISELECT(188,132), 1, 1, 1, "S276C4");
    set_bf_and_test(lv, s276c4f2, ABISELECT(188,132), 2, 1, 1, "S276C4");
    check_field_offset(lv, s276c4f3, ABISELECT(192,136), "S276C4.s276c4f3");
    check_field_offset(lv, s276c4f4, ABISELECT(208,148), "S276C4.s276c4f4");
    check_field_offset(lv, s276c4f5, ABISELECT(224,160), "S276C4.s276c4f5");
    check_field_offset(lv, s276c4f6, ABISELECT(240,172), "S276C4.s276c4f6");
    check_field_offset(lv, s276c4f7, ABISELECT(256,184), "S276C4.s276c4f7");
    test_class_info(&lv, &cd_S276C4);
    dp->~S276C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS276C4(Test_S276C4, "S276C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S276C4C1Ev();
extern void _ZN6S276C4D1Ev();
Name_Map name_map_S276C4[] = {
  NSPAIR(_ZN6S276C4C1Ev),
  NSPAIR(_ZN6S276C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S276C6;
extern VTBL_ENTRY _ZTI6S276C6[];
extern  VTBL_ENTRY _ZTV6S276C6[];
extern Class_Descriptor cd_S276C5;
extern VTBL_ENTRY _ZTI6S276C5[];
extern  VTBL_ENTRY _ZTV6S276C5[];
static Base_Class bases_S276C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S276C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S276C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S276C4[];
extern void _ZN6S276C4D1Ev();
extern void _ZN6S276C4D0Ev();
extern void _ZN6S276C62v7Ev();
extern void _ZN6S276C62v8Ev();
extern void _ZN6S276C62v9Ev();
extern void _ZN6S276C63v10Ev();
extern void _ZN6S276C63v11Ev();
extern void _ZN6S276C63v12Ev();
extern void _ZN6S276C63v13Ev();
extern void _ZN6S276C63v14Ev();
extern void _ZN6S276C63v15Ev();
extern void _ZN6S276C63v16Ev();
extern void _ZN6S276C63v17Ev();
extern void _ZN6S276C63v18Ev();
extern void _ZN6S276C63v19Ev();
extern void _ZN6S276C63v20Ev();
extern void _ZN6S276C63v21Ev();
extern void _ZN6S276C63v22Ev();
extern void _ZN6S276C63v23Ev();
extern void _ZN6S276C63v24Ev();
extern void _ZN6S276C63v25Ev();
extern void _ZN6S276C63v26Ev();
extern void _ZN6S276C63v27Ev();
extern void _ZN6S276C63v28Ev();
extern void _ZN6S276C63v29Ev();
extern void _ZN6S276C63v30Ev();
extern void _ZN6S276C63v31Ev();
extern void _ZN6S276C63v32Ev();
extern void _ZN6S276C63v33Ev();
extern void _ZN6S276C63v34Ev();
extern void _ZN6S276C63v35Ev();
extern void _ZN6S276C63v36Ev();
extern void _ZN6S276C63v37Ev();
extern void _ZN6S276C63v38Ev();
extern void _ZN6S276C63v39Ev();
extern void _ZN6S276C63v40Ev();
extern void _ZN6S276C63v41Ev();
extern void _ZN6S276C63v42Ev();
extern void _ZN6S276C63v43Ev();
extern void _ZN6S276C63v44Ev();
extern void _ZN6S276C63v45Ev();
extern void _ZN6S276C63v46Ev();
extern void _ZN6S276C63v47Ev();
extern void _ZN6S276C63v48Ev();
extern void _ZN6S276C63v49Ev();
extern void _ZN6S276C63v50Ev();
extern void _ZN6S276C63v51Ev();
extern void _ZN6S276C63v52Ev();
extern void _ZN6S276C63v53Ev();
extern void _ZN6S276C63v54Ev();
extern void _ZN6S276C63v55Ev();
extern void _ZN6S276C63v56Ev();
extern void _ZN6S276C63v57Ev();
extern void _ZN6S276C63v58Ev();
extern void _ZN6S276C63v59Ev();
extern void _ZN6S276C63v60Ev();
extern void _ZN6S276C63v61Ev();
extern void _ZN6S276C63v62Ev();
extern void _ZN6S276C63v63Ev();
extern void _ZN6S276C63v64Ev();
extern void _ZN6S276C63v65Ev();
extern void _ZN6S276C63v66Ev();
extern void _ZN6S276C63v67Ev();
extern void _ZN6S276C63v68Ev();
extern void _ZN6S276C63v69Ev();
extern void _ZN6S276C63v70Ev();
extern void _ZN6S276C53v71Ev();
extern void _ZN6S276C53v72Ev();
extern void _ZN6S276C53v73Ev();
extern void _ZN6S276C53v74Ev();
extern void _ZN6S276C53v75Ev();
extern void _ZN6S276C53v76Ev();
extern void _ZN6S276C53v77Ev();
extern void _ZN6S276C53v78Ev();
extern void _ZN6S276C53v79Ev();
extern void _ZN6S276C53v80Ev();
extern void _ZN6S276C53v81Ev();
extern void _ZN6S276C53v82Ev();
extern void _ZN6S276C53v83Ev();
extern void _ZN6S276C53v84Ev();
extern void _ZN6S276C53v85Ev();
extern void _ZN6S276C53v86Ev();
extern void _ZN6S276C53v87Ev();
extern void _ZN6S276C53v88Ev();
extern void _ZN6S276C53v89Ev();
extern void _ZN6S276C53v90Ev();
extern void _ZN6S276C53v91Ev();
extern void _ZN6S276C53v92Ev();
extern void _ZN6S276C43v93Ev();
extern void _ZN6S276C43v94Ev();
extern void _ZN6S276C43v95Ev();
extern void _ZN6S276C43v96Ev();
extern void _ZN6S276C43v97Ev();
extern void _ZN6S276C43v98Ev();
extern void _ZN6S276C43v99Ev();
extern void _ZN6S276C44v100Ev();
extern void _ZN6S276C44v101Ev();
extern void _ZN6S276C44v102Ev();
extern void _ZN6S276C44v103Ev();
extern void _ZN6S276C44v104Ev();
extern void _ZN6S276C44v105Ev();
extern void _ZN6S276C44v106Ev();
extern void _ZN6S276C44v107Ev();
extern void _ZN6S276C44v108Ev();
extern void _ZN6S276C44v109Ev();
extern void _ZN6S276C44v110Ev();
extern void _ZN6S276C44v111Ev();
extern void _ZN6S276C44v112Ev();
static  VTBL_ENTRY vtc_S276C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S276C4[0]),
  (VTBL_ENTRY)&_ZN6S276C4D1Ev,
  (VTBL_ENTRY)&_ZN6S276C4D0Ev,
  (VTBL_ENTRY)&_ZN6S276C62v7Ev,
  (VTBL_ENTRY)&_ZN6S276C62v8Ev,
  (VTBL_ENTRY)&_ZN6S276C62v9Ev,
  (VTBL_ENTRY)&_ZN6S276C63v10Ev,
  (VTBL_ENTRY)&_ZN6S276C63v11Ev,
  (VTBL_ENTRY)&_ZN6S276C63v12Ev,
  (VTBL_ENTRY)&_ZN6S276C63v13Ev,
  (VTBL_ENTRY)&_ZN6S276C63v14Ev,
  (VTBL_ENTRY)&_ZN6S276C63v15Ev,
  (VTBL_ENTRY)&_ZN6S276C63v16Ev,
  (VTBL_ENTRY)&_ZN6S276C63v17Ev,
  (VTBL_ENTRY)&_ZN6S276C63v18Ev,
  (VTBL_ENTRY)&_ZN6S276C63v19Ev,
  (VTBL_ENTRY)&_ZN6S276C63v20Ev,
  (VTBL_ENTRY)&_ZN6S276C63v21Ev,
  (VTBL_ENTRY)&_ZN6S276C63v22Ev,
  (VTBL_ENTRY)&_ZN6S276C63v23Ev,
  (VTBL_ENTRY)&_ZN6S276C63v24Ev,
  (VTBL_ENTRY)&_ZN6S276C63v25Ev,
  (VTBL_ENTRY)&_ZN6S276C63v26Ev,
  (VTBL_ENTRY)&_ZN6S276C63v27Ev,
  (VTBL_ENTRY)&_ZN6S276C63v28Ev,
  (VTBL_ENTRY)&_ZN6S276C63v29Ev,
  (VTBL_ENTRY)&_ZN6S276C63v30Ev,
  (VTBL_ENTRY)&_ZN6S276C63v31Ev,
  (VTBL_ENTRY)&_ZN6S276C63v32Ev,
  (VTBL_ENTRY)&_ZN6S276C63v33Ev,
  (VTBL_ENTRY)&_ZN6S276C63v34Ev,
  (VTBL_ENTRY)&_ZN6S276C63v35Ev,
  (VTBL_ENTRY)&_ZN6S276C63v36Ev,
  (VTBL_ENTRY)&_ZN6S276C63v37Ev,
  (VTBL_ENTRY)&_ZN6S276C63v38Ev,
  (VTBL_ENTRY)&_ZN6S276C63v39Ev,
  (VTBL_ENTRY)&_ZN6S276C63v40Ev,
  (VTBL_ENTRY)&_ZN6S276C63v41Ev,
  (VTBL_ENTRY)&_ZN6S276C63v42Ev,
  (VTBL_ENTRY)&_ZN6S276C63v43Ev,
  (VTBL_ENTRY)&_ZN6S276C63v44Ev,
  (VTBL_ENTRY)&_ZN6S276C63v45Ev,
  (VTBL_ENTRY)&_ZN6S276C63v46Ev,
  (VTBL_ENTRY)&_ZN6S276C63v47Ev,
  (VTBL_ENTRY)&_ZN6S276C63v48Ev,
  (VTBL_ENTRY)&_ZN6S276C63v49Ev,
  (VTBL_ENTRY)&_ZN6S276C63v50Ev,
  (VTBL_ENTRY)&_ZN6S276C63v51Ev,
  (VTBL_ENTRY)&_ZN6S276C63v52Ev,
  (VTBL_ENTRY)&_ZN6S276C63v53Ev,
  (VTBL_ENTRY)&_ZN6S276C63v54Ev,
  (VTBL_ENTRY)&_ZN6S276C63v55Ev,
  (VTBL_ENTRY)&_ZN6S276C63v56Ev,
  (VTBL_ENTRY)&_ZN6S276C63v57Ev,
  (VTBL_ENTRY)&_ZN6S276C63v58Ev,
  (VTBL_ENTRY)&_ZN6S276C63v59Ev,
  (VTBL_ENTRY)&_ZN6S276C63v60Ev,
  (VTBL_ENTRY)&_ZN6S276C63v61Ev,
  (VTBL_ENTRY)&_ZN6S276C63v62Ev,
  (VTBL_ENTRY)&_ZN6S276C63v63Ev,
  (VTBL_ENTRY)&_ZN6S276C63v64Ev,
  (VTBL_ENTRY)&_ZN6S276C63v65Ev,
  (VTBL_ENTRY)&_ZN6S276C63v66Ev,
  (VTBL_ENTRY)&_ZN6S276C63v67Ev,
  (VTBL_ENTRY)&_ZN6S276C63v68Ev,
  (VTBL_ENTRY)&_ZN6S276C63v69Ev,
  (VTBL_ENTRY)&_ZN6S276C63v70Ev,
  (VTBL_ENTRY)&_ZN6S276C53v71Ev,
  (VTBL_ENTRY)&_ZN6S276C53v72Ev,
  (VTBL_ENTRY)&_ZN6S276C53v73Ev,
  (VTBL_ENTRY)&_ZN6S276C53v74Ev,
  (VTBL_ENTRY)&_ZN6S276C53v75Ev,
  (VTBL_ENTRY)&_ZN6S276C53v76Ev,
  (VTBL_ENTRY)&_ZN6S276C53v77Ev,
  (VTBL_ENTRY)&_ZN6S276C53v78Ev,
  (VTBL_ENTRY)&_ZN6S276C53v79Ev,
  (VTBL_ENTRY)&_ZN6S276C53v80Ev,
  (VTBL_ENTRY)&_ZN6S276C53v81Ev,
  (VTBL_ENTRY)&_ZN6S276C53v82Ev,
  (VTBL_ENTRY)&_ZN6S276C53v83Ev,
  (VTBL_ENTRY)&_ZN6S276C53v84Ev,
  (VTBL_ENTRY)&_ZN6S276C53v85Ev,
  (VTBL_ENTRY)&_ZN6S276C53v86Ev,
  (VTBL_ENTRY)&_ZN6S276C53v87Ev,
  (VTBL_ENTRY)&_ZN6S276C53v88Ev,
  (VTBL_ENTRY)&_ZN6S276C53v89Ev,
  (VTBL_ENTRY)&_ZN6S276C53v90Ev,
  (VTBL_ENTRY)&_ZN6S276C53v91Ev,
  (VTBL_ENTRY)&_ZN6S276C53v92Ev,
  (VTBL_ENTRY)&_ZN6S276C43v93Ev,
  (VTBL_ENTRY)&_ZN6S276C43v94Ev,
  (VTBL_ENTRY)&_ZN6S276C43v95Ev,
  (VTBL_ENTRY)&_ZN6S276C43v96Ev,
  (VTBL_ENTRY)&_ZN6S276C43v97Ev,
  (VTBL_ENTRY)&_ZN6S276C43v98Ev,
  (VTBL_ENTRY)&_ZN6S276C43v99Ev,
  (VTBL_ENTRY)&_ZN6S276C44v100Ev,
  (VTBL_ENTRY)&_ZN6S276C44v101Ev,
  (VTBL_ENTRY)&_ZN6S276C44v102Ev,
  (VTBL_ENTRY)&_ZN6S276C44v103Ev,
  (VTBL_ENTRY)&_ZN6S276C44v104Ev,
  (VTBL_ENTRY)&_ZN6S276C44v105Ev,
  (VTBL_ENTRY)&_ZN6S276C44v106Ev,
  (VTBL_ENTRY)&_ZN6S276C44v107Ev,
  (VTBL_ENTRY)&_ZN6S276C44v108Ev,
  (VTBL_ENTRY)&_ZN6S276C44v109Ev,
  (VTBL_ENTRY)&_ZN6S276C44v110Ev,
  (VTBL_ENTRY)&_ZN6S276C44v111Ev,
  (VTBL_ENTRY)&_ZN6S276C44v112Ev,
};
extern VTBL_ENTRY _ZTI6S276C4[];
extern  VTBL_ENTRY _ZTV6S276C4[];
Class_Descriptor cd_S276C4 = {  "S276C4", // class name
  bases_S276C4, 2,
  &(vtc_S276C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S276C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S276C4),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S276C3 ::~S276C3(){ note_dtor("S276C3", this);}
void  S276C3 ::v113(){vfunc_called(this, "_ZN6S276C34v113Ev");}
void  S276C3 ::v114(){vfunc_called(this, "_ZN6S276C34v114Ev");}
S276C3 ::S276C3(){ note_ctor("S276C3", this);} // tgen

static void Test_S276C3()
{
  extern Class_Descriptor cd_S276C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S276C3, buf);
    S276C3 *dp, &lv = *(dp=new (buf) S276C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S276C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S276C3)");
    check_base_class_offset(lv, (S276C6*)(S276C5*)(S276C4*), 0, "S276C3");
    check_base_class_offset(lv, (S276C5*)(S276C4*), 0, "S276C3");
    check_base_class_offset(lv, (S276C4*), 0, "S276C3");
    test_class_info(&lv, &cd_S276C3);
    dp->~S276C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS276C3(Test_S276C3, "S276C3", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S276C3C1Ev();
extern void _ZN6S276C3D1Ev();
Name_Map name_map_S276C3[] = {
  NSPAIR(_ZN6S276C3C1Ev),
  NSPAIR(_ZN6S276C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S276C6;
extern VTBL_ENTRY _ZTI6S276C6[];
extern  VTBL_ENTRY _ZTV6S276C6[];
extern Class_Descriptor cd_S276C5;
extern VTBL_ENTRY _ZTI6S276C5[];
extern  VTBL_ENTRY _ZTV6S276C5[];
extern Class_Descriptor cd_S276C4;
extern VTBL_ENTRY _ZTI6S276C4[];
extern  VTBL_ENTRY _ZTV6S276C4[];
static Base_Class bases_S276C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S276C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S276C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S276C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S276C3[];
extern void _ZN6S276C3D1Ev();
extern void _ZN6S276C3D0Ev();
extern void _ZN6S276C62v7Ev();
extern void _ZN6S276C62v8Ev();
extern void _ZN6S276C62v9Ev();
extern void _ZN6S276C63v10Ev();
extern void _ZN6S276C63v11Ev();
extern void _ZN6S276C63v12Ev();
extern void _ZN6S276C63v13Ev();
extern void _ZN6S276C63v14Ev();
extern void _ZN6S276C63v15Ev();
extern void _ZN6S276C63v16Ev();
extern void _ZN6S276C63v17Ev();
extern void _ZN6S276C63v18Ev();
extern void _ZN6S276C63v19Ev();
extern void _ZN6S276C63v20Ev();
extern void _ZN6S276C63v21Ev();
extern void _ZN6S276C63v22Ev();
extern void _ZN6S276C63v23Ev();
extern void _ZN6S276C63v24Ev();
extern void _ZN6S276C63v25Ev();
extern void _ZN6S276C63v26Ev();
extern void _ZN6S276C63v27Ev();
extern void _ZN6S276C63v28Ev();
extern void _ZN6S276C63v29Ev();
extern void _ZN6S276C63v30Ev();
extern void _ZN6S276C63v31Ev();
extern void _ZN6S276C63v32Ev();
extern void _ZN6S276C63v33Ev();
extern void _ZN6S276C63v34Ev();
extern void _ZN6S276C63v35Ev();
extern void _ZN6S276C63v36Ev();
extern void _ZN6S276C63v37Ev();
extern void _ZN6S276C63v38Ev();
extern void _ZN6S276C63v39Ev();
extern void _ZN6S276C63v40Ev();
extern void _ZN6S276C63v41Ev();
extern void _ZN6S276C63v42Ev();
extern void _ZN6S276C63v43Ev();
extern void _ZN6S276C63v44Ev();
extern void _ZN6S276C63v45Ev();
extern void _ZN6S276C63v46Ev();
extern void _ZN6S276C63v47Ev();
extern void _ZN6S276C63v48Ev();
extern void _ZN6S276C63v49Ev();
extern void _ZN6S276C63v50Ev();
extern void _ZN6S276C63v51Ev();
extern void _ZN6S276C63v52Ev();
extern void _ZN6S276C63v53Ev();
extern void _ZN6S276C63v54Ev();
extern void _ZN6S276C63v55Ev();
extern void _ZN6S276C63v56Ev();
extern void _ZN6S276C63v57Ev();
extern void _ZN6S276C63v58Ev();
extern void _ZN6S276C63v59Ev();
extern void _ZN6S276C63v60Ev();
extern void _ZN6S276C63v61Ev();
extern void _ZN6S276C63v62Ev();
extern void _ZN6S276C63v63Ev();
extern void _ZN6S276C63v64Ev();
extern void _ZN6S276C63v65Ev();
extern void _ZN6S276C63v66Ev();
extern void _ZN6S276C63v67Ev();
extern void _ZN6S276C63v68Ev();
extern void _ZN6S276C63v69Ev();
extern void _ZN6S276C63v70Ev();
extern void _ZN6S276C53v71Ev();
extern void _ZN6S276C53v72Ev();
extern void _ZN6S276C53v73Ev();
extern void _ZN6S276C53v74Ev();
extern void _ZN6S276C53v75Ev();
extern void _ZN6S276C53v76Ev();
extern void _ZN6S276C53v77Ev();
extern void _ZN6S276C53v78Ev();
extern void _ZN6S276C53v79Ev();
extern void _ZN6S276C53v80Ev();
extern void _ZN6S276C53v81Ev();
extern void _ZN6S276C53v82Ev();
extern void _ZN6S276C53v83Ev();
extern void _ZN6S276C53v84Ev();
extern void _ZN6S276C53v85Ev();
extern void _ZN6S276C53v86Ev();
extern void _ZN6S276C53v87Ev();
extern void _ZN6S276C53v88Ev();
extern void _ZN6S276C53v89Ev();
extern void _ZN6S276C53v90Ev();
extern void _ZN6S276C53v91Ev();
extern void _ZN6S276C53v92Ev();
extern void _ZN6S276C43v93Ev();
extern void _ZN6S276C43v94Ev();
extern void _ZN6S276C43v95Ev();
extern void _ZN6S276C43v96Ev();
extern void _ZN6S276C43v97Ev();
extern void _ZN6S276C43v98Ev();
extern void _ZN6S276C43v99Ev();
extern void _ZN6S276C44v100Ev();
extern void _ZN6S276C44v101Ev();
extern void _ZN6S276C44v102Ev();
extern void _ZN6S276C44v103Ev();
extern void _ZN6S276C44v104Ev();
extern void _ZN6S276C44v105Ev();
extern void _ZN6S276C44v106Ev();
extern void _ZN6S276C44v107Ev();
extern void _ZN6S276C44v108Ev();
extern void _ZN6S276C44v109Ev();
extern void _ZN6S276C44v110Ev();
extern void _ZN6S276C44v111Ev();
extern void _ZN6S276C44v112Ev();
extern void _ZN6S276C34v113Ev();
extern void _ZN6S276C34v114Ev();
static  VTBL_ENTRY vtc_S276C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S276C3[0]),
  (VTBL_ENTRY)&_ZN6S276C3D1Ev,
  (VTBL_ENTRY)&_ZN6S276C3D0Ev,
  (VTBL_ENTRY)&_ZN6S276C62v7Ev,
  (VTBL_ENTRY)&_ZN6S276C62v8Ev,
  (VTBL_ENTRY)&_ZN6S276C62v9Ev,
  (VTBL_ENTRY)&_ZN6S276C63v10Ev,
  (VTBL_ENTRY)&_ZN6S276C63v11Ev,
  (VTBL_ENTRY)&_ZN6S276C63v12Ev,
  (VTBL_ENTRY)&_ZN6S276C63v13Ev,
  (VTBL_ENTRY)&_ZN6S276C63v14Ev,
  (VTBL_ENTRY)&_ZN6S276C63v15Ev,
  (VTBL_ENTRY)&_ZN6S276C63v16Ev,
  (VTBL_ENTRY)&_ZN6S276C63v17Ev,
  (VTBL_ENTRY)&_ZN6S276C63v18Ev,
  (VTBL_ENTRY)&_ZN6S276C63v19Ev,
  (VTBL_ENTRY)&_ZN6S276C63v20Ev,
  (VTBL_ENTRY)&_ZN6S276C63v21Ev,
  (VTBL_ENTRY)&_ZN6S276C63v22Ev,
  (VTBL_ENTRY)&_ZN6S276C63v23Ev,
  (VTBL_ENTRY)&_ZN6S276C63v24Ev,
  (VTBL_ENTRY)&_ZN6S276C63v25Ev,
  (VTBL_ENTRY)&_ZN6S276C63v26Ev,
  (VTBL_ENTRY)&_ZN6S276C63v27Ev,
  (VTBL_ENTRY)&_ZN6S276C63v28Ev,
  (VTBL_ENTRY)&_ZN6S276C63v29Ev,
  (VTBL_ENTRY)&_ZN6S276C63v30Ev,
  (VTBL_ENTRY)&_ZN6S276C63v31Ev,
  (VTBL_ENTRY)&_ZN6S276C63v32Ev,
  (VTBL_ENTRY)&_ZN6S276C63v33Ev,
  (VTBL_ENTRY)&_ZN6S276C63v34Ev,
  (VTBL_ENTRY)&_ZN6S276C63v35Ev,
  (VTBL_ENTRY)&_ZN6S276C63v36Ev,
  (VTBL_ENTRY)&_ZN6S276C63v37Ev,
  (VTBL_ENTRY)&_ZN6S276C63v38Ev,
  (VTBL_ENTRY)&_ZN6S276C63v39Ev,
  (VTBL_ENTRY)&_ZN6S276C63v40Ev,
  (VTBL_ENTRY)&_ZN6S276C63v41Ev,
  (VTBL_ENTRY)&_ZN6S276C63v42Ev,
  (VTBL_ENTRY)&_ZN6S276C63v43Ev,
  (VTBL_ENTRY)&_ZN6S276C63v44Ev,
  (VTBL_ENTRY)&_ZN6S276C63v45Ev,
  (VTBL_ENTRY)&_ZN6S276C63v46Ev,
  (VTBL_ENTRY)&_ZN6S276C63v47Ev,
  (VTBL_ENTRY)&_ZN6S276C63v48Ev,
  (VTBL_ENTRY)&_ZN6S276C63v49Ev,
  (VTBL_ENTRY)&_ZN6S276C63v50Ev,
  (VTBL_ENTRY)&_ZN6S276C63v51Ev,
  (VTBL_ENTRY)&_ZN6S276C63v52Ev,
  (VTBL_ENTRY)&_ZN6S276C63v53Ev,
  (VTBL_ENTRY)&_ZN6S276C63v54Ev,
  (VTBL_ENTRY)&_ZN6S276C63v55Ev,
  (VTBL_ENTRY)&_ZN6S276C63v56Ev,
  (VTBL_ENTRY)&_ZN6S276C63v57Ev,
  (VTBL_ENTRY)&_ZN6S276C63v58Ev,
  (VTBL_ENTRY)&_ZN6S276C63v59Ev,
  (VTBL_ENTRY)&_ZN6S276C63v60Ev,
  (VTBL_ENTRY)&_ZN6S276C63v61Ev,
  (VTBL_ENTRY)&_ZN6S276C63v62Ev,
  (VTBL_ENTRY)&_ZN6S276C63v63Ev,
  (VTBL_ENTRY)&_ZN6S276C63v64Ev,
  (VTBL_ENTRY)&_ZN6S276C63v65Ev,
  (VTBL_ENTRY)&_ZN6S276C63v66Ev,
  (VTBL_ENTRY)&_ZN6S276C63v67Ev,
  (VTBL_ENTRY)&_ZN6S276C63v68Ev,
  (VTBL_ENTRY)&_ZN6S276C63v69Ev,
  (VTBL_ENTRY)&_ZN6S276C63v70Ev,
  (VTBL_ENTRY)&_ZN6S276C53v71Ev,
  (VTBL_ENTRY)&_ZN6S276C53v72Ev,
  (VTBL_ENTRY)&_ZN6S276C53v73Ev,
  (VTBL_ENTRY)&_ZN6S276C53v74Ev,
  (VTBL_ENTRY)&_ZN6S276C53v75Ev,
  (VTBL_ENTRY)&_ZN6S276C53v76Ev,
  (VTBL_ENTRY)&_ZN6S276C53v77Ev,
  (VTBL_ENTRY)&_ZN6S276C53v78Ev,
  (VTBL_ENTRY)&_ZN6S276C53v79Ev,
  (VTBL_ENTRY)&_ZN6S276C53v80Ev,
  (VTBL_ENTRY)&_ZN6S276C53v81Ev,
  (VTBL_ENTRY)&_ZN6S276C53v82Ev,
  (VTBL_ENTRY)&_ZN6S276C53v83Ev,
  (VTBL_ENTRY)&_ZN6S276C53v84Ev,
  (VTBL_ENTRY)&_ZN6S276C53v85Ev,
  (VTBL_ENTRY)&_ZN6S276C53v86Ev,
  (VTBL_ENTRY)&_ZN6S276C53v87Ev,
  (VTBL_ENTRY)&_ZN6S276C53v88Ev,
  (VTBL_ENTRY)&_ZN6S276C53v89Ev,
  (VTBL_ENTRY)&_ZN6S276C53v90Ev,
  (VTBL_ENTRY)&_ZN6S276C53v91Ev,
  (VTBL_ENTRY)&_ZN6S276C53v92Ev,
  (VTBL_ENTRY)&_ZN6S276C43v93Ev,
  (VTBL_ENTRY)&_ZN6S276C43v94Ev,
  (VTBL_ENTRY)&_ZN6S276C43v95Ev,
  (VTBL_ENTRY)&_ZN6S276C43v96Ev,
  (VTBL_ENTRY)&_ZN6S276C43v97Ev,
  (VTBL_ENTRY)&_ZN6S276C43v98Ev,
  (VTBL_ENTRY)&_ZN6S276C43v99Ev,
  (VTBL_ENTRY)&_ZN6S276C44v100Ev,
  (VTBL_ENTRY)&_ZN6S276C44v101Ev,
  (VTBL_ENTRY)&_ZN6S276C44v102Ev,
  (VTBL_ENTRY)&_ZN6S276C44v103Ev,
  (VTBL_ENTRY)&_ZN6S276C44v104Ev,
  (VTBL_ENTRY)&_ZN6S276C44v105Ev,
  (VTBL_ENTRY)&_ZN6S276C44v106Ev,
  (VTBL_ENTRY)&_ZN6S276C44v107Ev,
  (VTBL_ENTRY)&_ZN6S276C44v108Ev,
  (VTBL_ENTRY)&_ZN6S276C44v109Ev,
  (VTBL_ENTRY)&_ZN6S276C44v110Ev,
  (VTBL_ENTRY)&_ZN6S276C44v111Ev,
  (VTBL_ENTRY)&_ZN6S276C44v112Ev,
  (VTBL_ENTRY)&_ZN6S276C34v113Ev,
  (VTBL_ENTRY)&_ZN6S276C34v114Ev,
};
extern VTBL_ENTRY _ZTI6S276C3[];
extern  VTBL_ENTRY _ZTV6S276C3[];
Class_Descriptor cd_S276C3 = {  "S276C3", // class name
  bases_S276C3, 3,
  &(vtc_S276C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S276C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S276C3),112, //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  S276C2  : S276C3 {
  virtual  ~S276C2(); // _ZN6S276C2D1Ev
  virtual void  v115(); // _ZN6S276C24v115Ev
  virtual void  v116(); // _ZN6S276C24v116Ev
  virtual void  v117(); // _ZN6S276C24v117Ev
  virtual void  v118(); // _ZN6S276C24v118Ev
  virtual void  v119(); // _ZN6S276C24v119Ev
  virtual void  v120(); // _ZN6S276C24v120Ev
  virtual void  v121(); // _ZN6S276C24v121Ev
  virtual void  v122(); // _ZN6S276C24v122Ev
  virtual void  v123(); // _ZN6S276C24v123Ev
  S276C2(); // tgen
};
//SIG(-1 S276C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v116 v117} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S276C2 ::~S276C2(){ note_dtor("S276C2", this);}
void  S276C2 ::v115(){vfunc_called(this, "_ZN6S276C24v115Ev");}
void  S276C2 ::v116(){vfunc_called(this, "_ZN6S276C24v116Ev");}
void  S276C2 ::v117(){vfunc_called(this, "_ZN6S276C24v117Ev");}
void  S276C2 ::v118(){vfunc_called(this, "_ZN6S276C24v118Ev");}
void  S276C2 ::v119(){vfunc_called(this, "_ZN6S276C24v119Ev");}
void  S276C2 ::v120(){vfunc_called(this, "_ZN6S276C24v120Ev");}
void  S276C2 ::v121(){vfunc_called(this, "_ZN6S276C24v121Ev");}
void  S276C2 ::v122(){vfunc_called(this, "_ZN6S276C24v122Ev");}
void  S276C2 ::v123(){vfunc_called(this, "_ZN6S276C24v123Ev");}
S276C2 ::S276C2(){ note_ctor("S276C2", this);} // tgen

static void Test_S276C2()
{
  extern Class_Descriptor cd_S276C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S276C2, buf);
    S276C2 *dp, &lv = *(dp=new (buf) S276C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S276C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S276C2)");
    check_base_class_offset(lv, (S276C6*)(S276C5*)(S276C4*)(S276C3*), 0, "S276C2");
    check_base_class_offset(lv, (S276C5*)(S276C4*)(S276C3*), 0, "S276C2");
    check_base_class_offset(lv, (S276C4*)(S276C3*), 0, "S276C2");
    check_base_class_offset(lv, (S276C3*), 0, "S276C2");
    test_class_info(&lv, &cd_S276C2);
    dp->~S276C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS276C2(Test_S276C2, "S276C2", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S276C2C1Ev();
extern void _ZN6S276C2D1Ev();
Name_Map name_map_S276C2[] = {
  NSPAIR(_ZN6S276C2C1Ev),
  NSPAIR(_ZN6S276C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S276C6;
extern VTBL_ENTRY _ZTI6S276C6[];
extern  VTBL_ENTRY _ZTV6S276C6[];
extern Class_Descriptor cd_S276C5;
extern VTBL_ENTRY _ZTI6S276C5[];
extern  VTBL_ENTRY _ZTV6S276C5[];
extern Class_Descriptor cd_S276C4;
extern VTBL_ENTRY _ZTI6S276C4[];
extern  VTBL_ENTRY _ZTV6S276C4[];
extern Class_Descriptor cd_S276C3;
extern VTBL_ENTRY _ZTI6S276C3[];
extern  VTBL_ENTRY _ZTV6S276C3[];
static Base_Class bases_S276C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S276C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S276C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S276C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S276C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S276C2[];
extern void _ZN6S276C2D1Ev();
extern void _ZN6S276C2D0Ev();
extern void _ZN6S276C62v7Ev();
extern void _ZN6S276C62v8Ev();
extern void _ZN6S276C62v9Ev();
extern void _ZN6S276C63v10Ev();
extern void _ZN6S276C63v11Ev();
extern void _ZN6S276C63v12Ev();
extern void _ZN6S276C63v13Ev();
extern void _ZN6S276C63v14Ev();
extern void _ZN6S276C63v15Ev();
extern void _ZN6S276C63v16Ev();
extern void _ZN6S276C63v17Ev();
extern void _ZN6S276C63v18Ev();
extern void _ZN6S276C63v19Ev();
extern void _ZN6S276C63v20Ev();
extern void _ZN6S276C63v21Ev();
extern void _ZN6S276C63v22Ev();
extern void _ZN6S276C63v23Ev();
extern void _ZN6S276C63v24Ev();
extern void _ZN6S276C63v25Ev();
extern void _ZN6S276C63v26Ev();
extern void _ZN6S276C63v27Ev();
extern void _ZN6S276C63v28Ev();
extern void _ZN6S276C63v29Ev();
extern void _ZN6S276C63v30Ev();
extern void _ZN6S276C63v31Ev();
extern void _ZN6S276C63v32Ev();
extern void _ZN6S276C63v33Ev();
extern void _ZN6S276C63v34Ev();
extern void _ZN6S276C63v35Ev();
extern void _ZN6S276C63v36Ev();
extern void _ZN6S276C63v37Ev();
extern void _ZN6S276C63v38Ev();
extern void _ZN6S276C63v39Ev();
extern void _ZN6S276C63v40Ev();
extern void _ZN6S276C63v41Ev();
extern void _ZN6S276C63v42Ev();
extern void _ZN6S276C63v43Ev();
extern void _ZN6S276C63v44Ev();
extern void _ZN6S276C63v45Ev();
extern void _ZN6S276C63v46Ev();
extern void _ZN6S276C63v47Ev();
extern void _ZN6S276C63v48Ev();
extern void _ZN6S276C63v49Ev();
extern void _ZN6S276C63v50Ev();
extern void _ZN6S276C63v51Ev();
extern void _ZN6S276C63v52Ev();
extern void _ZN6S276C63v53Ev();
extern void _ZN6S276C63v54Ev();
extern void _ZN6S276C63v55Ev();
extern void _ZN6S276C63v56Ev();
extern void _ZN6S276C63v57Ev();
extern void _ZN6S276C63v58Ev();
extern void _ZN6S276C63v59Ev();
extern void _ZN6S276C63v60Ev();
extern void _ZN6S276C63v61Ev();
extern void _ZN6S276C63v62Ev();
extern void _ZN6S276C63v63Ev();
extern void _ZN6S276C63v64Ev();
extern void _ZN6S276C63v65Ev();
extern void _ZN6S276C63v66Ev();
extern void _ZN6S276C63v67Ev();
extern void _ZN6S276C63v68Ev();
extern void _ZN6S276C63v69Ev();
extern void _ZN6S276C63v70Ev();
extern void _ZN6S276C53v71Ev();
extern void _ZN6S276C53v72Ev();
extern void _ZN6S276C53v73Ev();
extern void _ZN6S276C53v74Ev();
extern void _ZN6S276C53v75Ev();
extern void _ZN6S276C53v76Ev();
extern void _ZN6S276C53v77Ev();
extern void _ZN6S276C53v78Ev();
extern void _ZN6S276C53v79Ev();
extern void _ZN6S276C53v80Ev();
extern void _ZN6S276C53v81Ev();
extern void _ZN6S276C53v82Ev();
extern void _ZN6S276C53v83Ev();
extern void _ZN6S276C53v84Ev();
extern void _ZN6S276C53v85Ev();
extern void _ZN6S276C53v86Ev();
extern void _ZN6S276C53v87Ev();
extern void _ZN6S276C53v88Ev();
extern void _ZN6S276C53v89Ev();
extern void _ZN6S276C53v90Ev();
extern void _ZN6S276C53v91Ev();
extern void _ZN6S276C53v92Ev();
extern void _ZN6S276C43v93Ev();
extern void _ZN6S276C43v94Ev();
extern void _ZN6S276C43v95Ev();
extern void _ZN6S276C43v96Ev();
extern void _ZN6S276C43v97Ev();
extern void _ZN6S276C43v98Ev();
extern void _ZN6S276C43v99Ev();
extern void _ZN6S276C44v100Ev();
extern void _ZN6S276C44v101Ev();
extern void _ZN6S276C44v102Ev();
extern void _ZN6S276C44v103Ev();
extern void _ZN6S276C44v104Ev();
extern void _ZN6S276C44v105Ev();
extern void _ZN6S276C44v106Ev();
extern void _ZN6S276C44v107Ev();
extern void _ZN6S276C44v108Ev();
extern void _ZN6S276C44v109Ev();
extern void _ZN6S276C44v110Ev();
extern void _ZN6S276C44v111Ev();
extern void _ZN6S276C44v112Ev();
extern void _ZN6S276C34v113Ev();
extern void _ZN6S276C34v114Ev();
extern void _ZN6S276C24v115Ev();
extern void _ZN6S276C24v116Ev();
extern void _ZN6S276C24v117Ev();
extern void _ZN6S276C24v118Ev();
extern void _ZN6S276C24v119Ev();
extern void _ZN6S276C24v120Ev();
extern void _ZN6S276C24v121Ev();
extern void _ZN6S276C24v122Ev();
extern void _ZN6S276C24v123Ev();
static  VTBL_ENTRY vtc_S276C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S276C2[0]),
  (VTBL_ENTRY)&_ZN6S276C2D1Ev,
  (VTBL_ENTRY)&_ZN6S276C2D0Ev,
  (VTBL_ENTRY)&_ZN6S276C62v7Ev,
  (VTBL_ENTRY)&_ZN6S276C62v8Ev,
  (VTBL_ENTRY)&_ZN6S276C62v9Ev,
  (VTBL_ENTRY)&_ZN6S276C63v10Ev,
  (VTBL_ENTRY)&_ZN6S276C63v11Ev,
  (VTBL_ENTRY)&_ZN6S276C63v12Ev,
  (VTBL_ENTRY)&_ZN6S276C63v13Ev,
  (VTBL_ENTRY)&_ZN6S276C63v14Ev,
  (VTBL_ENTRY)&_ZN6S276C63v15Ev,
  (VTBL_ENTRY)&_ZN6S276C63v16Ev,
  (VTBL_ENTRY)&_ZN6S276C63v17Ev,
  (VTBL_ENTRY)&_ZN6S276C63v18Ev,
  (VTBL_ENTRY)&_ZN6S276C63v19Ev,
  (VTBL_ENTRY)&_ZN6S276C63v20Ev,
  (VTBL_ENTRY)&_ZN6S276C63v21Ev,
  (VTBL_ENTRY)&_ZN6S276C63v22Ev,
  (VTBL_ENTRY)&_ZN6S276C63v23Ev,
  (VTBL_ENTRY)&_ZN6S276C63v24Ev,
  (VTBL_ENTRY)&_ZN6S276C63v25Ev,
  (VTBL_ENTRY)&_ZN6S276C63v26Ev,
  (VTBL_ENTRY)&_ZN6S276C63v27Ev,
  (VTBL_ENTRY)&_ZN6S276C63v28Ev,
  (VTBL_ENTRY)&_ZN6S276C63v29Ev,
  (VTBL_ENTRY)&_ZN6S276C63v30Ev,
  (VTBL_ENTRY)&_ZN6S276C63v31Ev,
  (VTBL_ENTRY)&_ZN6S276C63v32Ev,
  (VTBL_ENTRY)&_ZN6S276C63v33Ev,
  (VTBL_ENTRY)&_ZN6S276C63v34Ev,
  (VTBL_ENTRY)&_ZN6S276C63v35Ev,
  (VTBL_ENTRY)&_ZN6S276C63v36Ev,
  (VTBL_ENTRY)&_ZN6S276C63v37Ev,
  (VTBL_ENTRY)&_ZN6S276C63v38Ev,
  (VTBL_ENTRY)&_ZN6S276C63v39Ev,
  (VTBL_ENTRY)&_ZN6S276C63v40Ev,
  (VTBL_ENTRY)&_ZN6S276C63v41Ev,
  (VTBL_ENTRY)&_ZN6S276C63v42Ev,
  (VTBL_ENTRY)&_ZN6S276C63v43Ev,
  (VTBL_ENTRY)&_ZN6S276C63v44Ev,
  (VTBL_ENTRY)&_ZN6S276C63v45Ev,
  (VTBL_ENTRY)&_ZN6S276C63v46Ev,
  (VTBL_ENTRY)&_ZN6S276C63v47Ev,
  (VTBL_ENTRY)&_ZN6S276C63v48Ev,
  (VTBL_ENTRY)&_ZN6S276C63v49Ev,
  (VTBL_ENTRY)&_ZN6S276C63v50Ev,
  (VTBL_ENTRY)&_ZN6S276C63v51Ev,
  (VTBL_ENTRY)&_ZN6S276C63v52Ev,
  (VTBL_ENTRY)&_ZN6S276C63v53Ev,
  (VTBL_ENTRY)&_ZN6S276C63v54Ev,
  (VTBL_ENTRY)&_ZN6S276C63v55Ev,
  (VTBL_ENTRY)&_ZN6S276C63v56Ev,
  (VTBL_ENTRY)&_ZN6S276C63v57Ev,
  (VTBL_ENTRY)&_ZN6S276C63v58Ev,
  (VTBL_ENTRY)&_ZN6S276C63v59Ev,
  (VTBL_ENTRY)&_ZN6S276C63v60Ev,
  (VTBL_ENTRY)&_ZN6S276C63v61Ev,
  (VTBL_ENTRY)&_ZN6S276C63v62Ev,
  (VTBL_ENTRY)&_ZN6S276C63v63Ev,
  (VTBL_ENTRY)&_ZN6S276C63v64Ev,
  (VTBL_ENTRY)&_ZN6S276C63v65Ev,
  (VTBL_ENTRY)&_ZN6S276C63v66Ev,
  (VTBL_ENTRY)&_ZN6S276C63v67Ev,
  (VTBL_ENTRY)&_ZN6S276C63v68Ev,
  (VTBL_ENTRY)&_ZN6S276C63v69Ev,
  (VTBL_ENTRY)&_ZN6S276C63v70Ev,
  (VTBL_ENTRY)&_ZN6S276C53v71Ev,
  (VTBL_ENTRY)&_ZN6S276C53v72Ev,
  (VTBL_ENTRY)&_ZN6S276C53v73Ev,
  (VTBL_ENTRY)&_ZN6S276C53v74Ev,
  (VTBL_ENTRY)&_ZN6S276C53v75Ev,
  (VTBL_ENTRY)&_ZN6S276C53v76Ev,
  (VTBL_ENTRY)&_ZN6S276C53v77Ev,
  (VTBL_ENTRY)&_ZN6S276C53v78Ev,
  (VTBL_ENTRY)&_ZN6S276C53v79Ev,
  (VTBL_ENTRY)&_ZN6S276C53v80Ev,
  (VTBL_ENTRY)&_ZN6S276C53v81Ev,
  (VTBL_ENTRY)&_ZN6S276C53v82Ev,
  (VTBL_ENTRY)&_ZN6S276C53v83Ev,
  (VTBL_ENTRY)&_ZN6S276C53v84Ev,
  (VTBL_ENTRY)&_ZN6S276C53v85Ev,
  (VTBL_ENTRY)&_ZN6S276C53v86Ev,
  (VTBL_ENTRY)&_ZN6S276C53v87Ev,
  (VTBL_ENTRY)&_ZN6S276C53v88Ev,
  (VTBL_ENTRY)&_ZN6S276C53v89Ev,
  (VTBL_ENTRY)&_ZN6S276C53v90Ev,
  (VTBL_ENTRY)&_ZN6S276C53v91Ev,
  (VTBL_ENTRY)&_ZN6S276C53v92Ev,
  (VTBL_ENTRY)&_ZN6S276C43v93Ev,
  (VTBL_ENTRY)&_ZN6S276C43v94Ev,
  (VTBL_ENTRY)&_ZN6S276C43v95Ev,
  (VTBL_ENTRY)&_ZN6S276C43v96Ev,
  (VTBL_ENTRY)&_ZN6S276C43v97Ev,
  (VTBL_ENTRY)&_ZN6S276C43v98Ev,
  (VTBL_ENTRY)&_ZN6S276C43v99Ev,
  (VTBL_ENTRY)&_ZN6S276C44v100Ev,
  (VTBL_ENTRY)&_ZN6S276C44v101Ev,
  (VTBL_ENTRY)&_ZN6S276C44v102Ev,
  (VTBL_ENTRY)&_ZN6S276C44v103Ev,
  (VTBL_ENTRY)&_ZN6S276C44v104Ev,
  (VTBL_ENTRY)&_ZN6S276C44v105Ev,
  (VTBL_ENTRY)&_ZN6S276C44v106Ev,
  (VTBL_ENTRY)&_ZN6S276C44v107Ev,
  (VTBL_ENTRY)&_ZN6S276C44v108Ev,
  (VTBL_ENTRY)&_ZN6S276C44v109Ev,
  (VTBL_ENTRY)&_ZN6S276C44v110Ev,
  (VTBL_ENTRY)&_ZN6S276C44v111Ev,
  (VTBL_ENTRY)&_ZN6S276C44v112Ev,
  (VTBL_ENTRY)&_ZN6S276C34v113Ev,
  (VTBL_ENTRY)&_ZN6S276C34v114Ev,
  (VTBL_ENTRY)&_ZN6S276C24v115Ev,
  (VTBL_ENTRY)&_ZN6S276C24v116Ev,
  (VTBL_ENTRY)&_ZN6S276C24v117Ev,
  (VTBL_ENTRY)&_ZN6S276C24v118Ev,
  (VTBL_ENTRY)&_ZN6S276C24v119Ev,
  (VTBL_ENTRY)&_ZN6S276C24v120Ev,
  (VTBL_ENTRY)&_ZN6S276C24v121Ev,
  (VTBL_ENTRY)&_ZN6S276C24v122Ev,
  (VTBL_ENTRY)&_ZN6S276C24v123Ev,
};
extern VTBL_ENTRY _ZTI6S276C2[];
extern  VTBL_ENTRY _ZTV6S276C2[];
Class_Descriptor cd_S276C2 = {  "S276C2", // class name
  bases_S276C2, 4,
  &(vtc_S276C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S276C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S276C2),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S276C1  : S276C2 {
  ::S3168C15_nt s276c1f0;
  virtual  ~S276C1(); // _ZN6S276C1D1Ev
  virtual void  v1(); // _ZN6S276C12v1Ev
  virtual void  v2(); // _ZN6S276C12v2Ev
  virtual void  v3(); // _ZN6S276C12v3Ev
  virtual void  v4(); // _ZN6S276C12v4Ev
  virtual void  v5(); // _ZN6S276C12v5Ev
  virtual void  v6(); // _ZN6S276C12v6Ev
  S276C1(); // tgen
};
//SIG(1 S276C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 FC7{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v113 v114} vd v115 v116 v117 v118 v119 v120 v121 v122 v123} vd v1 v2 v3 v4 v5 v6 FC21{ BC22{ BC11}}}


 S276C1 ::~S276C1(){ note_dtor("S276C1", this);}
void  S276C1 ::v1(){vfunc_called(this, "_ZN6S276C12v1Ev");}
void  S276C1 ::v2(){vfunc_called(this, "_ZN6S276C12v2Ev");}
void  S276C1 ::v3(){vfunc_called(this, "_ZN6S276C12v3Ev");}
void  S276C1 ::v4(){vfunc_called(this, "_ZN6S276C12v4Ev");}
void  S276C1 ::v5(){vfunc_called(this, "_ZN6S276C12v5Ev");}
void  S276C1 ::v6(){vfunc_called(this, "_ZN6S276C12v6Ev");}
S276C1 ::S276C1(){ note_ctor("S276C1", this);} // tgen

static void Test_S276C1()
{
  extern Class_Descriptor cd_S276C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,53)];
    init_test(&cd_S276C1, buf);
    S276C1 *dp, &lv = *(dp=new (buf) S276C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,208), "sizeof(S276C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S276C1)");
    check_base_class_offset(lv, (S276C6*)(S276C5*)(S276C4*)(S276C3*)(S276C2*), 0, "S276C1");
    check_base_class_offset(lv, (S276C5*)(S276C4*)(S276C3*)(S276C2*), 0, "S276C1");
    check_base_class_offset(lv, (S276C4*)(S276C3*)(S276C2*), 0, "S276C1");
    check_base_class_offset(lv, (S276C3*)(S276C2*), 0, "S276C1");
    check_base_class_offset(lv, (S276C2*), 0, "S276C1");
    check_field_offset(lv, s276c1f0, ABISELECT(272,196), "S276C1.s276c1f0");
    test_class_info(&lv, &cd_S276C1);
    dp->~S276C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS276C1(Test_S276C1, "S276C1", ABISELECT(288,208));

#else // __cplusplus

extern void _ZN6S276C1C1Ev();
extern void _ZN6S276C1D1Ev();
Name_Map name_map_S276C1[] = {
  NSPAIR(_ZN6S276C1C1Ev),
  NSPAIR(_ZN6S276C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S276C6;
extern VTBL_ENTRY _ZTI6S276C6[];
extern  VTBL_ENTRY _ZTV6S276C6[];
extern Class_Descriptor cd_S276C5;
extern VTBL_ENTRY _ZTI6S276C5[];
extern  VTBL_ENTRY _ZTV6S276C5[];
extern Class_Descriptor cd_S276C4;
extern VTBL_ENTRY _ZTI6S276C4[];
extern  VTBL_ENTRY _ZTV6S276C4[];
extern Class_Descriptor cd_S276C3;
extern VTBL_ENTRY _ZTI6S276C3[];
extern  VTBL_ENTRY _ZTV6S276C3[];
extern Class_Descriptor cd_S276C2;
extern VTBL_ENTRY _ZTI6S276C2[];
extern  VTBL_ENTRY _ZTV6S276C2[];
static Base_Class bases_S276C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S276C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S276C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S276C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S276C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S276C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S276C1[];
extern void _ZN6S276C1D1Ev();
extern void _ZN6S276C1D0Ev();
extern void _ZN6S276C62v7Ev();
extern void _ZN6S276C62v8Ev();
extern void _ZN6S276C62v9Ev();
extern void _ZN6S276C63v10Ev();
extern void _ZN6S276C63v11Ev();
extern void _ZN6S276C63v12Ev();
extern void _ZN6S276C63v13Ev();
extern void _ZN6S276C63v14Ev();
extern void _ZN6S276C63v15Ev();
extern void _ZN6S276C63v16Ev();
extern void _ZN6S276C63v17Ev();
extern void _ZN6S276C63v18Ev();
extern void _ZN6S276C63v19Ev();
extern void _ZN6S276C63v20Ev();
extern void _ZN6S276C63v21Ev();
extern void _ZN6S276C63v22Ev();
extern void _ZN6S276C63v23Ev();
extern void _ZN6S276C63v24Ev();
extern void _ZN6S276C63v25Ev();
extern void _ZN6S276C63v26Ev();
extern void _ZN6S276C63v27Ev();
extern void _ZN6S276C63v28Ev();
extern void _ZN6S276C63v29Ev();
extern void _ZN6S276C63v30Ev();
extern void _ZN6S276C63v31Ev();
extern void _ZN6S276C63v32Ev();
extern void _ZN6S276C63v33Ev();
extern void _ZN6S276C63v34Ev();
extern void _ZN6S276C63v35Ev();
extern void _ZN6S276C63v36Ev();
extern void _ZN6S276C63v37Ev();
extern void _ZN6S276C63v38Ev();
extern void _ZN6S276C63v39Ev();
extern void _ZN6S276C63v40Ev();
extern void _ZN6S276C63v41Ev();
extern void _ZN6S276C63v42Ev();
extern void _ZN6S276C63v43Ev();
extern void _ZN6S276C63v44Ev();
extern void _ZN6S276C63v45Ev();
extern void _ZN6S276C63v46Ev();
extern void _ZN6S276C63v47Ev();
extern void _ZN6S276C63v48Ev();
extern void _ZN6S276C63v49Ev();
extern void _ZN6S276C63v50Ev();
extern void _ZN6S276C63v51Ev();
extern void _ZN6S276C63v52Ev();
extern void _ZN6S276C63v53Ev();
extern void _ZN6S276C63v54Ev();
extern void _ZN6S276C63v55Ev();
extern void _ZN6S276C63v56Ev();
extern void _ZN6S276C63v57Ev();
extern void _ZN6S276C63v58Ev();
extern void _ZN6S276C63v59Ev();
extern void _ZN6S276C63v60Ev();
extern void _ZN6S276C63v61Ev();
extern void _ZN6S276C63v62Ev();
extern void _ZN6S276C63v63Ev();
extern void _ZN6S276C63v64Ev();
extern void _ZN6S276C63v65Ev();
extern void _ZN6S276C63v66Ev();
extern void _ZN6S276C63v67Ev();
extern void _ZN6S276C63v68Ev();
extern void _ZN6S276C63v69Ev();
extern void _ZN6S276C63v70Ev();
extern void _ZN6S276C53v71Ev();
extern void _ZN6S276C53v72Ev();
extern void _ZN6S276C53v73Ev();
extern void _ZN6S276C53v74Ev();
extern void _ZN6S276C53v75Ev();
extern void _ZN6S276C53v76Ev();
extern void _ZN6S276C53v77Ev();
extern void _ZN6S276C53v78Ev();
extern void _ZN6S276C53v79Ev();
extern void _ZN6S276C53v80Ev();
extern void _ZN6S276C53v81Ev();
extern void _ZN6S276C53v82Ev();
extern void _ZN6S276C53v83Ev();
extern void _ZN6S276C53v84Ev();
extern void _ZN6S276C53v85Ev();
extern void _ZN6S276C53v86Ev();
extern void _ZN6S276C53v87Ev();
extern void _ZN6S276C53v88Ev();
extern void _ZN6S276C53v89Ev();
extern void _ZN6S276C53v90Ev();
extern void _ZN6S276C53v91Ev();
extern void _ZN6S276C53v92Ev();
extern void _ZN6S276C43v93Ev();
extern void _ZN6S276C43v94Ev();
extern void _ZN6S276C43v95Ev();
extern void _ZN6S276C43v96Ev();
extern void _ZN6S276C43v97Ev();
extern void _ZN6S276C43v98Ev();
extern void _ZN6S276C43v99Ev();
extern void _ZN6S276C44v100Ev();
extern void _ZN6S276C44v101Ev();
extern void _ZN6S276C44v102Ev();
extern void _ZN6S276C44v103Ev();
extern void _ZN6S276C44v104Ev();
extern void _ZN6S276C44v105Ev();
extern void _ZN6S276C44v106Ev();
extern void _ZN6S276C44v107Ev();
extern void _ZN6S276C44v108Ev();
extern void _ZN6S276C44v109Ev();
extern void _ZN6S276C44v110Ev();
extern void _ZN6S276C44v111Ev();
extern void _ZN6S276C44v112Ev();
extern void _ZN6S276C34v113Ev();
extern void _ZN6S276C34v114Ev();
extern void _ZN6S276C24v115Ev();
extern void _ZN6S276C24v116Ev();
extern void _ZN6S276C24v117Ev();
extern void _ZN6S276C24v118Ev();
extern void _ZN6S276C24v119Ev();
extern void _ZN6S276C24v120Ev();
extern void _ZN6S276C24v121Ev();
extern void _ZN6S276C24v122Ev();
extern void _ZN6S276C24v123Ev();
extern void _ZN6S276C12v1Ev();
extern void _ZN6S276C12v2Ev();
extern void _ZN6S276C12v3Ev();
extern void _ZN6S276C12v4Ev();
extern void _ZN6S276C12v5Ev();
extern void _ZN6S276C12v6Ev();
static  VTBL_ENTRY vtc_S276C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S276C1[0]),
  (VTBL_ENTRY)&_ZN6S276C1D1Ev,
  (VTBL_ENTRY)&_ZN6S276C1D0Ev,
  (VTBL_ENTRY)&_ZN6S276C62v7Ev,
  (VTBL_ENTRY)&_ZN6S276C62v8Ev,
  (VTBL_ENTRY)&_ZN6S276C62v9Ev,
  (VTBL_ENTRY)&_ZN6S276C63v10Ev,
  (VTBL_ENTRY)&_ZN6S276C63v11Ev,
  (VTBL_ENTRY)&_ZN6S276C63v12Ev,
  (VTBL_ENTRY)&_ZN6S276C63v13Ev,
  (VTBL_ENTRY)&_ZN6S276C63v14Ev,
  (VTBL_ENTRY)&_ZN6S276C63v15Ev,
  (VTBL_ENTRY)&_ZN6S276C63v16Ev,
  (VTBL_ENTRY)&_ZN6S276C63v17Ev,
  (VTBL_ENTRY)&_ZN6S276C63v18Ev,
  (VTBL_ENTRY)&_ZN6S276C63v19Ev,
  (VTBL_ENTRY)&_ZN6S276C63v20Ev,
  (VTBL_ENTRY)&_ZN6S276C63v21Ev,
  (VTBL_ENTRY)&_ZN6S276C63v22Ev,
  (VTBL_ENTRY)&_ZN6S276C63v23Ev,
  (VTBL_ENTRY)&_ZN6S276C63v24Ev,
  (VTBL_ENTRY)&_ZN6S276C63v25Ev,
  (VTBL_ENTRY)&_ZN6S276C63v26Ev,
  (VTBL_ENTRY)&_ZN6S276C63v27Ev,
  (VTBL_ENTRY)&_ZN6S276C63v28Ev,
  (VTBL_ENTRY)&_ZN6S276C63v29Ev,
  (VTBL_ENTRY)&_ZN6S276C63v30Ev,
  (VTBL_ENTRY)&_ZN6S276C63v31Ev,
  (VTBL_ENTRY)&_ZN6S276C63v32Ev,
  (VTBL_ENTRY)&_ZN6S276C63v33Ev,
  (VTBL_ENTRY)&_ZN6S276C63v34Ev,
  (VTBL_ENTRY)&_ZN6S276C63v35Ev,
  (VTBL_ENTRY)&_ZN6S276C63v36Ev,
  (VTBL_ENTRY)&_ZN6S276C63v37Ev,
  (VTBL_ENTRY)&_ZN6S276C63v38Ev,
  (VTBL_ENTRY)&_ZN6S276C63v39Ev,
  (VTBL_ENTRY)&_ZN6S276C63v40Ev,
  (VTBL_ENTRY)&_ZN6S276C63v41Ev,
  (VTBL_ENTRY)&_ZN6S276C63v42Ev,
  (VTBL_ENTRY)&_ZN6S276C63v43Ev,
  (VTBL_ENTRY)&_ZN6S276C63v44Ev,
  (VTBL_ENTRY)&_ZN6S276C63v45Ev,
  (VTBL_ENTRY)&_ZN6S276C63v46Ev,
  (VTBL_ENTRY)&_ZN6S276C63v47Ev,
  (VTBL_ENTRY)&_ZN6S276C63v48Ev,
  (VTBL_ENTRY)&_ZN6S276C63v49Ev,
  (VTBL_ENTRY)&_ZN6S276C63v50Ev,
  (VTBL_ENTRY)&_ZN6S276C63v51Ev,
  (VTBL_ENTRY)&_ZN6S276C63v52Ev,
  (VTBL_ENTRY)&_ZN6S276C63v53Ev,
  (VTBL_ENTRY)&_ZN6S276C63v54Ev,
  (VTBL_ENTRY)&_ZN6S276C63v55Ev,
  (VTBL_ENTRY)&_ZN6S276C63v56Ev,
  (VTBL_ENTRY)&_ZN6S276C63v57Ev,
  (VTBL_ENTRY)&_ZN6S276C63v58Ev,
  (VTBL_ENTRY)&_ZN6S276C63v59Ev,
  (VTBL_ENTRY)&_ZN6S276C63v60Ev,
  (VTBL_ENTRY)&_ZN6S276C63v61Ev,
  (VTBL_ENTRY)&_ZN6S276C63v62Ev,
  (VTBL_ENTRY)&_ZN6S276C63v63Ev,
  (VTBL_ENTRY)&_ZN6S276C63v64Ev,
  (VTBL_ENTRY)&_ZN6S276C63v65Ev,
  (VTBL_ENTRY)&_ZN6S276C63v66Ev,
  (VTBL_ENTRY)&_ZN6S276C63v67Ev,
  (VTBL_ENTRY)&_ZN6S276C63v68Ev,
  (VTBL_ENTRY)&_ZN6S276C63v69Ev,
  (VTBL_ENTRY)&_ZN6S276C63v70Ev,
  (VTBL_ENTRY)&_ZN6S276C53v71Ev,
  (VTBL_ENTRY)&_ZN6S276C53v72Ev,
  (VTBL_ENTRY)&_ZN6S276C53v73Ev,
  (VTBL_ENTRY)&_ZN6S276C53v74Ev,
  (VTBL_ENTRY)&_ZN6S276C53v75Ev,
  (VTBL_ENTRY)&_ZN6S276C53v76Ev,
  (VTBL_ENTRY)&_ZN6S276C53v77Ev,
  (VTBL_ENTRY)&_ZN6S276C53v78Ev,
  (VTBL_ENTRY)&_ZN6S276C53v79Ev,
  (VTBL_ENTRY)&_ZN6S276C53v80Ev,
  (VTBL_ENTRY)&_ZN6S276C53v81Ev,
  (VTBL_ENTRY)&_ZN6S276C53v82Ev,
  (VTBL_ENTRY)&_ZN6S276C53v83Ev,
  (VTBL_ENTRY)&_ZN6S276C53v84Ev,
  (VTBL_ENTRY)&_ZN6S276C53v85Ev,
  (VTBL_ENTRY)&_ZN6S276C53v86Ev,
  (VTBL_ENTRY)&_ZN6S276C53v87Ev,
  (VTBL_ENTRY)&_ZN6S276C53v88Ev,
  (VTBL_ENTRY)&_ZN6S276C53v89Ev,
  (VTBL_ENTRY)&_ZN6S276C53v90Ev,
  (VTBL_ENTRY)&_ZN6S276C53v91Ev,
  (VTBL_ENTRY)&_ZN6S276C53v92Ev,
  (VTBL_ENTRY)&_ZN6S276C43v93Ev,
  (VTBL_ENTRY)&_ZN6S276C43v94Ev,
  (VTBL_ENTRY)&_ZN6S276C43v95Ev,
  (VTBL_ENTRY)&_ZN6S276C43v96Ev,
  (VTBL_ENTRY)&_ZN6S276C43v97Ev,
  (VTBL_ENTRY)&_ZN6S276C43v98Ev,
  (VTBL_ENTRY)&_ZN6S276C43v99Ev,
  (VTBL_ENTRY)&_ZN6S276C44v100Ev,
  (VTBL_ENTRY)&_ZN6S276C44v101Ev,
  (VTBL_ENTRY)&_ZN6S276C44v102Ev,
  (VTBL_ENTRY)&_ZN6S276C44v103Ev,
  (VTBL_ENTRY)&_ZN6S276C44v104Ev,
  (VTBL_ENTRY)&_ZN6S276C44v105Ev,
  (VTBL_ENTRY)&_ZN6S276C44v106Ev,
  (VTBL_ENTRY)&_ZN6S276C44v107Ev,
  (VTBL_ENTRY)&_ZN6S276C44v108Ev,
  (VTBL_ENTRY)&_ZN6S276C44v109Ev,
  (VTBL_ENTRY)&_ZN6S276C44v110Ev,
  (VTBL_ENTRY)&_ZN6S276C44v111Ev,
  (VTBL_ENTRY)&_ZN6S276C44v112Ev,
  (VTBL_ENTRY)&_ZN6S276C34v113Ev,
  (VTBL_ENTRY)&_ZN6S276C34v114Ev,
  (VTBL_ENTRY)&_ZN6S276C24v115Ev,
  (VTBL_ENTRY)&_ZN6S276C24v116Ev,
  (VTBL_ENTRY)&_ZN6S276C24v117Ev,
  (VTBL_ENTRY)&_ZN6S276C24v118Ev,
  (VTBL_ENTRY)&_ZN6S276C24v119Ev,
  (VTBL_ENTRY)&_ZN6S276C24v120Ev,
  (VTBL_ENTRY)&_ZN6S276C24v121Ev,
  (VTBL_ENTRY)&_ZN6S276C24v122Ev,
  (VTBL_ENTRY)&_ZN6S276C24v123Ev,
  (VTBL_ENTRY)&_ZN6S276C12v1Ev,
  (VTBL_ENTRY)&_ZN6S276C12v2Ev,
  (VTBL_ENTRY)&_ZN6S276C12v3Ev,
  (VTBL_ENTRY)&_ZN6S276C12v4Ev,
  (VTBL_ENTRY)&_ZN6S276C12v5Ev,
  (VTBL_ENTRY)&_ZN6S276C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S276C1[];
extern  VTBL_ENTRY _ZTV6S276C1[];
Class_Descriptor cd_S276C1 = {  "S276C1", // class name
  bases_S276C1, 5,
  &(vtc_S276C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,208), // object size
  NSPAIRA(_ZTI6S276C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S276C1),127, //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  S594C5  {
  int s594c5f0;
  __tsi64 s594c5f1;
  void *s594c5f2[4];
  int s594c5f3[2];
  void *s594c5f4;
  ::S3221C4_nt s594c5f5;
  void *s594c5f6[2];
  virtual  ~S594C5(); // _ZN6S594C5D1Ev
  virtual void  v4(); // _ZN6S594C52v4Ev
  virtual void  v5(); // _ZN6S594C52v5Ev
  virtual void  v6(); // _ZN6S594C52v6Ev
  virtual void  v7(); // _ZN6S594C52v7Ev
  virtual void  v8(); // _ZN6S594C52v8Ev
  virtual void  v9(); // _ZN6S594C52v9Ev
  virtual void  v10(); // _ZN6S594C53v10Ev
  virtual void  v11(); // _ZN6S594C53v11Ev
  virtual void  v12(); // _ZN6S594C53v12Ev
  virtual void  v13(); // _ZN6S594C53v13Ev
  virtual void  v14(); // _ZN6S594C53v14Ev
  virtual void  v15(); // _ZN6S594C53v15Ev
  virtual void  v16(); // _ZN6S594C53v16Ev
  virtual void  v17(); // _ZN6S594C53v17Ev
  virtual void  v18(); // _ZN6S594C53v18Ev
  virtual void  v19(); // _ZN6S594C53v19Ev
  virtual void  v20(); // _ZN6S594C53v20Ev
  virtual void  v21(); // _ZN6S594C53v21Ev
  virtual void  v22(); // _ZN6S594C53v22Ev
  virtual void  v23(); // _ZN6S594C53v23Ev
  virtual void  v24(); // _ZN6S594C53v24Ev
  virtual void  v25(); // _ZN6S594C53v25Ev
  virtual void  v26(); // _ZN6S594C53v26Ev
  virtual void  v27(); // _ZN6S594C53v27Ev
  virtual void  v28(); // _ZN6S594C53v28Ev
  virtual void  v29(); // _ZN6S594C53v29Ev
  virtual void  v30(); // _ZN6S594C53v30Ev
  virtual void  v31(); // _ZN6S594C53v31Ev
  virtual void  v32(); // _ZN6S594C53v32Ev
  virtual void  v33(); // _ZN6S594C53v33Ev
  virtual void  v34(); // _ZN6S594C53v34Ev
  virtual void  v35(); // _ZN6S594C53v35Ev
  virtual void  v36(); // _ZN6S594C53v36Ev
  virtual void  v37(); // _ZN6S594C53v37Ev
  virtual void  v38(); // _ZN6S594C53v38Ev
  virtual void  v39(); // _ZN6S594C53v39Ev
  virtual void  v40(); // _ZN6S594C53v40Ev
  virtual void  v41(); // _ZN6S594C53v41Ev
  virtual void  v42(); // _ZN6S594C53v42Ev
  virtual void  v43(); // _ZN6S594C53v43Ev
  virtual void  v44(); // _ZN6S594C53v44Ev
  virtual void  v45(); // _ZN6S594C53v45Ev
  virtual void  v46(); // _ZN6S594C53v46Ev
  virtual void  v47(); // _ZN6S594C53v47Ev
  virtual void  v48(); // _ZN6S594C53v48Ev
  virtual void  v49(); // _ZN6S594C53v49Ev
  virtual void  v50(); // _ZN6S594C53v50Ev
  virtual void  v51(); // _ZN6S594C53v51Ev
  virtual void  v52(); // _ZN6S594C53v52Ev
  virtual void  v53(); // _ZN6S594C53v53Ev
  virtual void  v54(); // _ZN6S594C53v54Ev
  virtual void  v55(); // _ZN6S594C53v55Ev
  virtual void  v56(); // _ZN6S594C53v56Ev
  virtual void  v57(); // _ZN6S594C53v57Ev
  virtual void  v58(); // _ZN6S594C53v58Ev
  virtual void  v59(); // _ZN6S594C53v59Ev
  virtual void  v60(); // _ZN6S594C53v60Ev
  virtual void  v61(); // _ZN6S594C53v61Ev
  virtual void  v62(); // _ZN6S594C53v62Ev
  virtual void  v63(); // _ZN6S594C53v63Ev
  virtual void  v64(); // _ZN6S594C53v64Ev
  virtual void  v65(); // _ZN6S594C53v65Ev
  virtual void  v66(); // _ZN6S594C53v66Ev
  virtual void  v67(); // _ZN6S594C53v67Ev
  S594C5(); // tgen
};
//SIG(-1 S594C5) 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]}


 S594C5 ::~S594C5(){ note_dtor("S594C5", this);}
void  S594C5 ::v4(){vfunc_called(this, "_ZN6S594C52v4Ev");}
void  S594C5 ::v5(){vfunc_called(this, "_ZN6S594C52v5Ev");}
void  S594C5 ::v6(){vfunc_called(this, "_ZN6S594C52v6Ev");}
void  S594C5 ::v7(){vfunc_called(this, "_ZN6S594C52v7Ev");}
void  S594C5 ::v8(){vfunc_called(this, "_ZN6S594C52v8Ev");}
void  S594C5 ::v9(){vfunc_called(this, "_ZN6S594C52v9Ev");}
void  S594C5 ::v10(){vfunc_called(this, "_ZN6S594C53v10Ev");}
void  S594C5 ::v11(){vfunc_called(this, "_ZN6S594C53v11Ev");}
void  S594C5 ::v12(){vfunc_called(this, "_ZN6S594C53v12Ev");}
void  S594C5 ::v13(){vfunc_called(this, "_ZN6S594C53v13Ev");}
void  S594C5 ::v14(){vfunc_called(this, "_ZN6S594C53v14Ev");}
void  S594C5 ::v15(){vfunc_called(this, "_ZN6S594C53v15Ev");}
void  S594C5 ::v16(){vfunc_called(this, "_ZN6S594C53v16Ev");}
void  S594C5 ::v17(){vfunc_called(this, "_ZN6S594C53v17Ev");}
void  S594C5 ::v18(){vfunc_called(this, "_ZN6S594C53v18Ev");}
void  S594C5 ::v19(){vfunc_called(this, "_ZN6S594C53v19Ev");}
void  S594C5 ::v20(){vfunc_called(this, "_ZN6S594C53v20Ev");}
void  S594C5 ::v21(){vfunc_called(this, "_ZN6S594C53v21Ev");}
void  S594C5 ::v22(){vfunc_called(this, "_ZN6S594C53v22Ev");}
void  S594C5 ::v23(){vfunc_called(this, "_ZN6S594C53v23Ev");}
void  S594C5 ::v24(){vfunc_called(this, "_ZN6S594C53v24Ev");}
void  S594C5 ::v25(){vfunc_called(this, "_ZN6S594C53v25Ev");}
void  S594C5 ::v26(){vfunc_called(this, "_ZN6S594C53v26Ev");}
void  S594C5 ::v27(){vfunc_called(this, "_ZN6S594C53v27Ev");}
void  S594C5 ::v28(){vfunc_called(this, "_ZN6S594C53v28Ev");}
void  S594C5 ::v29(){vfunc_called(this, "_ZN6S594C53v29Ev");}
void  S594C5 ::v30(){vfunc_called(this, "_ZN6S594C53v30Ev");}
void  S594C5 ::v31(){vfunc_called(this, "_ZN6S594C53v31Ev");}
void  S594C5 ::v32(){vfunc_called(this, "_ZN6S594C53v32Ev");}
void  S594C5 ::v33(){vfunc_called(this, "_ZN6S594C53v33Ev");}
void  S594C5 ::v34(){vfunc_called(this, "_ZN6S594C53v34Ev");}
void  S594C5 ::v35(){vfunc_called(this, "_ZN6S594C53v35Ev");}
void  S594C5 ::v36(){vfunc_called(this, "_ZN6S594C53v36Ev");}
void  S594C5 ::v37(){vfunc_called(this, "_ZN6S594C53v37Ev");}
void  S594C5 ::v38(){vfunc_called(this, "_ZN6S594C53v38Ev");}
void  S594C5 ::v39(){vfunc_called(this, "_ZN6S594C53v39Ev");}
void  S594C5 ::v40(){vfunc_called(this, "_ZN6S594C53v40Ev");}
void  S594C5 ::v41(){vfunc_called(this, "_ZN6S594C53v41Ev");}
void  S594C5 ::v42(){vfunc_called(this, "_ZN6S594C53v42Ev");}
void  S594C5 ::v43(){vfunc_called(this, "_ZN6S594C53v43Ev");}
void  S594C5 ::v44(){vfunc_called(this, "_ZN6S594C53v44Ev");}
void  S594C5 ::v45(){vfunc_called(this, "_ZN6S594C53v45Ev");}
void  S594C5 ::v46(){vfunc_called(this, "_ZN6S594C53v46Ev");}
void  S594C5 ::v47(){vfunc_called(this, "_ZN6S594C53v47Ev");}
void  S594C5 ::v48(){vfunc_called(this, "_ZN6S594C53v48Ev");}
void  S594C5 ::v49(){vfunc_called(this, "_ZN6S594C53v49Ev");}
void  S594C5 ::v50(){vfunc_called(this, "_ZN6S594C53v50Ev");}
void  S594C5 ::v51(){vfunc_called(this, "_ZN6S594C53v51Ev");}
void  S594C5 ::v52(){vfunc_called(this, "_ZN6S594C53v52Ev");}
void  S594C5 ::v53(){vfunc_called(this, "_ZN6S594C53v53Ev");}
void  S594C5 ::v54(){vfunc_called(this, "_ZN6S594C53v54Ev");}
void  S594C5 ::v55(){vfunc_called(this, "_ZN6S594C53v55Ev");}
void  S594C5 ::v56(){vfunc_called(this, "_ZN6S594C53v56Ev");}
void  S594C5 ::v57(){vfunc_called(this, "_ZN6S594C53v57Ev");}
void  S594C5 ::v58(){vfunc_called(this, "_ZN6S594C53v58Ev");}
void  S594C5 ::v59(){vfunc_called(this, "_ZN6S594C53v59Ev");}
void  S594C5 ::v60(){vfunc_called(this, "_ZN6S594C53v60Ev");}
void  S594C5 ::v61(){vfunc_called(this, "_ZN6S594C53v61Ev");}
void  S594C5 ::v62(){vfunc_called(this, "_ZN6S594C53v62Ev");}
void  S594C5 ::v63(){vfunc_called(this, "_ZN6S594C53v63Ev");}
void  S594C5 ::v64(){vfunc_called(this, "_ZN6S594C53v64Ev");}
void  S594C5 ::v65(){vfunc_called(this, "_ZN6S594C53v65Ev");}
void  S594C5 ::v66(){vfunc_called(this, "_ZN6S594C53v66Ev");}
void  S594C5 ::v67(){vfunc_called(this, "_ZN6S594C53v67Ev");}
S594C5 ::S594C5(){ note_ctor("S594C5", this);} // tgen

static void Test_S594C5()
{
  extern Class_Descriptor cd_S594C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S594C5, buf);
    S594C5 *dp, &lv = *(dp=new (buf) S594C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S594C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S594C5)");
    check_field_offset(lv, s594c5f0, ABISELECT(8,4), "S594C5.s594c5f0");
    check_field_offset(lv, s594c5f1, ABISELECT(16,8), "S594C5.s594c5f1");
    check_field_offset(lv, s594c5f2, ABISELECT(24,16), "S594C5.s594c5f2");
    check_field_offset(lv, s594c5f3, ABISELECT(56,32), "S594C5.s594c5f3");
    check_field_offset(lv, s594c5f4, ABISELECT(64,40), "S594C5.s594c5f4");
    check_field_offset(lv, s594c5f5, ABISELECT(72,44), "S594C5.s594c5f5");
    check_field_offset(lv, s594c5f6, ABISELECT(80,52), "S594C5.s594c5f6");
    test_class_info(&lv, &cd_S594C5);
    dp->~S594C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS594C5(Test_S594C5, "S594C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S594C5C1Ev();
extern void _ZN6S594C5D1Ev();
Name_Map name_map_S594C5[] = {
  NSPAIR(_ZN6S594C5C1Ev),
  NSPAIR(_ZN6S594C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S594C5[];
extern void _ZN6S594C5D1Ev();
extern void _ZN6S594C5D0Ev();
extern void _ZN6S594C52v4Ev();
extern void _ZN6S594C52v5Ev();
extern void _ZN6S594C52v6Ev();
extern void _ZN6S594C52v7Ev();
extern void _ZN6S594C52v8Ev();
extern void _ZN6S594C52v9Ev();
extern void _ZN6S594C53v10Ev();
extern void _ZN6S594C53v11Ev();
extern void _ZN6S594C53v12Ev();
extern void _ZN6S594C53v13Ev();
extern void _ZN6S594C53v14Ev();
extern void _ZN6S594C53v15Ev();
extern void _ZN6S594C53v16Ev();
extern void _ZN6S594C53v17Ev();
extern void _ZN6S594C53v18Ev();
extern void _ZN6S594C53v19Ev();
extern void _ZN6S594C53v20Ev();
extern void _ZN6S594C53v21Ev();
extern void _ZN6S594C53v22Ev();
extern void _ZN6S594C53v23Ev();
extern void _ZN6S594C53v24Ev();
extern void _ZN6S594C53v25Ev();
extern void _ZN6S594C53v26Ev();
extern void _ZN6S594C53v27Ev();
extern void _ZN6S594C53v28Ev();
extern void _ZN6S594C53v29Ev();
extern void _ZN6S594C53v30Ev();
extern void _ZN6S594C53v31Ev();
extern void _ZN6S594C53v32Ev();
extern void _ZN6S594C53v33Ev();
extern void _ZN6S594C53v34Ev();
extern void _ZN6S594C53v35Ev();
extern void _ZN6S594C53v36Ev();
extern void _ZN6S594C53v37Ev();
extern void _ZN6S594C53v38Ev();
extern void _ZN6S594C53v39Ev();
extern void _ZN6S594C53v40Ev();
extern void _ZN6S594C53v41Ev();
extern void _ZN6S594C53v42Ev();
extern void _ZN6S594C53v43Ev();
extern void _ZN6S594C53v44Ev();
extern void _ZN6S594C53v45Ev();
extern void _ZN6S594C53v46Ev();
extern void _ZN6S594C53v47Ev();
extern void _ZN6S594C53v48Ev();
extern void _ZN6S594C53v49Ev();
extern void _ZN6S594C53v50Ev();
extern void _ZN6S594C53v51Ev();
extern void _ZN6S594C53v52Ev();
extern void _ZN6S594C53v53Ev();
extern void _ZN6S594C53v54Ev();
extern void _ZN6S594C53v55Ev();
extern void _ZN6S594C53v56Ev();
extern void _ZN6S594C53v57Ev();
extern void _ZN6S594C53v58Ev();
extern void _ZN6S594C53v59Ev();
extern void _ZN6S594C53v60Ev();
extern void _ZN6S594C53v61Ev();
extern void _ZN6S594C53v62Ev();
extern void _ZN6S594C53v63Ev();
extern void _ZN6S594C53v64Ev();
extern void _ZN6S594C53v65Ev();
extern void _ZN6S594C53v66Ev();
extern void _ZN6S594C53v67Ev();
static  VTBL_ENTRY vtc_S594C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S594C5[0]),
  (VTBL_ENTRY)&_ZN6S594C5D1Ev,
  (VTBL_ENTRY)&_ZN6S594C5D0Ev,
  (VTBL_ENTRY)&_ZN6S594C52v4Ev,
  (VTBL_ENTRY)&_ZN6S594C52v5Ev,
  (VTBL_ENTRY)&_ZN6S594C52v6Ev,
  (VTBL_ENTRY)&_ZN6S594C52v7Ev,
  (VTBL_ENTRY)&_ZN6S594C52v8Ev,
  (VTBL_ENTRY)&_ZN6S594C52v9Ev,
  (VTBL_ENTRY)&_ZN6S594C53v10Ev,
  (VTBL_ENTRY)&_ZN6S594C53v11Ev,
  (VTBL_ENTRY)&_ZN6S594C53v12Ev,
  (VTBL_ENTRY)&_ZN6S594C53v13Ev,
  (VTBL_ENTRY)&_ZN6S594C53v14Ev,
  (VTBL_ENTRY)&_ZN6S594C53v15Ev,
  (VTBL_ENTRY)&_ZN6S594C53v16Ev,
  (VTBL_ENTRY)&_ZN6S594C53v17Ev,
  (VTBL_ENTRY)&_ZN6S594C53v18Ev,
  (VTBL_ENTRY)&_ZN6S594C53v19Ev,
  (VTBL_ENTRY)&_ZN6S594C53v20Ev,
  (VTBL_ENTRY)&_ZN6S594C53v21Ev,
  (VTBL_ENTRY)&_ZN6S594C53v22Ev,
  (VTBL_ENTRY)&_ZN6S594C53v23Ev,
  (VTBL_ENTRY)&_ZN6S594C53v24Ev,
  (VTBL_ENTRY)&_ZN6S594C53v25Ev,
  (VTBL_ENTRY)&_ZN6S594C53v26Ev,
  (VTBL_ENTRY)&_ZN6S594C53v27Ev,
  (VTBL_ENTRY)&_ZN6S594C53v28Ev,
  (VTBL_ENTRY)&_ZN6S594C53v29Ev,
  (VTBL_ENTRY)&_ZN6S594C53v30Ev,
  (VTBL_ENTRY)&_ZN6S594C53v31Ev,
  (VTBL_ENTRY)&_ZN6S594C53v32Ev,
  (VTBL_ENTRY)&_ZN6S594C53v33Ev,
  (VTBL_ENTRY)&_ZN6S594C53v34Ev,
  (VTBL_ENTRY)&_ZN6S594C53v35Ev,
  (VTBL_ENTRY)&_ZN6S594C53v36Ev,
  (VTBL_ENTRY)&_ZN6S594C53v37Ev,
  (VTBL_ENTRY)&_ZN6S594C53v38Ev,
  (VTBL_ENTRY)&_ZN6S594C53v39Ev,
  (VTBL_ENTRY)&_ZN6S594C53v40Ev,
  (VTBL_ENTRY)&_ZN6S594C53v41Ev,
  (VTBL_ENTRY)&_ZN6S594C53v42Ev,
  (VTBL_ENTRY)&_ZN6S594C53v43Ev,
  (VTBL_ENTRY)&_ZN6S594C53v44Ev,
  (VTBL_ENTRY)&_ZN6S594C53v45Ev,
  (VTBL_ENTRY)&_ZN6S594C53v46Ev,
  (VTBL_ENTRY)&_ZN6S594C53v47Ev,
  (VTBL_ENTRY)&_ZN6S594C53v48Ev,
  (VTBL_ENTRY)&_ZN6S594C53v49Ev,
  (VTBL_ENTRY)&_ZN6S594C53v50Ev,
  (VTBL_ENTRY)&_ZN6S594C53v51Ev,
  (VTBL_ENTRY)&_ZN6S594C53v52Ev,
  (VTBL_ENTRY)&_ZN6S594C53v53Ev,
  (VTBL_ENTRY)&_ZN6S594C53v54Ev,
  (VTBL_ENTRY)&_ZN6S594C53v55Ev,
  (VTBL_ENTRY)&_ZN6S594C53v56Ev,
  (VTBL_ENTRY)&_ZN6S594C53v57Ev,
  (VTBL_ENTRY)&_ZN6S594C53v58Ev,
  (VTBL_ENTRY)&_ZN6S594C53v59Ev,
  (VTBL_ENTRY)&_ZN6S594C53v60Ev,
  (VTBL_ENTRY)&_ZN6S594C53v61Ev,
  (VTBL_ENTRY)&_ZN6S594C53v62Ev,
  (VTBL_ENTRY)&_ZN6S594C53v63Ev,
  (VTBL_ENTRY)&_ZN6S594C53v64Ev,
  (VTBL_ENTRY)&_ZN6S594C53v65Ev,
  (VTBL_ENTRY)&_ZN6S594C53v66Ev,
  (VTBL_ENTRY)&_ZN6S594C53v67Ev,
};
extern VTBL_ENTRY _ZTI6S594C5[];
extern  VTBL_ENTRY _ZTV6S594C5[];
Class_Descriptor cd_S594C5 = {  "S594C5", // class name
  0,0,//no base classes
  &(vtc_S594C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S594C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S594C5),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  S594C4  : S594C5 {
  int s594c4f0[2];
  void *s594c4f1;
  int s594c4f2[2];
  ::S239C8_nt s594c4f3;
  ::S239C8_nt s594c4f4;
  ::S239C12_nt s594c4f5;
  ::S239C8_nt s594c4f6;
  unsigned int s594c4f7:1;
  unsigned int s594c4f8:1;
  unsigned int s594c4f9:1;
  unsigned int s594c4f10:1;
  unsigned int s594c4f11:1;
  int s594c4f12[2];
  virtual  ~S594C4(); // _ZN6S594C4D1Ev
  virtual void  v68(); // _ZN6S594C43v68Ev
  virtual void  v69(); // _ZN6S594C43v69Ev
  virtual void  v70(); // _ZN6S594C43v70Ev
  virtual void  v71(); // _ZN6S594C43v71Ev
  virtual void  v72(); // _ZN6S594C43v72Ev
  virtual void  v73(); // _ZN6S594C43v73Ev
  virtual void  v74(); // _ZN6S594C43v74Ev
  virtual void  v75(); // _ZN6S594C43v75Ev
  virtual void  v76(); // _ZN6S594C43v76Ev
  virtual void  v77(); // _ZN6S594C43v77Ev
  virtual void  v78(); // _ZN6S594C43v78Ev
  virtual void  v79(); // _ZN6S594C43v79Ev
  virtual void  v80(); // _ZN6S594C43v80Ev
  virtual void  v81(); // _ZN6S594C43v81Ev
  virtual void  v82(); // _ZN6S594C43v82Ev
  virtual void  v83(); // _ZN6S594C43v83Ev
  virtual void  v84(); // _ZN6S594C43v84Ev
  virtual void  v85(); // _ZN6S594C43v85Ev
  virtual void  v86(); // _ZN6S594C43v86Ev
  virtual void  v87(); // _ZN6S594C43v87Ev
  virtual void  v88(); // _ZN6S594C43v88Ev
  virtual void  v89(); // _ZN6S594C43v89Ev
  S594C4(); // tgen
};
//SIG(-1 S594C4) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S594C4 ::~S594C4(){ note_dtor("S594C4", this);}
void  S594C4 ::v68(){vfunc_called(this, "_ZN6S594C43v68Ev");}
void  S594C4 ::v69(){vfunc_called(this, "_ZN6S594C43v69Ev");}
void  S594C4 ::v70(){vfunc_called(this, "_ZN6S594C43v70Ev");}
void  S594C4 ::v71(){vfunc_called(this, "_ZN6S594C43v71Ev");}
void  S594C4 ::v72(){vfunc_called(this, "_ZN6S594C43v72Ev");}
void  S594C4 ::v73(){vfunc_called(this, "_ZN6S594C43v73Ev");}
void  S594C4 ::v74(){vfunc_called(this, "_ZN6S594C43v74Ev");}
void  S594C4 ::v75(){vfunc_called(this, "_ZN6S594C43v75Ev");}
void  S594C4 ::v76(){vfunc_called(this, "_ZN6S594C43v76Ev");}
void  S594C4 ::v77(){vfunc_called(this, "_ZN6S594C43v77Ev");}
void  S594C4 ::v78(){vfunc_called(this, "_ZN6S594C43v78Ev");}
void  S594C4 ::v79(){vfunc_called(this, "_ZN6S594C43v79Ev");}
void  S594C4 ::v80(){vfunc_called(this, "_ZN6S594C43v80Ev");}
void  S594C4 ::v81(){vfunc_called(this, "_ZN6S594C43v81Ev");}
void  S594C4 ::v82(){vfunc_called(this, "_ZN6S594C43v82Ev");}
void  S594C4 ::v83(){vfunc_called(this, "_ZN6S594C43v83Ev");}
void  S594C4 ::v84(){vfunc_called(this, "_ZN6S594C43v84Ev");}
void  S594C4 ::v85(){vfunc_called(this, "_ZN6S594C43v85Ev");}
void  S594C4 ::v86(){vfunc_called(this, "_ZN6S594C43v86Ev");}
void  S594C4 ::v87(){vfunc_called(this, "_ZN6S594C43v87Ev");}
void  S594C4 ::v88(){vfunc_called(this, "_ZN6S594C43v88Ev");}
void  S594C4 ::v89(){vfunc_called(this, "_ZN6S594C43v89Ev");}
S594C4 ::S594C4(){ note_ctor("S594C4", this);} // tgen

static void Test_S594C4()
{
  extern Class_Descriptor cd_S594C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S594C4, buf);
    S594C4 *dp, &lv = *(dp=new (buf) S594C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S594C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S594C4)");
    check_base_class_offset(lv, (S594C5*), 0, "S594C4");
    check_field_offset(lv, s594c4f0, ABISELECT(96,60), "S594C4.s594c4f0");
    check_field_offset(lv, s594c4f1, ABISELECT(104,68), "S594C4.s594c4f1");
    check_field_offset(lv, s594c4f2, ABISELECT(112,72), "S594C4.s594c4f2");
    check_field_offset(lv, s594c4f3, ABISELECT(120,80), "S594C4.s594c4f3");
    check_field_offset(lv, s594c4f4, ABISELECT(136,92), "S594C4.s594c4f4");
    check_field_offset(lv, s594c4f5, ABISELECT(152,104), "S594C4.s594c4f5");
    check_field_offset(lv, s594c4f6, ABISELECT(160,108), "S594C4.s594c4f6");
    set_bf_and_test(lv, s594c4f7, ABISELECT(176,120), 0, 1, 1, "S594C4");
    set_bf_and_test(lv, s594c4f8, ABISELECT(176,120), 1, 1, 1, "S594C4");
    set_bf_and_test(lv, s594c4f9, ABISELECT(176,120), 2, 1, 1, "S594C4");
    set_bf_and_test(lv, s594c4f10, ABISELECT(176,120), 3, 1, 1, "S594C4");
    set_bf_and_test(lv, s594c4f11, ABISELECT(176,120), 4, 1, 1, "S594C4");
    check_field_offset(lv, s594c4f12, ABISELECT(180,124), "S594C4.s594c4f12");
    test_class_info(&lv, &cd_S594C4);
    dp->~S594C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS594C4(Test_S594C4, "S594C4", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S594C4C1Ev();
extern void _ZN6S594C4D1Ev();
Name_Map name_map_S594C4[] = {
  NSPAIR(_ZN6S594C4C1Ev),
  NSPAIR(_ZN6S594C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S594C5;
extern VTBL_ENTRY _ZTI6S594C5[];
extern  VTBL_ENTRY _ZTV6S594C5[];
static Base_Class bases_S594C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S594C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S594C4[];
extern void _ZN6S594C4D1Ev();
extern void _ZN6S594C4D0Ev();
extern void _ZN6S594C52v4Ev();
extern void _ZN6S594C52v5Ev();
extern void _ZN6S594C52v6Ev();
extern void _ZN6S594C52v7Ev();
extern void _ZN6S594C52v8Ev();
extern void _ZN6S594C52v9Ev();
extern void _ZN6S594C53v10Ev();
extern void _ZN6S594C53v11Ev();
extern void _ZN6S594C53v12Ev();
extern void _ZN6S594C53v13Ev();
extern void _ZN6S594C53v14Ev();
extern void _ZN6S594C53v15Ev();
extern void _ZN6S594C53v16Ev();
extern void _ZN6S594C53v17Ev();
extern void _ZN6S594C53v18Ev();
extern void _ZN6S594C53v19Ev();
extern void _ZN6S594C53v20Ev();
extern void _ZN6S594C53v21Ev();
extern void _ZN6S594C53v22Ev();
extern void _ZN6S594C53v23Ev();
extern void _ZN6S594C53v24Ev();
extern void _ZN6S594C53v25Ev();
extern void _ZN6S594C53v26Ev();
extern void _ZN6S594C53v27Ev();
extern void _ZN6S594C53v28Ev();
extern void _ZN6S594C53v29Ev();
extern void _ZN6S594C53v30Ev();
extern void _ZN6S594C53v31Ev();
extern void _ZN6S594C53v32Ev();
extern void _ZN6S594C53v33Ev();
extern void _ZN6S594C53v34Ev();
extern void _ZN6S594C53v35Ev();
extern void _ZN6S594C53v36Ev();
extern void _ZN6S594C53v37Ev();
extern void _ZN6S594C53v38Ev();
extern void _ZN6S594C53v39Ev();
extern void _ZN6S594C53v40Ev();
extern void _ZN6S594C53v41Ev();
extern void _ZN6S594C53v42Ev();
extern void _ZN6S594C53v43Ev();
extern void _ZN6S594C53v44Ev();
extern void _ZN6S594C53v45Ev();
extern void _ZN6S594C53v46Ev();
extern void _ZN6S594C53v47Ev();
extern void _ZN6S594C53v48Ev();
extern void _ZN6S594C53v49Ev();
extern void _ZN6S594C53v50Ev();
extern void _ZN6S594C53v51Ev();
extern void _ZN6S594C53v52Ev();
extern void _ZN6S594C53v53Ev();
extern void _ZN6S594C53v54Ev();
extern void _ZN6S594C53v55Ev();
extern void _ZN6S594C53v56Ev();
extern void _ZN6S594C53v57Ev();
extern void _ZN6S594C53v58Ev();
extern void _ZN6S594C53v59Ev();
extern void _ZN6S594C53v60Ev();
extern void _ZN6S594C53v61Ev();
extern void _ZN6S594C53v62Ev();
extern void _ZN6S594C53v63Ev();
extern void _ZN6S594C53v64Ev();
extern void _ZN6S594C53v65Ev();
extern void _ZN6S594C53v66Ev();
extern void _ZN6S594C53v67Ev();
extern void _ZN6S594C43v68Ev();
extern void _ZN6S594C43v69Ev();
extern void _ZN6S594C43v70Ev();
extern void _ZN6S594C43v71Ev();
extern void _ZN6S594C43v72Ev();
extern void _ZN6S594C43v73Ev();
extern void _ZN6S594C43v74Ev();
extern void _ZN6S594C43v75Ev();
extern void _ZN6S594C43v76Ev();
extern void _ZN6S594C43v77Ev();
extern void _ZN6S594C43v78Ev();
extern void _ZN6S594C43v79Ev();
extern void _ZN6S594C43v80Ev();
extern void _ZN6S594C43v81Ev();
extern void _ZN6S594C43v82Ev();
extern void _ZN6S594C43v83Ev();
extern void _ZN6S594C43v84Ev();
extern void _ZN6S594C43v85Ev();
extern void _ZN6S594C43v86Ev();
extern void _ZN6S594C43v87Ev();
extern void _ZN6S594C43v88Ev();
extern void _ZN6S594C43v89Ev();
static  VTBL_ENTRY vtc_S594C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S594C4[0]),
  (VTBL_ENTRY)&_ZN6S594C4D1Ev,
  (VTBL_ENTRY)&_ZN6S594C4D0Ev,
  (VTBL_ENTRY)&_ZN6S594C52v4Ev,
  (VTBL_ENTRY)&_ZN6S594C52v5Ev,
  (VTBL_ENTRY)&_ZN6S594C52v6Ev,
  (VTBL_ENTRY)&_ZN6S594C52v7Ev,
  (VTBL_ENTRY)&_ZN6S594C52v8Ev,
  (VTBL_ENTRY)&_ZN6S594C52v9Ev,
  (VTBL_ENTRY)&_ZN6S594C53v10Ev,
  (VTBL_ENTRY)&_ZN6S594C53v11Ev,
  (VTBL_ENTRY)&_ZN6S594C53v12Ev,
  (VTBL_ENTRY)&_ZN6S594C53v13Ev,
  (VTBL_ENTRY)&_ZN6S594C53v14Ev,
  (VTBL_ENTRY)&_ZN6S594C53v15Ev,
  (VTBL_ENTRY)&_ZN6S594C53v16Ev,
  (VTBL_ENTRY)&_ZN6S594C53v17Ev,
  (VTBL_ENTRY)&_ZN6S594C53v18Ev,
  (VTBL_ENTRY)&_ZN6S594C53v19Ev,
  (VTBL_ENTRY)&_ZN6S594C53v20Ev,
  (VTBL_ENTRY)&_ZN6S594C53v21Ev,
  (VTBL_ENTRY)&_ZN6S594C53v22Ev,
  (VTBL_ENTRY)&_ZN6S594C53v23Ev,
  (VTBL_ENTRY)&_ZN6S594C53v24Ev,
  (VTBL_ENTRY)&_ZN6S594C53v25Ev,
  (VTBL_ENTRY)&_ZN6S594C53v26Ev,
  (VTBL_ENTRY)&_ZN6S594C53v27Ev,
  (VTBL_ENTRY)&_ZN6S594C53v28Ev,
  (VTBL_ENTRY)&_ZN6S594C53v29Ev,
  (VTBL_ENTRY)&_ZN6S594C53v30Ev,
  (VTBL_ENTRY)&_ZN6S594C53v31Ev,
  (VTBL_ENTRY)&_ZN6S594C53v32Ev,
  (VTBL_ENTRY)&_ZN6S594C53v33Ev,
  (VTBL_ENTRY)&_ZN6S594C53v34Ev,
  (VTBL_ENTRY)&_ZN6S594C53v35Ev,
  (VTBL_ENTRY)&_ZN6S594C53v36Ev,
  (VTBL_ENTRY)&_ZN6S594C53v37Ev,
  (VTBL_ENTRY)&_ZN6S594C53v38Ev,
  (VTBL_ENTRY)&_ZN6S594C53v39Ev,
  (VTBL_ENTRY)&_ZN6S594C53v40Ev,
  (VTBL_ENTRY)&_ZN6S594C53v41Ev,
  (VTBL_ENTRY)&_ZN6S594C53v42Ev,
  (VTBL_ENTRY)&_ZN6S594C53v43Ev,
  (VTBL_ENTRY)&_ZN6S594C53v44Ev,
  (VTBL_ENTRY)&_ZN6S594C53v45Ev,
  (VTBL_ENTRY)&_ZN6S594C53v46Ev,
  (VTBL_ENTRY)&_ZN6S594C53v47Ev,
  (VTBL_ENTRY)&_ZN6S594C53v48Ev,
  (VTBL_ENTRY)&_ZN6S594C53v49Ev,
  (VTBL_ENTRY)&_ZN6S594C53v50Ev,
  (VTBL_ENTRY)&_ZN6S594C53v51Ev,
  (VTBL_ENTRY)&_ZN6S594C53v52Ev,
  (VTBL_ENTRY)&_ZN6S594C53v53Ev,
  (VTBL_ENTRY)&_ZN6S594C53v54Ev,
  (VTBL_ENTRY)&_ZN6S594C53v55Ev,
  (VTBL_ENTRY)&_ZN6S594C53v56Ev,
  (VTBL_ENTRY)&_ZN6S594C53v57Ev,
  (VTBL_ENTRY)&_ZN6S594C53v58Ev,
  (VTBL_ENTRY)&_ZN6S594C53v59Ev,
  (VTBL_ENTRY)&_ZN6S594C53v60Ev,
  (VTBL_ENTRY)&_ZN6S594C53v61Ev,
  (VTBL_ENTRY)&_ZN6S594C53v62Ev,
  (VTBL_ENTRY)&_ZN6S594C53v63Ev,
  (VTBL_ENTRY)&_ZN6S594C53v64Ev,
  (VTBL_ENTRY)&_ZN6S594C53v65Ev,
  (VTBL_ENTRY)&_ZN6S594C53v66Ev,
  (VTBL_ENTRY)&_ZN6S594C53v67Ev,
  (VTBL_ENTRY)&_ZN6S594C43v68Ev,
  (VTBL_ENTRY)&_ZN6S594C43v69Ev,
  (VTBL_ENTRY)&_ZN6S594C43v70Ev,
  (VTBL_ENTRY)&_ZN6S594C43v71Ev,
  (VTBL_ENTRY)&_ZN6S594C43v72Ev,
  (VTBL_ENTRY)&_ZN6S594C43v73Ev,
  (VTBL_ENTRY)&_ZN6S594C43v74Ev,
  (VTBL_ENTRY)&_ZN6S594C43v75Ev,
  (VTBL_ENTRY)&_ZN6S594C43v76Ev,
  (VTBL_ENTRY)&_ZN6S594C43v77Ev,
  (VTBL_ENTRY)&_ZN6S594C43v78Ev,
  (VTBL_ENTRY)&_ZN6S594C43v79Ev,
  (VTBL_ENTRY)&_ZN6S594C43v80Ev,
  (VTBL_ENTRY)&_ZN6S594C43v81Ev,
  (VTBL_ENTRY)&_ZN6S594C43v82Ev,
  (VTBL_ENTRY)&_ZN6S594C43v83Ev,
  (VTBL_ENTRY)&_ZN6S594C43v84Ev,
  (VTBL_ENTRY)&_ZN6S594C43v85Ev,
  (VTBL_ENTRY)&_ZN6S594C43v86Ev,
  (VTBL_ENTRY)&_ZN6S594C43v87Ev,
  (VTBL_ENTRY)&_ZN6S594C43v88Ev,
  (VTBL_ENTRY)&_ZN6S594C43v89Ev,
};
extern VTBL_ENTRY _ZTI6S594C4[];
extern  VTBL_ENTRY _ZTV6S594C4[];
Class_Descriptor cd_S594C4 = {  "S594C4", // class name
  bases_S594C4, 1,
  &(vtc_S594C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S594C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S594C4),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S594C3  : S594C4 {
  unsigned int s594c3f0:1;
  unsigned int s594c3f1:1;
  unsigned int s594c3f2:1;
  ::S3221C17 s594c3f3;
  ::S3221C11 s594c3f4;
  ::S3221C5_nt s594c3f5;
  ::S3168C19 s594c3f6;
  int s594c3f7[3];
  virtual  ~S594C3(); // _ZN6S594C3D1Ev
  virtual void  v90(); // _ZN6S594C33v90Ev
  virtual void  v91(); // _ZN6S594C33v91Ev
  virtual void  v92(); // _ZN6S594C33v92Ev
  virtual void  v93(); // _ZN6S594C33v93Ev
  virtual void  v94(); // _ZN6S594C33v94Ev
  virtual void  v95(); // _ZN6S594C33v95Ev
  virtual void  v96(); // _ZN6S594C33v96Ev
  virtual void  v97(); // _ZN6S594C33v97Ev
  virtual void  v98(); // _ZN6S594C33v98Ev
  virtual void  v99(); // _ZN6S594C33v99Ev
  virtual void  v100(); // _ZN6S594C34v100Ev
  virtual void  v101(); // _ZN6S594C34v101Ev
  virtual void  v102(); // _ZN6S594C34v102Ev
  virtual void  v103(); // _ZN6S594C34v103Ev
  virtual void  v104(); // _ZN6S594C34v104Ev
  virtual void  v105(); // _ZN6S594C34v105Ev
  virtual void  v106(); // _ZN6S594C34v106Ev
  virtual void  v107(); // _ZN6S594C34v107Ev
  virtual void  v108(); // _ZN6S594C34v108Ev
  virtual void  v109(); // _ZN6S594C34v109Ev
  S594C3(); // tgen
};
//SIG(-1 S594C3) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S594C3 ::~S594C3(){ note_dtor("S594C3", this);}
void  S594C3 ::v90(){vfunc_called(this, "_ZN6S594C33v90Ev");}
void  S594C3 ::v91(){vfunc_called(this, "_ZN6S594C33v91Ev");}
void  S594C3 ::v92(){vfunc_called(this, "_ZN6S594C33v92Ev");}
void  S594C3 ::v93(){vfunc_called(this, "_ZN6S594C33v93Ev");}
void  S594C3 ::v94(){vfunc_called(this, "_ZN6S594C33v94Ev");}
void  S594C3 ::v95(){vfunc_called(this, "_ZN6S594C33v95Ev");}
void  S594C3 ::v96(){vfunc_called(this, "_ZN6S594C33v96Ev");}
void  S594C3 ::v97(){vfunc_called(this, "_ZN6S594C33v97Ev");}
void  S594C3 ::v98(){vfunc_called(this, "_ZN6S594C33v98Ev");}
void  S594C3 ::v99(){vfunc_called(this, "_ZN6S594C33v99Ev");}
void  S594C3 ::v100(){vfunc_called(this, "_ZN6S594C34v100Ev");}
void  S594C3 ::v101(){vfunc_called(this, "_ZN6S594C34v101Ev");}
void  S594C3 ::v102(){vfunc_called(this, "_ZN6S594C34v102Ev");}
void  S594C3 ::v103(){vfunc_called(this, "_ZN6S594C34v103Ev");}
void  S594C3 ::v104(){vfunc_called(this, "_ZN6S594C34v104Ev");}
void  S594C3 ::v105(){vfunc_called(this, "_ZN6S594C34v105Ev");}
void  S594C3 ::v106(){vfunc_called(this, "_ZN6S594C34v106Ev");}
void  S594C3 ::v107(){vfunc_called(this, "_ZN6S594C34v107Ev");}
void  S594C3 ::v108(){vfunc_called(this, "_ZN6S594C34v108Ev");}
void  S594C3 ::v109(){vfunc_called(this, "_ZN6S594C34v109Ev");}
S594C3 ::S594C3(){ note_ctor("S594C3", this);} // tgen

static void Test_S594C3()
{
  extern Class_Descriptor cd_S594C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S594C3, buf);
    S594C3 *dp, &lv = *(dp=new (buf) S594C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S594C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S594C3)");
    check_base_class_offset(lv, (S594C5*)(S594C4*), 0, "S594C3");
    check_base_class_offset(lv, (S594C4*), 0, "S594C3");
    set_bf_and_test(lv, s594c3f0, ABISELECT(188,132), 0, 1, 1, "S594C3");
    set_bf_and_test(lv, s594c3f1, ABISELECT(188,132), 1, 1, 1, "S594C3");
    set_bf_and_test(lv, s594c3f2, ABISELECT(188,132), 2, 1, 1, "S594C3");
    check_field_offset(lv, s594c3f3, ABISELECT(192,136), "S594C3.s594c3f3");
    check_field_offset(lv, s594c3f4, ABISELECT(208,148), "S594C3.s594c3f4");
    check_field_offset(lv, s594c3f5, ABISELECT(224,160), "S594C3.s594c3f5");
    check_field_offset(lv, s594c3f6, ABISELECT(240,172), "S594C3.s594c3f6");
    check_field_offset(lv, s594c3f7, ABISELECT(256,184), "S594C3.s594c3f7");
    test_class_info(&lv, &cd_S594C3);
    dp->~S594C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS594C3(Test_S594C3, "S594C3", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S594C3C1Ev();
extern void _ZN6S594C3D1Ev();
Name_Map name_map_S594C3[] = {
  NSPAIR(_ZN6S594C3C1Ev),
  NSPAIR(_ZN6S594C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S594C5;
extern VTBL_ENTRY _ZTI6S594C5[];
extern  VTBL_ENTRY _ZTV6S594C5[];
extern Class_Descriptor cd_S594C4;
extern VTBL_ENTRY _ZTI6S594C4[];
extern  VTBL_ENTRY _ZTV6S594C4[];
static Base_Class bases_S594C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S594C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S594C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S594C3[];
extern void _ZN6S594C3D1Ev();
extern void _ZN6S594C3D0Ev();
extern void _ZN6S594C52v4Ev();
extern void _ZN6S594C52v5Ev();
extern void _ZN6S594C52v6Ev();
extern void _ZN6S594C52v7Ev();
extern void _ZN6S594C52v8Ev();
extern void _ZN6S594C52v9Ev();
extern void _ZN6S594C53v10Ev();
extern void _ZN6S594C53v11Ev();
extern void _ZN6S594C53v12Ev();
extern void _ZN6S594C53v13Ev();
extern void _ZN6S594C53v14Ev();
extern void _ZN6S594C53v15Ev();
extern void _ZN6S594C53v16Ev();
extern void _ZN6S594C53v17Ev();
extern void _ZN6S594C53v18Ev();
extern void _ZN6S594C53v19Ev();
extern void _ZN6S594C53v20Ev();
extern void _ZN6S594C53v21Ev();
extern void _ZN6S594C53v22Ev();
extern void _ZN6S594C53v23Ev();
extern void _ZN6S594C53v24Ev();
extern void _ZN6S594C53v25Ev();
extern void _ZN6S594C53v26Ev();
extern void _ZN6S594C53v27Ev();
extern void _ZN6S594C53v28Ev();
extern void _ZN6S594C53v29Ev();
extern void _ZN6S594C53v30Ev();
extern void _ZN6S594C53v31Ev();
extern void _ZN6S594C53v32Ev();
extern void _ZN6S594C53v33Ev();
extern void _ZN6S594C53v34Ev();
extern void _ZN6S594C53v35Ev();
extern void _ZN6S594C53v36Ev();
extern void _ZN6S594C53v37Ev();
extern void _ZN6S594C53v38Ev();
extern void _ZN6S594C53v39Ev();
extern void _ZN6S594C53v40Ev();
extern void _ZN6S594C53v41Ev();
extern void _ZN6S594C53v42Ev();
extern void _ZN6S594C53v43Ev();
extern void _ZN6S594C53v44Ev();
extern void _ZN6S594C53v45Ev();
extern void _ZN6S594C53v46Ev();
extern void _ZN6S594C53v47Ev();
extern void _ZN6S594C53v48Ev();
extern void _ZN6S594C53v49Ev();
extern void _ZN6S594C53v50Ev();
extern void _ZN6S594C53v51Ev();
extern void _ZN6S594C53v52Ev();
extern void _ZN6S594C53v53Ev();
extern void _ZN6S594C53v54Ev();
extern void _ZN6S594C53v55Ev();
extern void _ZN6S594C53v56Ev();
extern void _ZN6S594C53v57Ev();
extern void _ZN6S594C53v58Ev();
extern void _ZN6S594C53v59Ev();
extern void _ZN6S594C53v60Ev();
extern void _ZN6S594C53v61Ev();
extern void _ZN6S594C53v62Ev();
extern void _ZN6S594C53v63Ev();
extern void _ZN6S594C53v64Ev();
extern void _ZN6S594C53v65Ev();
extern void _ZN6S594C53v66Ev();
extern void _ZN6S594C53v67Ev();
extern void _ZN6S594C43v68Ev();
extern void _ZN6S594C43v69Ev();
extern void _ZN6S594C43v70Ev();
extern void _ZN6S594C43v71Ev();
extern void _ZN6S594C43v72Ev();
extern void _ZN6S594C43v73Ev();
extern void _ZN6S594C43v74Ev();
extern void _ZN6S594C43v75Ev();
extern void _ZN6S594C43v76Ev();
extern void _ZN6S594C43v77Ev();
extern void _ZN6S594C43v78Ev();
extern void _ZN6S594C43v79Ev();
extern void _ZN6S594C43v80Ev();
extern void _ZN6S594C43v81Ev();
extern void _ZN6S594C43v82Ev();
extern void _ZN6S594C43v83Ev();
extern void _ZN6S594C43v84Ev();
extern void _ZN6S594C43v85Ev();
extern void _ZN6S594C43v86Ev();
extern void _ZN6S594C43v87Ev();
extern void _ZN6S594C43v88Ev();
extern void _ZN6S594C43v89Ev();
extern void _ZN6S594C33v90Ev();
extern void _ZN6S594C33v91Ev();
extern void _ZN6S594C33v92Ev();
extern void _ZN6S594C33v93Ev();
extern void _ZN6S594C33v94Ev();
extern void _ZN6S594C33v95Ev();
extern void _ZN6S594C33v96Ev();
extern void _ZN6S594C33v97Ev();
extern void _ZN6S594C33v98Ev();
extern void _ZN6S594C33v99Ev();
extern void _ZN6S594C34v100Ev();
extern void _ZN6S594C34v101Ev();
extern void _ZN6S594C34v102Ev();
extern void _ZN6S594C34v103Ev();
extern void _ZN6S594C34v104Ev();
extern void _ZN6S594C34v105Ev();
extern void _ZN6S594C34v106Ev();
extern void _ZN6S594C34v107Ev();
extern void _ZN6S594C34v108Ev();
extern void _ZN6S594C34v109Ev();
static  VTBL_ENTRY vtc_S594C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S594C3[0]),
  (VTBL_ENTRY)&_ZN6S594C3D1Ev,
  (VTBL_ENTRY)&_ZN6S594C3D0Ev,
  (VTBL_ENTRY)&_ZN6S594C52v4Ev,
  (VTBL_ENTRY)&_ZN6S594C52v5Ev,
  (VTBL_ENTRY)&_ZN6S594C52v6Ev,
  (VTBL_ENTRY)&_ZN6S594C52v7Ev,
  (VTBL_ENTRY)&_ZN6S594C52v8Ev,
  (VTBL_ENTRY)&_ZN6S594C52v9Ev,
  (VTBL_ENTRY)&_ZN6S594C53v10Ev,
  (VTBL_ENTRY)&_ZN6S594C53v11Ev,
  (VTBL_ENTRY)&_ZN6S594C53v12Ev,
  (VTBL_ENTRY)&_ZN6S594C53v13Ev,
  (VTBL_ENTRY)&_ZN6S594C53v14Ev,
  (VTBL_ENTRY)&_ZN6S594C53v15Ev,
  (VTBL_ENTRY)&_ZN6S594C53v16Ev,
  (VTBL_ENTRY)&_ZN6S594C53v17Ev,
  (VTBL_ENTRY)&_ZN6S594C53v18Ev,
  (VTBL_ENTRY)&_ZN6S594C53v19Ev,
  (VTBL_ENTRY)&_ZN6S594C53v20Ev,
  (VTBL_ENTRY)&_ZN6S594C53v21Ev,
  (VTBL_ENTRY)&_ZN6S594C53v22Ev,
  (VTBL_ENTRY)&_ZN6S594C53v23Ev,
  (VTBL_ENTRY)&_ZN6S594C53v24Ev,
  (VTBL_ENTRY)&_ZN6S594C53v25Ev,
  (VTBL_ENTRY)&_ZN6S594C53v26Ev,
  (VTBL_ENTRY)&_ZN6S594C53v27Ev,
  (VTBL_ENTRY)&_ZN6S594C53v28Ev,
  (VTBL_ENTRY)&_ZN6S594C53v29Ev,
  (VTBL_ENTRY)&_ZN6S594C53v30Ev,
  (VTBL_ENTRY)&_ZN6S594C53v31Ev,
  (VTBL_ENTRY)&_ZN6S594C53v32Ev,
  (VTBL_ENTRY)&_ZN6S594C53v33Ev,
  (VTBL_ENTRY)&_ZN6S594C53v34Ev,
  (VTBL_ENTRY)&_ZN6S594C53v35Ev,
  (VTBL_ENTRY)&_ZN6S594C53v36Ev,
  (VTBL_ENTRY)&_ZN6S594C53v37Ev,
  (VTBL_ENTRY)&_ZN6S594C53v38Ev,
  (VTBL_ENTRY)&_ZN6S594C53v39Ev,
  (VTBL_ENTRY)&_ZN6S594C53v40Ev,
  (VTBL_ENTRY)&_ZN6S594C53v41Ev,
  (VTBL_ENTRY)&_ZN6S594C53v42Ev,
  (VTBL_ENTRY)&_ZN6S594C53v43Ev,
  (VTBL_ENTRY)&_ZN6S594C53v44Ev,
  (VTBL_ENTRY)&_ZN6S594C53v45Ev,
  (VTBL_ENTRY)&_ZN6S594C53v46Ev,
  (VTBL_ENTRY)&_ZN6S594C53v47Ev,
  (VTBL_ENTRY)&_ZN6S594C53v48Ev,
  (VTBL_ENTRY)&_ZN6S594C53v49Ev,
  (VTBL_ENTRY)&_ZN6S594C53v50Ev,
  (VTBL_ENTRY)&_ZN6S594C53v51Ev,
  (VTBL_ENTRY)&_ZN6S594C53v52Ev,
  (VTBL_ENTRY)&_ZN6S594C53v53Ev,
  (VTBL_ENTRY)&_ZN6S594C53v54Ev,
  (VTBL_ENTRY)&_ZN6S594C53v55Ev,
  (VTBL_ENTRY)&_ZN6S594C53v56Ev,
  (VTBL_ENTRY)&_ZN6S594C53v57Ev,
  (VTBL_ENTRY)&_ZN6S594C53v58Ev,
  (VTBL_ENTRY)&_ZN6S594C53v59Ev,
  (VTBL_ENTRY)&_ZN6S594C53v60Ev,
  (VTBL_ENTRY)&_ZN6S594C53v61Ev,
  (VTBL_ENTRY)&_ZN6S594C53v62Ev,
  (VTBL_ENTRY)&_ZN6S594C53v63Ev,
  (VTBL_ENTRY)&_ZN6S594C53v64Ev,
  (VTBL_ENTRY)&_ZN6S594C53v65Ev,
  (VTBL_ENTRY)&_ZN6S594C53v66Ev,
  (VTBL_ENTRY)&_ZN6S594C53v67Ev,
  (VTBL_ENTRY)&_ZN6S594C43v68Ev,
  (VTBL_ENTRY)&_ZN6S594C43v69Ev,
  (VTBL_ENTRY)&_ZN6S594C43v70Ev,
  (VTBL_ENTRY)&_ZN6S594C43v71Ev,
  (VTBL_ENTRY)&_ZN6S594C43v72Ev,
  (VTBL_ENTRY)&_ZN6S594C43v73Ev,
  (VTBL_ENTRY)&_ZN6S594C43v74Ev,
  (VTBL_ENTRY)&_ZN6S594C43v75Ev,
  (VTBL_ENTRY)&_ZN6S594C43v76Ev,
  (VTBL_ENTRY)&_ZN6S594C43v77Ev,
  (VTBL_ENTRY)&_ZN6S594C43v78Ev,
  (VTBL_ENTRY)&_ZN6S594C43v79Ev,
  (VTBL_ENTRY)&_ZN6S594C43v80Ev,
  (VTBL_ENTRY)&_ZN6S594C43v81Ev,
  (VTBL_ENTRY)&_ZN6S594C43v82Ev,
  (VTBL_ENTRY)&_ZN6S594C43v83Ev,
  (VTBL_ENTRY)&_ZN6S594C43v84Ev,
  (VTBL_ENTRY)&_ZN6S594C43v85Ev,
  (VTBL_ENTRY)&_ZN6S594C43v86Ev,
  (VTBL_ENTRY)&_ZN6S594C43v87Ev,
  (VTBL_ENTRY)&_ZN6S594C43v88Ev,
  (VTBL_ENTRY)&_ZN6S594C43v89Ev,
  (VTBL_ENTRY)&_ZN6S594C33v90Ev,
  (VTBL_ENTRY)&_ZN6S594C33v91Ev,
  (VTBL_ENTRY)&_ZN6S594C33v92Ev,
  (VTBL_ENTRY)&_ZN6S594C33v93Ev,
  (VTBL_ENTRY)&_ZN6S594C33v94Ev,
  (VTBL_ENTRY)&_ZN6S594C33v95Ev,
  (VTBL_ENTRY)&_ZN6S594C33v96Ev,
  (VTBL_ENTRY)&_ZN6S594C33v97Ev,
  (VTBL_ENTRY)&_ZN6S594C33v98Ev,
  (VTBL_ENTRY)&_ZN6S594C33v99Ev,
  (VTBL_ENTRY)&_ZN6S594C34v100Ev,
  (VTBL_ENTRY)&_ZN6S594C34v101Ev,
  (VTBL_ENTRY)&_ZN6S594C34v102Ev,
  (VTBL_ENTRY)&_ZN6S594C34v103Ev,
  (VTBL_ENTRY)&_ZN6S594C34v104Ev,
  (VTBL_ENTRY)&_ZN6S594C34v105Ev,
  (VTBL_ENTRY)&_ZN6S594C34v106Ev,
  (VTBL_ENTRY)&_ZN6S594C34v107Ev,
  (VTBL_ENTRY)&_ZN6S594C34v108Ev,
  (VTBL_ENTRY)&_ZN6S594C34v109Ev,
};
extern VTBL_ENTRY _ZTI6S594C3[];
extern  VTBL_ENTRY _ZTV6S594C3[];
Class_Descriptor cd_S594C3 = {  "S594C3", // class name
  bases_S594C3, 2,
  &(vtc_S594C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S594C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S594C3),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S594C2 ::~S594C2(){ note_dtor("S594C2", this);}
void  S594C2 ::v110(){vfunc_called(this, "_ZN6S594C24v110Ev");}
void  S594C2 ::v111(){vfunc_called(this, "_ZN6S594C24v111Ev");}
S594C2 ::S594C2(){ note_ctor("S594C2", this);} // tgen

static void Test_S594C2()
{
  extern Class_Descriptor cd_S594C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S594C2, buf);
    S594C2 *dp, &lv = *(dp=new (buf) S594C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S594C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S594C2)");
    check_base_class_offset(lv, (S594C5*)(S594C4*)(S594C3*), 0, "S594C2");
    check_base_class_offset(lv, (S594C4*)(S594C3*), 0, "S594C2");
    check_base_class_offset(lv, (S594C3*), 0, "S594C2");
    test_class_info(&lv, &cd_S594C2);
    dp->~S594C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS594C2(Test_S594C2, "S594C2", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S594C2C1Ev();
extern void _ZN6S594C2D1Ev();
Name_Map name_map_S594C2[] = {
  NSPAIR(_ZN6S594C2C1Ev),
  NSPAIR(_ZN6S594C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S594C5;
extern VTBL_ENTRY _ZTI6S594C5[];
extern  VTBL_ENTRY _ZTV6S594C5[];
extern Class_Descriptor cd_S594C4;
extern VTBL_ENTRY _ZTI6S594C4[];
extern  VTBL_ENTRY _ZTV6S594C4[];
extern Class_Descriptor cd_S594C3;
extern VTBL_ENTRY _ZTI6S594C3[];
extern  VTBL_ENTRY _ZTV6S594C3[];
static Base_Class bases_S594C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S594C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S594C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S594C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S594C2[];
extern void _ZN6S594C2D1Ev();
extern void _ZN6S594C2D0Ev();
extern void _ZN6S594C52v4Ev();
extern void _ZN6S594C52v5Ev();
extern void _ZN6S594C52v6Ev();
extern void _ZN6S594C52v7Ev();
extern void _ZN6S594C52v8Ev();
extern void _ZN6S594C52v9Ev();
extern void _ZN6S594C53v10Ev();
extern void _ZN6S594C53v11Ev();
extern void _ZN6S594C53v12Ev();
extern void _ZN6S594C53v13Ev();
extern void _ZN6S594C53v14Ev();
extern void _ZN6S594C53v15Ev();
extern void _ZN6S594C53v16Ev();
extern void _ZN6S594C53v17Ev();
extern void _ZN6S594C53v18Ev();
extern void _ZN6S594C53v19Ev();
extern void _ZN6S594C53v20Ev();
extern void _ZN6S594C53v21Ev();
extern void _ZN6S594C53v22Ev();
extern void _ZN6S594C53v23Ev();
extern void _ZN6S594C53v24Ev();
extern void _ZN6S594C53v25Ev();
extern void _ZN6S594C53v26Ev();
extern void _ZN6S594C53v27Ev();
extern void _ZN6S594C53v28Ev();
extern void _ZN6S594C53v29Ev();
extern void _ZN6S594C53v30Ev();
extern void _ZN6S594C53v31Ev();
extern void _ZN6S594C53v32Ev();
extern void _ZN6S594C53v33Ev();
extern void _ZN6S594C53v34Ev();
extern void _ZN6S594C53v35Ev();
extern void _ZN6S594C53v36Ev();
extern void _ZN6S594C53v37Ev();
extern void _ZN6S594C53v38Ev();
extern void _ZN6S594C53v39Ev();
extern void _ZN6S594C53v40Ev();
extern void _ZN6S594C53v41Ev();
extern void _ZN6S594C53v42Ev();
extern void _ZN6S594C53v43Ev();
extern void _ZN6S594C53v44Ev();
extern void _ZN6S594C53v45Ev();
extern void _ZN6S594C53v46Ev();
extern void _ZN6S594C53v47Ev();
extern void _ZN6S594C53v48Ev();
extern void _ZN6S594C53v49Ev();
extern void _ZN6S594C53v50Ev();
extern void _ZN6S594C53v51Ev();
extern void _ZN6S594C53v52Ev();
extern void _ZN6S594C53v53Ev();
extern void _ZN6S594C53v54Ev();
extern void _ZN6S594C53v55Ev();
extern void _ZN6S594C53v56Ev();
extern void _ZN6S594C53v57Ev();
extern void _ZN6S594C53v58Ev();
extern void _ZN6S594C53v59Ev();
extern void _ZN6S594C53v60Ev();
extern void _ZN6S594C53v61Ev();
extern void _ZN6S594C53v62Ev();
extern void _ZN6S594C53v63Ev();
extern void _ZN6S594C53v64Ev();
extern void _ZN6S594C53v65Ev();
extern void _ZN6S594C53v66Ev();
extern void _ZN6S594C53v67Ev();
extern void _ZN6S594C43v68Ev();
extern void _ZN6S594C43v69Ev();
extern void _ZN6S594C43v70Ev();
extern void _ZN6S594C43v71Ev();
extern void _ZN6S594C43v72Ev();
extern void _ZN6S594C43v73Ev();
extern void _ZN6S594C43v74Ev();
extern void _ZN6S594C43v75Ev();
extern void _ZN6S594C43v76Ev();
extern void _ZN6S594C43v77Ev();
extern void _ZN6S594C43v78Ev();
extern void _ZN6S594C43v79Ev();
extern void _ZN6S594C43v80Ev();
extern void _ZN6S594C43v81Ev();
extern void _ZN6S594C43v82Ev();
extern void _ZN6S594C43v83Ev();
extern void _ZN6S594C43v84Ev();
extern void _ZN6S594C43v85Ev();
extern void _ZN6S594C43v86Ev();
extern void _ZN6S594C43v87Ev();
extern void _ZN6S594C43v88Ev();
extern void _ZN6S594C43v89Ev();
extern void _ZN6S594C33v90Ev();
extern void _ZN6S594C33v91Ev();
extern void _ZN6S594C33v92Ev();
extern void _ZN6S594C33v93Ev();
extern void _ZN6S594C33v94Ev();
extern void _ZN6S594C33v95Ev();
extern void _ZN6S594C33v96Ev();
extern void _ZN6S594C33v97Ev();
extern void _ZN6S594C33v98Ev();
extern void _ZN6S594C33v99Ev();
extern void _ZN6S594C34v100Ev();
extern void _ZN6S594C34v101Ev();
extern void _ZN6S594C34v102Ev();
extern void _ZN6S594C34v103Ev();
extern void _ZN6S594C34v104Ev();
extern void _ZN6S594C34v105Ev();
extern void _ZN6S594C34v106Ev();
extern void _ZN6S594C34v107Ev();
extern void _ZN6S594C34v108Ev();
extern void _ZN6S594C34v109Ev();
extern void _ZN6S594C24v110Ev();
extern void _ZN6S594C24v111Ev();
static  VTBL_ENTRY vtc_S594C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S594C2[0]),
  (VTBL_ENTRY)&_ZN6S594C2D1Ev,
  (VTBL_ENTRY)&_ZN6S594C2D0Ev,
  (VTBL_ENTRY)&_ZN6S594C52v4Ev,
  (VTBL_ENTRY)&_ZN6S594C52v5Ev,
  (VTBL_ENTRY)&_ZN6S594C52v6Ev,
  (VTBL_ENTRY)&_ZN6S594C52v7Ev,
  (VTBL_ENTRY)&_ZN6S594C52v8Ev,
  (VTBL_ENTRY)&_ZN6S594C52v9Ev,
  (VTBL_ENTRY)&_ZN6S594C53v10Ev,
  (VTBL_ENTRY)&_ZN6S594C53v11Ev,
  (VTBL_ENTRY)&_ZN6S594C53v12Ev,
  (VTBL_ENTRY)&_ZN6S594C53v13Ev,
  (VTBL_ENTRY)&_ZN6S594C53v14Ev,
  (VTBL_ENTRY)&_ZN6S594C53v15Ev,
  (VTBL_ENTRY)&_ZN6S594C53v16Ev,
  (VTBL_ENTRY)&_ZN6S594C53v17Ev,
  (VTBL_ENTRY)&_ZN6S594C53v18Ev,
  (VTBL_ENTRY)&_ZN6S594C53v19Ev,
  (VTBL_ENTRY)&_ZN6S594C53v20Ev,
  (VTBL_ENTRY)&_ZN6S594C53v21Ev,
  (VTBL_ENTRY)&_ZN6S594C53v22Ev,
  (VTBL_ENTRY)&_ZN6S594C53v23Ev,
  (VTBL_ENTRY)&_ZN6S594C53v24Ev,
  (VTBL_ENTRY)&_ZN6S594C53v25Ev,
  (VTBL_ENTRY)&_ZN6S594C53v26Ev,
  (VTBL_ENTRY)&_ZN6S594C53v27Ev,
  (VTBL_ENTRY)&_ZN6S594C53v28Ev,
  (VTBL_ENTRY)&_ZN6S594C53v29Ev,
  (VTBL_ENTRY)&_ZN6S594C53v30Ev,
  (VTBL_ENTRY)&_ZN6S594C53v31Ev,
  (VTBL_ENTRY)&_ZN6S594C53v32Ev,
  (VTBL_ENTRY)&_ZN6S594C53v33Ev,
  (VTBL_ENTRY)&_ZN6S594C53v34Ev,
  (VTBL_ENTRY)&_ZN6S594C53v35Ev,
  (VTBL_ENTRY)&_ZN6S594C53v36Ev,
  (VTBL_ENTRY)&_ZN6S594C53v37Ev,
  (VTBL_ENTRY)&_ZN6S594C53v38Ev,
  (VTBL_ENTRY)&_ZN6S594C53v39Ev,
  (VTBL_ENTRY)&_ZN6S594C53v40Ev,
  (VTBL_ENTRY)&_ZN6S594C53v41Ev,
  (VTBL_ENTRY)&_ZN6S594C53v42Ev,
  (VTBL_ENTRY)&_ZN6S594C53v43Ev,
  (VTBL_ENTRY)&_ZN6S594C53v44Ev,
  (VTBL_ENTRY)&_ZN6S594C53v45Ev,
  (VTBL_ENTRY)&_ZN6S594C53v46Ev,
  (VTBL_ENTRY)&_ZN6S594C53v47Ev,
  (VTBL_ENTRY)&_ZN6S594C53v48Ev,
  (VTBL_ENTRY)&_ZN6S594C53v49Ev,
  (VTBL_ENTRY)&_ZN6S594C53v50Ev,
  (VTBL_ENTRY)&_ZN6S594C53v51Ev,
  (VTBL_ENTRY)&_ZN6S594C53v52Ev,
  (VTBL_ENTRY)&_ZN6S594C53v53Ev,
  (VTBL_ENTRY)&_ZN6S594C53v54Ev,
  (VTBL_ENTRY)&_ZN6S594C53v55Ev,
  (VTBL_ENTRY)&_ZN6S594C53v56Ev,
  (VTBL_ENTRY)&_ZN6S594C53v57Ev,
  (VTBL_ENTRY)&_ZN6S594C53v58Ev,
  (VTBL_ENTRY)&_ZN6S594C53v59Ev,
  (VTBL_ENTRY)&_ZN6S594C53v60Ev,
  (VTBL_ENTRY)&_ZN6S594C53v61Ev,
  (VTBL_ENTRY)&_ZN6S594C53v62Ev,
  (VTBL_ENTRY)&_ZN6S594C53v63Ev,
  (VTBL_ENTRY)&_ZN6S594C53v64Ev,
  (VTBL_ENTRY)&_ZN6S594C53v65Ev,
  (VTBL_ENTRY)&_ZN6S594C53v66Ev,
  (VTBL_ENTRY)&_ZN6S594C53v67Ev,
  (VTBL_ENTRY)&_ZN6S594C43v68Ev,
  (VTBL_ENTRY)&_ZN6S594C43v69Ev,
  (VTBL_ENTRY)&_ZN6S594C43v70Ev,
  (VTBL_ENTRY)&_ZN6S594C43v71Ev,
  (VTBL_ENTRY)&_ZN6S594C43v72Ev,
  (VTBL_ENTRY)&_ZN6S594C43v73Ev,
  (VTBL_ENTRY)&_ZN6S594C43v74Ev,
  (VTBL_ENTRY)&_ZN6S594C43v75Ev,
  (VTBL_ENTRY)&_ZN6S594C43v76Ev,
  (VTBL_ENTRY)&_ZN6S594C43v77Ev,
  (VTBL_ENTRY)&_ZN6S594C43v78Ev,
  (VTBL_ENTRY)&_ZN6S594C43v79Ev,
  (VTBL_ENTRY)&_ZN6S594C43v80Ev,
  (VTBL_ENTRY)&_ZN6S594C43v81Ev,
  (VTBL_ENTRY)&_ZN6S594C43v82Ev,
  (VTBL_ENTRY)&_ZN6S594C43v83Ev,
  (VTBL_ENTRY)&_ZN6S594C43v84Ev,
  (VTBL_ENTRY)&_ZN6S594C43v85Ev,
  (VTBL_ENTRY)&_ZN6S594C43v86Ev,
  (VTBL_ENTRY)&_ZN6S594C43v87Ev,
  (VTBL_ENTRY)&_ZN6S594C43v88Ev,
  (VTBL_ENTRY)&_ZN6S594C43v89Ev,
  (VTBL_ENTRY)&_ZN6S594C33v90Ev,
  (VTBL_ENTRY)&_ZN6S594C33v91Ev,
  (VTBL_ENTRY)&_ZN6S594C33v92Ev,
  (VTBL_ENTRY)&_ZN6S594C33v93Ev,
  (VTBL_ENTRY)&_ZN6S594C33v94Ev,
  (VTBL_ENTRY)&_ZN6S594C33v95Ev,
  (VTBL_ENTRY)&_ZN6S594C33v96Ev,
  (VTBL_ENTRY)&_ZN6S594C33v97Ev,
  (VTBL_ENTRY)&_ZN6S594C33v98Ev,
  (VTBL_ENTRY)&_ZN6S594C33v99Ev,
  (VTBL_ENTRY)&_ZN6S594C34v100Ev,
  (VTBL_ENTRY)&_ZN6S594C34v101Ev,
  (VTBL_ENTRY)&_ZN6S594C34v102Ev,
  (VTBL_ENTRY)&_ZN6S594C34v103Ev,
  (VTBL_ENTRY)&_ZN6S594C34v104Ev,
  (VTBL_ENTRY)&_ZN6S594C34v105Ev,
  (VTBL_ENTRY)&_ZN6S594C34v106Ev,
  (VTBL_ENTRY)&_ZN6S594C34v107Ev,
  (VTBL_ENTRY)&_ZN6S594C34v108Ev,
  (VTBL_ENTRY)&_ZN6S594C34v109Ev,
  (VTBL_ENTRY)&_ZN6S594C24v110Ev,
  (VTBL_ENTRY)&_ZN6S594C24v111Ev,
};
extern VTBL_ENTRY _ZTI6S594C2[];
extern  VTBL_ENTRY _ZTV6S594C2[];
Class_Descriptor cd_S594C2 = {  "S594C2", // class name
  bases_S594C2, 3,
  &(vtc_S594C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S594C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S594C2),112, //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  S594C1  : S594C2 {
  int s594c1f0[3];
  virtual  ~S594C1(); // _ZN6S594C1D1Ev
  virtual void  v1(); // _ZN6S594C12v1Ev
  virtual void  v2(); // _ZN6S594C12v2Ev
  virtual void  v3(); // _ZN6S594C12v3Ev
  S594C1(); // tgen
};
//SIG(1 S594C1) 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]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v110 v111} vd v1 v2 v3 Fi[3]}


 S594C1 ::~S594C1(){ note_dtor("S594C1", this);}
void  S594C1 ::v1(){vfunc_called(this, "_ZN6S594C12v1Ev");}
void  S594C1 ::v2(){vfunc_called(this, "_ZN6S594C12v2Ev");}
void  S594C1 ::v3(){vfunc_called(this, "_ZN6S594C12v3Ev");}
S594C1 ::S594C1(){ note_ctor("S594C1", this);} // tgen

static void Test_S594C1()
{
  extern Class_Descriptor cd_S594C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,53)];
    init_test(&cd_S594C1, buf);
    S594C1 *dp, &lv = *(dp=new (buf) S594C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,208), "sizeof(S594C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S594C1)");
    check_base_class_offset(lv, (S594C5*)(S594C4*)(S594C3*)(S594C2*), 0, "S594C1");
    check_base_class_offset(lv, (S594C4*)(S594C3*)(S594C2*), 0, "S594C1");
    check_base_class_offset(lv, (S594C3*)(S594C2*), 0, "S594C1");
    check_base_class_offset(lv, (S594C2*), 0, "S594C1");
    check_field_offset(lv, s594c1f0, ABISELECT(268,196), "S594C1.s594c1f0");
    test_class_info(&lv, &cd_S594C1);
    dp->~S594C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS594C1(Test_S594C1, "S594C1", ABISELECT(280,208));

#else // __cplusplus

extern void _ZN6S594C1C1Ev();
extern void _ZN6S594C1D1Ev();
Name_Map name_map_S594C1[] = {
  NSPAIR(_ZN6S594C1C1Ev),
  NSPAIR(_ZN6S594C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S594C5;
extern VTBL_ENTRY _ZTI6S594C5[];
extern  VTBL_ENTRY _ZTV6S594C5[];
extern Class_Descriptor cd_S594C4;
extern VTBL_ENTRY _ZTI6S594C4[];
extern  VTBL_ENTRY _ZTV6S594C4[];
extern Class_Descriptor cd_S594C3;
extern VTBL_ENTRY _ZTI6S594C3[];
extern  VTBL_ENTRY _ZTV6S594C3[];
extern Class_Descriptor cd_S594C2;
extern VTBL_ENTRY _ZTI6S594C2[];
extern  VTBL_ENTRY _ZTV6S594C2[];
static Base_Class bases_S594C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S594C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S594C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S594C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S594C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S594C1[];
extern void _ZN6S594C1D1Ev();
extern void _ZN6S594C1D0Ev();
extern void _ZN6S594C52v4Ev();
extern void _ZN6S594C52v5Ev();
extern void _ZN6S594C52v6Ev();
extern void _ZN6S594C52v7Ev();
extern void _ZN6S594C52v8Ev();
extern void _ZN6S594C52v9Ev();
extern void _ZN6S594C53v10Ev();
extern void _ZN6S594C53v11Ev();
extern void _ZN6S594C53v12Ev();
extern void _ZN6S594C53v13Ev();
extern void _ZN6S594C53v14Ev();
extern void _ZN6S594C53v15Ev();
extern void _ZN6S594C53v16Ev();
extern void _ZN6S594C53v17Ev();
extern void _ZN6S594C53v18Ev();
extern void _ZN6S594C53v19Ev();
extern void _ZN6S594C53v20Ev();
extern void _ZN6S594C53v21Ev();
extern void _ZN6S594C53v22Ev();
extern void _ZN6S594C53v23Ev();
extern void _ZN6S594C53v24Ev();
extern void _ZN6S594C53v25Ev();
extern void _ZN6S594C53v26Ev();
extern void _ZN6S594C53v27Ev();
extern void _ZN6S594C53v28Ev();
extern void _ZN6S594C53v29Ev();
extern void _ZN6S594C53v30Ev();
extern void _ZN6S594C53v31Ev();
extern void _ZN6S594C53v32Ev();
extern void _ZN6S594C53v33Ev();
extern void _ZN6S594C53v34Ev();
extern void _ZN6S594C53v35Ev();
extern void _ZN6S594C53v36Ev();
extern void _ZN6S594C53v37Ev();
extern void _ZN6S594C53v38Ev();
extern void _ZN6S594C53v39Ev();
extern void _ZN6S594C53v40Ev();
extern void _ZN6S594C53v41Ev();
extern void _ZN6S594C53v42Ev();
extern void _ZN6S594C53v43Ev();
extern void _ZN6S594C53v44Ev();
extern void _ZN6S594C53v45Ev();
extern void _ZN6S594C53v46Ev();
extern void _ZN6S594C53v47Ev();
extern void _ZN6S594C53v48Ev();
extern void _ZN6S594C53v49Ev();
extern void _ZN6S594C53v50Ev();
extern void _ZN6S594C53v51Ev();
extern void _ZN6S594C53v52Ev();
extern void _ZN6S594C53v53Ev();
extern void _ZN6S594C53v54Ev();
extern void _ZN6S594C53v55Ev();
extern void _ZN6S594C53v56Ev();
extern void _ZN6S594C53v57Ev();
extern void _ZN6S594C53v58Ev();
extern void _ZN6S594C53v59Ev();
extern void _ZN6S594C53v60Ev();
extern void _ZN6S594C53v61Ev();
extern void _ZN6S594C53v62Ev();
extern void _ZN6S594C53v63Ev();
extern void _ZN6S594C53v64Ev();
extern void _ZN6S594C53v65Ev();
extern void _ZN6S594C53v66Ev();
extern void _ZN6S594C53v67Ev();
extern void _ZN6S594C43v68Ev();
extern void _ZN6S594C43v69Ev();
extern void _ZN6S594C43v70Ev();
extern void _ZN6S594C43v71Ev();
extern void _ZN6S594C43v72Ev();
extern void _ZN6S594C43v73Ev();
extern void _ZN6S594C43v74Ev();
extern void _ZN6S594C43v75Ev();
extern void _ZN6S594C43v76Ev();
extern void _ZN6S594C43v77Ev();
extern void _ZN6S594C43v78Ev();
extern void _ZN6S594C43v79Ev();
extern void _ZN6S594C43v80Ev();
extern void _ZN6S594C43v81Ev();
extern void _ZN6S594C43v82Ev();
extern void _ZN6S594C43v83Ev();
extern void _ZN6S594C43v84Ev();
extern void _ZN6S594C43v85Ev();
extern void _ZN6S594C43v86Ev();
extern void _ZN6S594C43v87Ev();
extern void _ZN6S594C43v88Ev();
extern void _ZN6S594C43v89Ev();
extern void _ZN6S594C33v90Ev();
extern void _ZN6S594C33v91Ev();
extern void _ZN6S594C33v92Ev();
extern void _ZN6S594C33v93Ev();
extern void _ZN6S594C33v94Ev();
extern void _ZN6S594C33v95Ev();
extern void _ZN6S594C33v96Ev();
extern void _ZN6S594C33v97Ev();
extern void _ZN6S594C33v98Ev();
extern void _ZN6S594C33v99Ev();
extern void _ZN6S594C34v100Ev();
extern void _ZN6S594C34v101Ev();
extern void _ZN6S594C34v102Ev();
extern void _ZN6S594C34v103Ev();
extern void _ZN6S594C34v104Ev();
extern void _ZN6S594C34v105Ev();
extern void _ZN6S594C34v106Ev();
extern void _ZN6S594C34v107Ev();
extern void _ZN6S594C34v108Ev();
extern void _ZN6S594C34v109Ev();
extern void _ZN6S594C24v110Ev();
extern void _ZN6S594C24v111Ev();
extern void _ZN6S594C12v1Ev();
extern void _ZN6S594C12v2Ev();
extern void _ZN6S594C12v3Ev();
static  VTBL_ENTRY vtc_S594C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S594C1[0]),
  (VTBL_ENTRY)&_ZN6S594C1D1Ev,
  (VTBL_ENTRY)&_ZN6S594C1D0Ev,
  (VTBL_ENTRY)&_ZN6S594C52v4Ev,
  (VTBL_ENTRY)&_ZN6S594C52v5Ev,
  (VTBL_ENTRY)&_ZN6S594C52v6Ev,
  (VTBL_ENTRY)&_ZN6S594C52v7Ev,
  (VTBL_ENTRY)&_ZN6S594C52v8Ev,
  (VTBL_ENTRY)&_ZN6S594C52v9Ev,
  (VTBL_ENTRY)&_ZN6S594C53v10Ev,
  (VTBL_ENTRY)&_ZN6S594C53v11Ev,
  (VTBL_ENTRY)&_ZN6S594C53v12Ev,
  (VTBL_ENTRY)&_ZN6S594C53v13Ev,
  (VTBL_ENTRY)&_ZN6S594C53v14Ev,
  (VTBL_ENTRY)&_ZN6S594C53v15Ev,
  (VTBL_ENTRY)&_ZN6S594C53v16Ev,
  (VTBL_ENTRY)&_ZN6S594C53v17Ev,
  (VTBL_ENTRY)&_ZN6S594C53v18Ev,
  (VTBL_ENTRY)&_ZN6S594C53v19Ev,
  (VTBL_ENTRY)&_ZN6S594C53v20Ev,
  (VTBL_ENTRY)&_ZN6S594C53v21Ev,
  (VTBL_ENTRY)&_ZN6S594C53v22Ev,
  (VTBL_ENTRY)&_ZN6S594C53v23Ev,
  (VTBL_ENTRY)&_ZN6S594C53v24Ev,
  (VTBL_ENTRY)&_ZN6S594C53v25Ev,
  (VTBL_ENTRY)&_ZN6S594C53v26Ev,
  (VTBL_ENTRY)&_ZN6S594C53v27Ev,
  (VTBL_ENTRY)&_ZN6S594C53v28Ev,
  (VTBL_ENTRY)&_ZN6S594C53v29Ev,
  (VTBL_ENTRY)&_ZN6S594C53v30Ev,
  (VTBL_ENTRY)&_ZN6S594C53v31Ev,
  (VTBL_ENTRY)&_ZN6S594C53v32Ev,
  (VTBL_ENTRY)&_ZN6S594C53v33Ev,
  (VTBL_ENTRY)&_ZN6S594C53v34Ev,
  (VTBL_ENTRY)&_ZN6S594C53v35Ev,
  (VTBL_ENTRY)&_ZN6S594C53v36Ev,
  (VTBL_ENTRY)&_ZN6S594C53v37Ev,
  (VTBL_ENTRY)&_ZN6S594C53v38Ev,
  (VTBL_ENTRY)&_ZN6S594C53v39Ev,
  (VTBL_ENTRY)&_ZN6S594C53v40Ev,
  (VTBL_ENTRY)&_ZN6S594C53v41Ev,
  (VTBL_ENTRY)&_ZN6S594C53v42Ev,
  (VTBL_ENTRY)&_ZN6S594C53v43Ev,
  (VTBL_ENTRY)&_ZN6S594C53v44Ev,
  (VTBL_ENTRY)&_ZN6S594C53v45Ev,
  (VTBL_ENTRY)&_ZN6S594C53v46Ev,
  (VTBL_ENTRY)&_ZN6S594C53v47Ev,
  (VTBL_ENTRY)&_ZN6S594C53v48Ev,
  (VTBL_ENTRY)&_ZN6S594C53v49Ev,
  (VTBL_ENTRY)&_ZN6S594C53v50Ev,
  (VTBL_ENTRY)&_ZN6S594C53v51Ev,
  (VTBL_ENTRY)&_ZN6S594C53v52Ev,
  (VTBL_ENTRY)&_ZN6S594C53v53Ev,
  (VTBL_ENTRY)&_ZN6S594C53v54Ev,
  (VTBL_ENTRY)&_ZN6S594C53v55Ev,
  (VTBL_ENTRY)&_ZN6S594C53v56Ev,
  (VTBL_ENTRY)&_ZN6S594C53v57Ev,
  (VTBL_ENTRY)&_ZN6S594C53v58Ev,
  (VTBL_ENTRY)&_ZN6S594C53v59Ev,
  (VTBL_ENTRY)&_ZN6S594C53v60Ev,
  (VTBL_ENTRY)&_ZN6S594C53v61Ev,
  (VTBL_ENTRY)&_ZN6S594C53v62Ev,
  (VTBL_ENTRY)&_ZN6S594C53v63Ev,
  (VTBL_ENTRY)&_ZN6S594C53v64Ev,
  (VTBL_ENTRY)&_ZN6S594C53v65Ev,
  (VTBL_ENTRY)&_ZN6S594C53v66Ev,
  (VTBL_ENTRY)&_ZN6S594C53v67Ev,
  (VTBL_ENTRY)&_ZN6S594C43v68Ev,
  (VTBL_ENTRY)&_ZN6S594C43v69Ev,
  (VTBL_ENTRY)&_ZN6S594C43v70Ev,
  (VTBL_ENTRY)&_ZN6S594C43v71Ev,
  (VTBL_ENTRY)&_ZN6S594C43v72Ev,
  (VTBL_ENTRY)&_ZN6S594C43v73Ev,
  (VTBL_ENTRY)&_ZN6S594C43v74Ev,
  (VTBL_ENTRY)&_ZN6S594C43v75Ev,
  (VTBL_ENTRY)&_ZN6S594C43v76Ev,
  (VTBL_ENTRY)&_ZN6S594C43v77Ev,
  (VTBL_ENTRY)&_ZN6S594C43v78Ev,
  (VTBL_ENTRY)&_ZN6S594C43v79Ev,
  (VTBL_ENTRY)&_ZN6S594C43v80Ev,
  (VTBL_ENTRY)&_ZN6S594C43v81Ev,
  (VTBL_ENTRY)&_ZN6S594C43v82Ev,
  (VTBL_ENTRY)&_ZN6S594C43v83Ev,
  (VTBL_ENTRY)&_ZN6S594C43v84Ev,
  (VTBL_ENTRY)&_ZN6S594C43v85Ev,
  (VTBL_ENTRY)&_ZN6S594C43v86Ev,
  (VTBL_ENTRY)&_ZN6S594C43v87Ev,
  (VTBL_ENTRY)&_ZN6S594C43v88Ev,
  (VTBL_ENTRY)&_ZN6S594C43v89Ev,
  (VTBL_ENTRY)&_ZN6S594C33v90Ev,
  (VTBL_ENTRY)&_ZN6S594C33v91Ev,
  (VTBL_ENTRY)&_ZN6S594C33v92Ev,
  (VTBL_ENTRY)&_ZN6S594C33v93Ev,
  (VTBL_ENTRY)&_ZN6S594C33v94Ev,
  (VTBL_ENTRY)&_ZN6S594C33v95Ev,
  (VTBL_ENTRY)&_ZN6S594C33v96Ev,
  (VTBL_ENTRY)&_ZN6S594C33v97Ev,
  (VTBL_ENTRY)&_ZN6S594C33v98Ev,
  (VTBL_ENTRY)&_ZN6S594C33v99Ev,
  (VTBL_ENTRY)&_ZN6S594C34v100Ev,
  (VTBL_ENTRY)&_ZN6S594C34v101Ev,
  (VTBL_ENTRY)&_ZN6S594C34v102Ev,
  (VTBL_ENTRY)&_ZN6S594C34v103Ev,
  (VTBL_ENTRY)&_ZN6S594C34v104Ev,
  (VTBL_ENTRY)&_ZN6S594C34v105Ev,
  (VTBL_ENTRY)&_ZN6S594C34v106Ev,
  (VTBL_ENTRY)&_ZN6S594C34v107Ev,
  (VTBL_ENTRY)&_ZN6S594C34v108Ev,
  (VTBL_ENTRY)&_ZN6S594C34v109Ev,
  (VTBL_ENTRY)&_ZN6S594C24v110Ev,
  (VTBL_ENTRY)&_ZN6S594C24v111Ev,
  (VTBL_ENTRY)&_ZN6S594C12v1Ev,
  (VTBL_ENTRY)&_ZN6S594C12v2Ev,
  (VTBL_ENTRY)&_ZN6S594C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S594C1[];
extern  VTBL_ENTRY _ZTV6S594C1[];
Class_Descriptor cd_S594C1 = {  "S594C1", // class name
  bases_S594C1, 4,
  &(vtc_S594C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,208), // object size
  NSPAIRA(_ZTI6S594C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S594C1),115, //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  S593C5  {
  int s593c5f0;
  __tsi64 s593c5f1;
  void *s593c5f2[4];
  int s593c5f3[2];
  void *s593c5f4;
  ::S3221C4_nt s593c5f5;
  void *s593c5f6[2];
  virtual  ~S593C5(); // _ZN6S593C5D1Ev
  virtual void  v4(); // _ZN6S593C52v4Ev
  virtual void  v5(); // _ZN6S593C52v5Ev
  virtual void  v6(); // _ZN6S593C52v6Ev
  virtual void  v7(); // _ZN6S593C52v7Ev
  virtual void  v8(); // _ZN6S593C52v8Ev
  virtual void  v9(); // _ZN6S593C52v9Ev
  virtual void  v10(); // _ZN6S593C53v10Ev
  virtual void  v11(); // _ZN6S593C53v11Ev
  virtual void  v12(); // _ZN6S593C53v12Ev
  virtual void  v13(); // _ZN6S593C53v13Ev
  virtual void  v14(); // _ZN6S593C53v14Ev
  virtual void  v15(); // _ZN6S593C53v15Ev
  virtual void  v16(); // _ZN6S593C53v16Ev
  virtual void  v17(); // _ZN6S593C53v17Ev
  virtual void  v18(); // _ZN6S593C53v18Ev
  virtual void  v19(); // _ZN6S593C53v19Ev
  virtual void  v20(); // _ZN6S593C53v20Ev
  virtual void  v21(); // _ZN6S593C53v21Ev
  virtual void  v22(); // _ZN6S593C53v22Ev
  virtual void  v23(); // _ZN6S593C53v23Ev
  virtual void  v24(); // _ZN6S593C53v24Ev
  virtual void  v25(); // _ZN6S593C53v25Ev
  virtual void  v26(); // _ZN6S593C53v26Ev
  virtual void  v27(); // _ZN6S593C53v27Ev
  virtual void  v28(); // _ZN6S593C53v28Ev
  virtual void  v29(); // _ZN6S593C53v29Ev
  virtual void  v30(); // _ZN6S593C53v30Ev
  virtual void  v31(); // _ZN6S593C53v31Ev
  virtual void  v32(); // _ZN6S593C53v32Ev
  virtual void  v33(); // _ZN6S593C53v33Ev
  virtual void  v34(); // _ZN6S593C53v34Ev
  virtual void  v35(); // _ZN6S593C53v35Ev
  virtual void  v36(); // _ZN6S593C53v36Ev
  virtual void  v37(); // _ZN6S593C53v37Ev
  virtual void  v38(); // _ZN6S593C53v38Ev
  virtual void  v39(); // _ZN6S593C53v39Ev
  virtual void  v40(); // _ZN6S593C53v40Ev
  virtual void  v41(); // _ZN6S593C53v41Ev
  virtual void  v42(); // _ZN6S593C53v42Ev
  virtual void  v43(); // _ZN6S593C53v43Ev
  virtual void  v44(); // _ZN6S593C53v44Ev
  virtual void  v45(); // _ZN6S593C53v45Ev
  virtual void  v46(); // _ZN6S593C53v46Ev
  virtual void  v47(); // _ZN6S593C53v47Ev
  virtual void  v48(); // _ZN6S593C53v48Ev
  virtual void  v49(); // _ZN6S593C53v49Ev
  virtual void  v50(); // _ZN6S593C53v50Ev
  virtual void  v51(); // _ZN6S593C53v51Ev
  virtual void  v52(); // _ZN6S593C53v52Ev
  virtual void  v53(); // _ZN6S593C53v53Ev
  virtual void  v54(); // _ZN6S593C53v54Ev
  virtual void  v55(); // _ZN6S593C53v55Ev
  virtual void  v56(); // _ZN6S593C53v56Ev
  virtual void  v57(); // _ZN6S593C53v57Ev
  virtual void  v58(); // _ZN6S593C53v58Ev
  virtual void  v59(); // _ZN6S593C53v59Ev
  virtual void  v60(); // _ZN6S593C53v60Ev
  virtual void  v61(); // _ZN6S593C53v61Ev
  virtual void  v62(); // _ZN6S593C53v62Ev
  virtual void  v63(); // _ZN6S593C53v63Ev
  virtual void  v64(); // _ZN6S593C53v64Ev
  virtual void  v65(); // _ZN6S593C53v65Ev
  virtual void  v66(); // _ZN6S593C53v66Ev
  virtual void  v67(); // _ZN6S593C53v67Ev
  S593C5(); // tgen
};
//SIG(-1 S593C5) 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]}


 S593C5 ::~S593C5(){ note_dtor("S593C5", this);}
void  S593C5 ::v4(){vfunc_called(this, "_ZN6S593C52v4Ev");}
void  S593C5 ::v5(){vfunc_called(this, "_ZN6S593C52v5Ev");}
void  S593C5 ::v6(){vfunc_called(this, "_ZN6S593C52v6Ev");}
void  S593C5 ::v7(){vfunc_called(this, "_ZN6S593C52v7Ev");}
void  S593C5 ::v8(){vfunc_called(this, "_ZN6S593C52v8Ev");}
void  S593C5 ::v9(){vfunc_called(this, "_ZN6S593C52v9Ev");}
void  S593C5 ::v10(){vfunc_called(this, "_ZN6S593C53v10Ev");}
void  S593C5 ::v11(){vfunc_called(this, "_ZN6S593C53v11Ev");}
void  S593C5 ::v12(){vfunc_called(this, "_ZN6S593C53v12Ev");}
void  S593C5 ::v13(){vfunc_called(this, "_ZN6S593C53v13Ev");}
void  S593C5 ::v14(){vfunc_called(this, "_ZN6S593C53v14Ev");}
void  S593C5 ::v15(){vfunc_called(this, "_ZN6S593C53v15Ev");}
void  S593C5 ::v16(){vfunc_called(this, "_ZN6S593C53v16Ev");}
void  S593C5 ::v17(){vfunc_called(this, "_ZN6S593C53v17Ev");}
void  S593C5 ::v18(){vfunc_called(this, "_ZN6S593C53v18Ev");}
void  S593C5 ::v19(){vfunc_called(this, "_ZN6S593C53v19Ev");}
void  S593C5 ::v20(){vfunc_called(this, "_ZN6S593C53v20Ev");}
void  S593C5 ::v21(){vfunc_called(this, "_ZN6S593C53v21Ev");}
void  S593C5 ::v22(){vfunc_called(this, "_ZN6S593C53v22Ev");}
void  S593C5 ::v23(){vfunc_called(this, "_ZN6S593C53v23Ev");}
void  S593C5 ::v24(){vfunc_called(this, "_ZN6S593C53v24Ev");}
void  S593C5 ::v25(){vfunc_called(this, "_ZN6S593C53v25Ev");}
void  S593C5 ::v26(){vfunc_called(this, "_ZN6S593C53v26Ev");}
void  S593C5 ::v27(){vfunc_called(this, "_ZN6S593C53v27Ev");}
void  S593C5 ::v28(){vfunc_called(this, "_ZN6S593C53v28Ev");}
void  S593C5 ::v29(){vfunc_called(this, "_ZN6S593C53v29Ev");}
void  S593C5 ::v30(){vfunc_called(this, "_ZN6S593C53v30Ev");}
void  S593C5 ::v31(){vfunc_called(this, "_ZN6S593C53v31Ev");}
void  S593C5 ::v32(){vfunc_called(this, "_ZN6S593C53v32Ev");}
void  S593C5 ::v33(){vfunc_called(this, "_ZN6S593C53v33Ev");}
void  S593C5 ::v34(){vfunc_called(this, "_ZN6S593C53v34Ev");}
void  S593C5 ::v35(){vfunc_called(this, "_ZN6S593C53v35Ev");}
void  S593C5 ::v36(){vfunc_called(this, "_ZN6S593C53v36Ev");}
void  S593C5 ::v37(){vfunc_called(this, "_ZN6S593C53v37Ev");}
void  S593C5 ::v38(){vfunc_called(this, "_ZN6S593C53v38Ev");}
void  S593C5 ::v39(){vfunc_called(this, "_ZN6S593C53v39Ev");}
void  S593C5 ::v40(){vfunc_called(this, "_ZN6S593C53v40Ev");}
void  S593C5 ::v41(){vfunc_called(this, "_ZN6S593C53v41Ev");}
void  S593C5 ::v42(){vfunc_called(this, "_ZN6S593C53v42Ev");}
void  S593C5 ::v43(){vfunc_called(this, "_ZN6S593C53v43Ev");}
void  S593C5 ::v44(){vfunc_called(this, "_ZN6S593C53v44Ev");}
void  S593C5 ::v45(){vfunc_called(this, "_ZN6S593C53v45Ev");}
void  S593C5 ::v46(){vfunc_called(this, "_ZN6S593C53v46Ev");}
void  S593C5 ::v47(){vfunc_called(this, "_ZN6S593C53v47Ev");}
void  S593C5 ::v48(){vfunc_called(this, "_ZN6S593C53v48Ev");}
void  S593C5 ::v49(){vfunc_called(this, "_ZN6S593C53v49Ev");}
void  S593C5 ::v50(){vfunc_called(this, "_ZN6S593C53v50Ev");}
void  S593C5 ::v51(){vfunc_called(this, "_ZN6S593C53v51Ev");}
void  S593C5 ::v52(){vfunc_called(this, "_ZN6S593C53v52Ev");}
void  S593C5 ::v53(){vfunc_called(this, "_ZN6S593C53v53Ev");}
void  S593C5 ::v54(){vfunc_called(this, "_ZN6S593C53v54Ev");}
void  S593C5 ::v55(){vfunc_called(this, "_ZN6S593C53v55Ev");}
void  S593C5 ::v56(){vfunc_called(this, "_ZN6S593C53v56Ev");}
void  S593C5 ::v57(){vfunc_called(this, "_ZN6S593C53v57Ev");}
void  S593C5 ::v58(){vfunc_called(this, "_ZN6S593C53v58Ev");}
void  S593C5 ::v59(){vfunc_called(this, "_ZN6S593C53v59Ev");}
void  S593C5 ::v60(){vfunc_called(this, "_ZN6S593C53v60Ev");}
void  S593C5 ::v61(){vfunc_called(this, "_ZN6S593C53v61Ev");}
void  S593C5 ::v62(){vfunc_called(this, "_ZN6S593C53v62Ev");}
void  S593C5 ::v63(){vfunc_called(this, "_ZN6S593C53v63Ev");}
void  S593C5 ::v64(){vfunc_called(this, "_ZN6S593C53v64Ev");}
void  S593C5 ::v65(){vfunc_called(this, "_ZN6S593C53v65Ev");}
void  S593C5 ::v66(){vfunc_called(this, "_ZN6S593C53v66Ev");}
void  S593C5 ::v67(){vfunc_called(this, "_ZN6S593C53v67Ev");}
S593C5 ::S593C5(){ note_ctor("S593C5", this);} // tgen

static void Test_S593C5()
{
  extern Class_Descriptor cd_S593C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S593C5, buf);
    S593C5 *dp, &lv = *(dp=new (buf) S593C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S593C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S593C5)");
    check_field_offset(lv, s593c5f0, ABISELECT(8,4), "S593C5.s593c5f0");
    check_field_offset(lv, s593c5f1, ABISELECT(16,8), "S593C5.s593c5f1");
    check_field_offset(lv, s593c5f2, ABISELECT(24,16), "S593C5.s593c5f2");
    check_field_offset(lv, s593c5f3, ABISELECT(56,32), "S593C5.s593c5f3");
    check_field_offset(lv, s593c5f4, ABISELECT(64,40), "S593C5.s593c5f4");
    check_field_offset(lv, s593c5f5, ABISELECT(72,44), "S593C5.s593c5f5");
    check_field_offset(lv, s593c5f6, ABISELECT(80,52), "S593C5.s593c5f6");
    test_class_info(&lv, &cd_S593C5);
    dp->~S593C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS593C5(Test_S593C5, "S593C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S593C5C1Ev();
extern void _ZN6S593C5D1Ev();
Name_Map name_map_S593C5[] = {
  NSPAIR(_ZN6S593C5C1Ev),
  NSPAIR(_ZN6S593C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S593C5[];
extern void _ZN6S593C5D1Ev();
extern void _ZN6S593C5D0Ev();
extern void _ZN6S593C52v4Ev();
extern void _ZN6S593C52v5Ev();
extern void _ZN6S593C52v6Ev();
extern void _ZN6S593C52v7Ev();
extern void _ZN6S593C52v8Ev();
extern void _ZN6S593C52v9Ev();
extern void _ZN6S593C53v10Ev();
extern void _ZN6S593C53v11Ev();
extern void _ZN6S593C53v12Ev();
extern void _ZN6S593C53v13Ev();
extern void _ZN6S593C53v14Ev();
extern void _ZN6S593C53v15Ev();
extern void _ZN6S593C53v16Ev();
extern void _ZN6S593C53v17Ev();
extern void _ZN6S593C53v18Ev();
extern void _ZN6S593C53v19Ev();
extern void _ZN6S593C53v20Ev();
extern void _ZN6S593C53v21Ev();
extern void _ZN6S593C53v22Ev();
extern void _ZN6S593C53v23Ev();
extern void _ZN6S593C53v24Ev();
extern void _ZN6S593C53v25Ev();
extern void _ZN6S593C53v26Ev();
extern void _ZN6S593C53v27Ev();
extern void _ZN6S593C53v28Ev();
extern void _ZN6S593C53v29Ev();
extern void _ZN6S593C53v30Ev();
extern void _ZN6S593C53v31Ev();
extern void _ZN6S593C53v32Ev();
extern void _ZN6S593C53v33Ev();
extern void _ZN6S593C53v34Ev();
extern void _ZN6S593C53v35Ev();
extern void _ZN6S593C53v36Ev();
extern void _ZN6S593C53v37Ev();
extern void _ZN6S593C53v38Ev();
extern void _ZN6S593C53v39Ev();
extern void _ZN6S593C53v40Ev();
extern void _ZN6S593C53v41Ev();
extern void _ZN6S593C53v42Ev();
extern void _ZN6S593C53v43Ev();
extern void _ZN6S593C53v44Ev();
extern void _ZN6S593C53v45Ev();
extern void _ZN6S593C53v46Ev();
extern void _ZN6S593C53v47Ev();
extern void _ZN6S593C53v48Ev();
extern void _ZN6S593C53v49Ev();
extern void _ZN6S593C53v50Ev();
extern void _ZN6S593C53v51Ev();
extern void _ZN6S593C53v52Ev();
extern void _ZN6S593C53v53Ev();
extern void _ZN6S593C53v54Ev();
extern void _ZN6S593C53v55Ev();
extern void _ZN6S593C53v56Ev();
extern void _ZN6S593C53v57Ev();
extern void _ZN6S593C53v58Ev();
extern void _ZN6S593C53v59Ev();
extern void _ZN6S593C53v60Ev();
extern void _ZN6S593C53v61Ev();
extern void _ZN6S593C53v62Ev();
extern void _ZN6S593C53v63Ev();
extern void _ZN6S593C53v64Ev();
extern void _ZN6S593C53v65Ev();
extern void _ZN6S593C53v66Ev();
extern void _ZN6S593C53v67Ev();
static  VTBL_ENTRY vtc_S593C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S593C5[0]),
  (VTBL_ENTRY)&_ZN6S593C5D1Ev,
  (VTBL_ENTRY)&_ZN6S593C5D0Ev,
  (VTBL_ENTRY)&_ZN6S593C52v4Ev,
  (VTBL_ENTRY)&_ZN6S593C52v5Ev,
  (VTBL_ENTRY)&_ZN6S593C52v6Ev,
  (VTBL_ENTRY)&_ZN6S593C52v7Ev,
  (VTBL_ENTRY)&_ZN6S593C52v8Ev,
  (VTBL_ENTRY)&_ZN6S593C52v9Ev,
  (VTBL_ENTRY)&_ZN6S593C53v10Ev,
  (VTBL_ENTRY)&_ZN6S593C53v11Ev,
  (VTBL_ENTRY)&_ZN6S593C53v12Ev,
  (VTBL_ENTRY)&_ZN6S593C53v13Ev,
  (VTBL_ENTRY)&_ZN6S593C53v14Ev,
  (VTBL_ENTRY)&_ZN6S593C53v15Ev,
  (VTBL_ENTRY)&_ZN6S593C53v16Ev,
  (VTBL_ENTRY)&_ZN6S593C53v17Ev,
  (VTBL_ENTRY)&_ZN6S593C53v18Ev,
  (VTBL_ENTRY)&_ZN6S593C53v19Ev,
  (VTBL_ENTRY)&_ZN6S593C53v20Ev,
  (VTBL_ENTRY)&_ZN6S593C53v21Ev,
  (VTBL_ENTRY)&_ZN6S593C53v22Ev,
  (VTBL_ENTRY)&_ZN6S593C53v23Ev,
  (VTBL_ENTRY)&_ZN6S593C53v24Ev,
  (VTBL_ENTRY)&_ZN6S593C53v25Ev,
  (VTBL_ENTRY)&_ZN6S593C53v26Ev,
  (VTBL_ENTRY)&_ZN6S593C53v27Ev,
  (VTBL_ENTRY)&_ZN6S593C53v28Ev,
  (VTBL_ENTRY)&_ZN6S593C53v29Ev,
  (VTBL_ENTRY)&_ZN6S593C53v30Ev,
  (VTBL_ENTRY)&_ZN6S593C53v31Ev,
  (VTBL_ENTRY)&_ZN6S593C53v32Ev,
  (VTBL_ENTRY)&_ZN6S593C53v33Ev,
  (VTBL_ENTRY)&_ZN6S593C53v34Ev,
  (VTBL_ENTRY)&_ZN6S593C53v35Ev,
  (VTBL_ENTRY)&_ZN6S593C53v36Ev,
  (VTBL_ENTRY)&_ZN6S593C53v37Ev,
  (VTBL_ENTRY)&_ZN6S593C53v38Ev,
  (VTBL_ENTRY)&_ZN6S593C53v39Ev,
  (VTBL_ENTRY)&_ZN6S593C53v40Ev,
  (VTBL_ENTRY)&_ZN6S593C53v41Ev,
  (VTBL_ENTRY)&_ZN6S593C53v42Ev,
  (VTBL_ENTRY)&_ZN6S593C53v43Ev,
  (VTBL_ENTRY)&_ZN6S593C53v44Ev,
  (VTBL_ENTRY)&_ZN6S593C53v45Ev,
  (VTBL_ENTRY)&_ZN6S593C53v46Ev,
  (VTBL_ENTRY)&_ZN6S593C53v47Ev,
  (VTBL_ENTRY)&_ZN6S593C53v48Ev,
  (VTBL_ENTRY)&_ZN6S593C53v49Ev,
  (VTBL_ENTRY)&_ZN6S593C53v50Ev,
  (VTBL_ENTRY)&_ZN6S593C53v51Ev,
  (VTBL_ENTRY)&_ZN6S593C53v52Ev,
  (VTBL_ENTRY)&_ZN6S593C53v53Ev,
  (VTBL_ENTRY)&_ZN6S593C53v54Ev,
  (VTBL_ENTRY)&_ZN6S593C53v55Ev,
  (VTBL_ENTRY)&_ZN6S593C53v56Ev,
  (VTBL_ENTRY)&_ZN6S593C53v57Ev,
  (VTBL_ENTRY)&_ZN6S593C53v58Ev,
  (VTBL_ENTRY)&_ZN6S593C53v59Ev,
  (VTBL_ENTRY)&_ZN6S593C53v60Ev,
  (VTBL_ENTRY)&_ZN6S593C53v61Ev,
  (VTBL_ENTRY)&_ZN6S593C53v62Ev,
  (VTBL_ENTRY)&_ZN6S593C53v63Ev,
  (VTBL_ENTRY)&_ZN6S593C53v64Ev,
  (VTBL_ENTRY)&_ZN6S593C53v65Ev,
  (VTBL_ENTRY)&_ZN6S593C53v66Ev,
  (VTBL_ENTRY)&_ZN6S593C53v67Ev,
};
extern VTBL_ENTRY _ZTI6S593C5[];
extern  VTBL_ENTRY _ZTV6S593C5[];
Class_Descriptor cd_S593C5 = {  "S593C5", // class name
  0,0,//no base classes
  &(vtc_S593C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S593C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S593C5),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  S593C4  : S593C5 {
  int s593c4f0[2];
  void *s593c4f1;
  int s593c4f2[2];
  ::S239C8_nt s593c4f3;
  ::S239C8_nt s593c4f4;
  ::S239C12_nt s593c4f5;
  ::S239C8_nt s593c4f6;
  unsigned int s593c4f7:1;
  unsigned int s593c4f8:1;
  unsigned int s593c4f9:1;
  unsigned int s593c4f10:1;
  unsigned int s593c4f11:1;
  int s593c4f12[2];
  virtual  ~S593C4(); // _ZN6S593C4D1Ev
  virtual void  v68(); // _ZN6S593C43v68Ev
  virtual void  v69(); // _ZN6S593C43v69Ev
  virtual void  v70(); // _ZN6S593C43v70Ev
  virtual void  v71(); // _ZN6S593C43v71Ev
  virtual void  v72(); // _ZN6S593C43v72Ev
  virtual void  v73(); // _ZN6S593C43v73Ev
  virtual void  v74(); // _ZN6S593C43v74Ev
  virtual void  v75(); // _ZN6S593C43v75Ev
  virtual void  v76(); // _ZN6S593C43v76Ev
  virtual void  v77(); // _ZN6S593C43v77Ev
  virtual void  v78(); // _ZN6S593C43v78Ev
  virtual void  v79(); // _ZN6S593C43v79Ev
  virtual void  v80(); // _ZN6S593C43v80Ev
  virtual void  v81(); // _ZN6S593C43v81Ev
  virtual void  v82(); // _ZN6S593C43v82Ev
  virtual void  v83(); // _ZN6S593C43v83Ev
  virtual void  v84(); // _ZN6S593C43v84Ev
  virtual void  v85(); // _ZN6S593C43v85Ev
  virtual void  v86(); // _ZN6S593C43v86Ev
  virtual void  v87(); // _ZN6S593C43v87Ev
  virtual void  v88(); // _ZN6S593C43v88Ev
  virtual void  v89(); // _ZN6S593C43v89Ev
  S593C4(); // tgen
};
//SIG(-1 S593C4) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S593C4 ::~S593C4(){ note_dtor("S593C4", this);}
void  S593C4 ::v68(){vfunc_called(this, "_ZN6S593C43v68Ev");}
void  S593C4 ::v69(){vfunc_called(this, "_ZN6S593C43v69Ev");}
void  S593C4 ::v70(){vfunc_called(this, "_ZN6S593C43v70Ev");}
void  S593C4 ::v71(){vfunc_called(this, "_ZN6S593C43v71Ev");}
void  S593C4 ::v72(){vfunc_called(this, "_ZN6S593C43v72Ev");}
void  S593C4 ::v73(){vfunc_called(this, "_ZN6S593C43v73Ev");}
void  S593C4 ::v74(){vfunc_called(this, "_ZN6S593C43v74Ev");}
void  S593C4 ::v75(){vfunc_called(this, "_ZN6S593C43v75Ev");}
void  S593C4 ::v76(){vfunc_called(this, "_ZN6S593C43v76Ev");}
void  S593C4 ::v77(){vfunc_called(this, "_ZN6S593C43v77Ev");}
void  S593C4 ::v78(){vfunc_called(this, "_ZN6S593C43v78Ev");}
void  S593C4 ::v79(){vfunc_called(this, "_ZN6S593C43v79Ev");}
void  S593C4 ::v80(){vfunc_called(this, "_ZN6S593C43v80Ev");}
void  S593C4 ::v81(){vfunc_called(this, "_ZN6S593C43v81Ev");}
void  S593C4 ::v82(){vfunc_called(this, "_ZN6S593C43v82Ev");}
void  S593C4 ::v83(){vfunc_called(this, "_ZN6S593C43v83Ev");}
void  S593C4 ::v84(){vfunc_called(this, "_ZN6S593C43v84Ev");}
void  S593C4 ::v85(){vfunc_called(this, "_ZN6S593C43v85Ev");}
void  S593C4 ::v86(){vfunc_called(this, "_ZN6S593C43v86Ev");}
void  S593C4 ::v87(){vfunc_called(this, "_ZN6S593C43v87Ev");}
void  S593C4 ::v88(){vfunc_called(this, "_ZN6S593C43v88Ev");}
void  S593C4 ::v89(){vfunc_called(this, "_ZN6S593C43v89Ev");}
S593C4 ::S593C4(){ note_ctor("S593C4", this);} // tgen

static void Test_S593C4()
{
  extern Class_Descriptor cd_S593C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S593C4, buf);
    S593C4 *dp, &lv = *(dp=new (buf) S593C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S593C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S593C4)");
    check_base_class_offset(lv, (S593C5*), 0, "S593C4");
    check_field_offset(lv, s593c4f0, ABISELECT(96,60), "S593C4.s593c4f0");
    check_field_offset(lv, s593c4f1, ABISELECT(104,68), "S593C4.s593c4f1");
    check_field_offset(lv, s593c4f2, ABISELECT(112,72), "S593C4.s593c4f2");
    check_field_offset(lv, s593c4f3, ABISELECT(120,80), "S593C4.s593c4f3");
    check_field_offset(lv, s593c4f4, ABISELECT(136,92), "S593C4.s593c4f4");
    check_field_offset(lv, s593c4f5, ABISELECT(152,104), "S593C4.s593c4f5");
    check_field_offset(lv, s593c4f6, ABISELECT(160,108), "S593C4.s593c4f6");
    set_bf_and_test(lv, s593c4f7, ABISELECT(176,120), 0, 1, 1, "S593C4");
    set_bf_and_test(lv, s593c4f8, ABISELECT(176,120), 1, 1, 1, "S593C4");
    set_bf_and_test(lv, s593c4f9, ABISELECT(176,120), 2, 1, 1, "S593C4");
    set_bf_and_test(lv, s593c4f10, ABISELECT(176,120), 3, 1, 1, "S593C4");
    set_bf_and_test(lv, s593c4f11, ABISELECT(176,120), 4, 1, 1, "S593C4");
    check_field_offset(lv, s593c4f12, ABISELECT(180,124), "S593C4.s593c4f12");
    test_class_info(&lv, &cd_S593C4);
    dp->~S593C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS593C4(Test_S593C4, "S593C4", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S593C4C1Ev();
extern void _ZN6S593C4D1Ev();
Name_Map name_map_S593C4[] = {
  NSPAIR(_ZN6S593C4C1Ev),
  NSPAIR(_ZN6S593C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S593C5;
extern VTBL_ENTRY _ZTI6S593C5[];
extern  VTBL_ENTRY _ZTV6S593C5[];
static Base_Class bases_S593C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S593C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S593C4[];
extern void _ZN6S593C4D1Ev();
extern void _ZN6S593C4D0Ev();
extern void _ZN6S593C52v4Ev();
extern void _ZN6S593C52v5Ev();
extern void _ZN6S593C52v6Ev();
extern void _ZN6S593C52v7Ev();
extern void _ZN6S593C52v8Ev();
extern void _ZN6S593C52v9Ev();
extern void _ZN6S593C53v10Ev();
extern void _ZN6S593C53v11Ev();
extern void _ZN6S593C53v12Ev();
extern void _ZN6S593C53v13Ev();
extern void _ZN6S593C53v14Ev();
extern void _ZN6S593C53v15Ev();
extern void _ZN6S593C53v16Ev();
extern void _ZN6S593C53v17Ev();
extern void _ZN6S593C53v18Ev();
extern void _ZN6S593C53v19Ev();
extern void _ZN6S593C53v20Ev();
extern void _ZN6S593C53v21Ev();
extern void _ZN6S593C53v22Ev();
extern void _ZN6S593C53v23Ev();
extern void _ZN6S593C53v24Ev();
extern void _ZN6S593C53v25Ev();
extern void _ZN6S593C53v26Ev();
extern void _ZN6S593C53v27Ev();
extern void _ZN6S593C53v28Ev();
extern void _ZN6S593C53v29Ev();
extern void _ZN6S593C53v30Ev();
extern void _ZN6S593C53v31Ev();
extern void _ZN6S593C53v32Ev();
extern void _ZN6S593C53v33Ev();
extern void _ZN6S593C53v34Ev();
extern void _ZN6S593C53v35Ev();
extern void _ZN6S593C53v36Ev();
extern void _ZN6S593C53v37Ev();
extern void _ZN6S593C53v38Ev();
extern void _ZN6S593C53v39Ev();
extern void _ZN6S593C53v40Ev();
extern void _ZN6S593C53v41Ev();
extern void _ZN6S593C53v42Ev();
extern void _ZN6S593C53v43Ev();
extern void _ZN6S593C53v44Ev();
extern void _ZN6S593C53v45Ev();
extern void _ZN6S593C53v46Ev();
extern void _ZN6S593C53v47Ev();
extern void _ZN6S593C53v48Ev();
extern void _ZN6S593C53v49Ev();
extern void _ZN6S593C53v50Ev();
extern void _ZN6S593C53v51Ev();
extern void _ZN6S593C53v52Ev();
extern void _ZN6S593C53v53Ev();
extern void _ZN6S593C53v54Ev();
extern void _ZN6S593C53v55Ev();
extern void _ZN6S593C53v56Ev();
extern void _ZN6S593C53v57Ev();
extern void _ZN6S593C53v58Ev();
extern void _ZN6S593C53v59Ev();
extern void _ZN6S593C53v60Ev();
extern void _ZN6S593C53v61Ev();
extern void _ZN6S593C53v62Ev();
extern void _ZN6S593C53v63Ev();
extern void _ZN6S593C53v64Ev();
extern void _ZN6S593C53v65Ev();
extern void _ZN6S593C53v66Ev();
extern void _ZN6S593C53v67Ev();
extern void _ZN6S593C43v68Ev();
extern void _ZN6S593C43v69Ev();
extern void _ZN6S593C43v70Ev();
extern void _ZN6S593C43v71Ev();
extern void _ZN6S593C43v72Ev();
extern void _ZN6S593C43v73Ev();
extern void _ZN6S593C43v74Ev();
extern void _ZN6S593C43v75Ev();
extern void _ZN6S593C43v76Ev();
extern void _ZN6S593C43v77Ev();
extern void _ZN6S593C43v78Ev();
extern void _ZN6S593C43v79Ev();
extern void _ZN6S593C43v80Ev();
extern void _ZN6S593C43v81Ev();
extern void _ZN6S593C43v82Ev();
extern void _ZN6S593C43v83Ev();
extern void _ZN6S593C43v84Ev();
extern void _ZN6S593C43v85Ev();
extern void _ZN6S593C43v86Ev();
extern void _ZN6S593C43v87Ev();
extern void _ZN6S593C43v88Ev();
extern void _ZN6S593C43v89Ev();
static  VTBL_ENTRY vtc_S593C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S593C4[0]),
  (VTBL_ENTRY)&_ZN6S593C4D1Ev,
  (VTBL_ENTRY)&_ZN6S593C4D0Ev,
  (VTBL_ENTRY)&_ZN6S593C52v4Ev,
  (VTBL_ENTRY)&_ZN6S593C52v5Ev,
  (VTBL_ENTRY)&_ZN6S593C52v6Ev,
  (VTBL_ENTRY)&_ZN6S593C52v7Ev,
  (VTBL_ENTRY)&_ZN6S593C52v8Ev,
  (VTBL_ENTRY)&_ZN6S593C52v9Ev,
  (VTBL_ENTRY)&_ZN6S593C53v10Ev,
  (VTBL_ENTRY)&_ZN6S593C53v11Ev,
  (VTBL_ENTRY)&_ZN6S593C53v12Ev,
  (VTBL_ENTRY)&_ZN6S593C53v13Ev,
  (VTBL_ENTRY)&_ZN6S593C53v14Ev,
  (VTBL_ENTRY)&_ZN6S593C53v15Ev,
  (VTBL_ENTRY)&_ZN6S593C53v16Ev,
  (VTBL_ENTRY)&_ZN6S593C53v17Ev,
  (VTBL_ENTRY)&_ZN6S593C53v18Ev,
  (VTBL_ENTRY)&_ZN6S593C53v19Ev,
  (VTBL_ENTRY)&_ZN6S593C53v20Ev,
  (VTBL_ENTRY)&_ZN6S593C53v21Ev,
  (VTBL_ENTRY)&_ZN6S593C53v22Ev,
  (VTBL_ENTRY)&_ZN6S593C53v23Ev,
  (VTBL_ENTRY)&_ZN6S593C53v24Ev,
  (VTBL_ENTRY)&_ZN6S593C53v25Ev,
  (VTBL_ENTRY)&_ZN6S593C53v26Ev,
  (VTBL_ENTRY)&_ZN6S593C53v27Ev,
  (VTBL_ENTRY)&_ZN6S593C53v28Ev,
  (VTBL_ENTRY)&_ZN6S593C53v29Ev,
  (VTBL_ENTRY)&_ZN6S593C53v30Ev,
  (VTBL_ENTRY)&_ZN6S593C53v31Ev,
  (VTBL_ENTRY)&_ZN6S593C53v32Ev,
  (VTBL_ENTRY)&_ZN6S593C53v33Ev,
  (VTBL_ENTRY)&_ZN6S593C53v34Ev,
  (VTBL_ENTRY)&_ZN6S593C53v35Ev,
  (VTBL_ENTRY)&_ZN6S593C53v36Ev,
  (VTBL_ENTRY)&_ZN6S593C53v37Ev,
  (VTBL_ENTRY)&_ZN6S593C53v38Ev,
  (VTBL_ENTRY)&_ZN6S593C53v39Ev,
  (VTBL_ENTRY)&_ZN6S593C53v40Ev,
  (VTBL_ENTRY)&_ZN6S593C53v41Ev,
  (VTBL_ENTRY)&_ZN6S593C53v42Ev,
  (VTBL_ENTRY)&_ZN6S593C53v43Ev,
  (VTBL_ENTRY)&_ZN6S593C53v44Ev,
  (VTBL_ENTRY)&_ZN6S593C53v45Ev,
  (VTBL_ENTRY)&_ZN6S593C53v46Ev,
  (VTBL_ENTRY)&_ZN6S593C53v47Ev,
  (VTBL_ENTRY)&_ZN6S593C53v48Ev,
  (VTBL_ENTRY)&_ZN6S593C53v49Ev,
  (VTBL_ENTRY)&_ZN6S593C53v50Ev,
  (VTBL_ENTRY)&_ZN6S593C53v51Ev,
  (VTBL_ENTRY)&_ZN6S593C53v52Ev,
  (VTBL_ENTRY)&_ZN6S593C53v53Ev,
  (VTBL_ENTRY)&_ZN6S593C53v54Ev,
  (VTBL_ENTRY)&_ZN6S593C53v55Ev,
  (VTBL_ENTRY)&_ZN6S593C53v56Ev,
  (VTBL_ENTRY)&_ZN6S593C53v57Ev,
  (VTBL_ENTRY)&_ZN6S593C53v58Ev,
  (VTBL_ENTRY)&_ZN6S593C53v59Ev,
  (VTBL_ENTRY)&_ZN6S593C53v60Ev,
  (VTBL_ENTRY)&_ZN6S593C53v61Ev,
  (VTBL_ENTRY)&_ZN6S593C53v62Ev,
  (VTBL_ENTRY)&_ZN6S593C53v63Ev,
  (VTBL_ENTRY)&_ZN6S593C53v64Ev,
  (VTBL_ENTRY)&_ZN6S593C53v65Ev,
  (VTBL_ENTRY)&_ZN6S593C53v66Ev,
  (VTBL_ENTRY)&_ZN6S593C53v67Ev,
  (VTBL_ENTRY)&_ZN6S593C43v68Ev,
  (VTBL_ENTRY)&_ZN6S593C43v69Ev,
  (VTBL_ENTRY)&_ZN6S593C43v70Ev,
  (VTBL_ENTRY)&_ZN6S593C43v71Ev,
  (VTBL_ENTRY)&_ZN6S593C43v72Ev,
  (VTBL_ENTRY)&_ZN6S593C43v73Ev,
  (VTBL_ENTRY)&_ZN6S593C43v74Ev,
  (VTBL_ENTRY)&_ZN6S593C43v75Ev,
  (VTBL_ENTRY)&_ZN6S593C43v76Ev,
  (VTBL_ENTRY)&_ZN6S593C43v77Ev,
  (VTBL_ENTRY)&_ZN6S593C43v78Ev,
  (VTBL_ENTRY)&_ZN6S593C43v79Ev,
  (VTBL_ENTRY)&_ZN6S593C43v80Ev,
  (VTBL_ENTRY)&_ZN6S593C43v81Ev,
  (VTBL_ENTRY)&_ZN6S593C43v82Ev,
  (VTBL_ENTRY)&_ZN6S593C43v83Ev,
  (VTBL_ENTRY)&_ZN6S593C43v84Ev,
  (VTBL_ENTRY)&_ZN6S593C43v85Ev,
  (VTBL_ENTRY)&_ZN6S593C43v86Ev,
  (VTBL_ENTRY)&_ZN6S593C43v87Ev,
  (VTBL_ENTRY)&_ZN6S593C43v88Ev,
  (VTBL_ENTRY)&_ZN6S593C43v89Ev,
};
extern VTBL_ENTRY _ZTI6S593C4[];
extern  VTBL_ENTRY _ZTV6S593C4[];
Class_Descriptor cd_S593C4 = {  "S593C4", // class name
  bases_S593C4, 1,
  &(vtc_S593C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S593C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S593C4),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S593C3  : S593C4 {
  unsigned int s593c3f0:1;
  unsigned int s593c3f1:1;
  unsigned int s593c3f2:1;
  ::S3221C17 s593c3f3;
  ::S3221C11 s593c3f4;
  ::S3221C5_nt s593c3f5;
  ::S3168C19 s593c3f6;
  int s593c3f7[3];
  virtual  ~S593C3(); // _ZN6S593C3D1Ev
  virtual void  v90(); // _ZN6S593C33v90Ev
  virtual void  v91(); // _ZN6S593C33v91Ev
  virtual void  v92(); // _ZN6S593C33v92Ev
  virtual void  v93(); // _ZN6S593C33v93Ev
  virtual void  v94(); // _ZN6S593C33v94Ev
  virtual void  v95(); // _ZN6S593C33v95Ev
  virtual void  v96(); // _ZN6S593C33v96Ev
  virtual void  v97(); // _ZN6S593C33v97Ev
  virtual void  v98(); // _ZN6S593C33v98Ev
  virtual void  v99(); // _ZN6S593C33v99Ev
  virtual void  v100(); // _ZN6S593C34v100Ev
  virtual void  v101(); // _ZN6S593C34v101Ev
  virtual void  v102(); // _ZN6S593C34v102Ev
  virtual void  v103(); // _ZN6S593C34v103Ev
  virtual void  v104(); // _ZN6S593C34v104Ev
  virtual void  v105(); // _ZN6S593C34v105Ev
  virtual void  v106(); // _ZN6S593C34v106Ev
  virtual void  v107(); // _ZN6S593C34v107Ev
  virtual void  v108(); // _ZN6S593C34v108Ev
  virtual void  v109(); // _ZN6S593C34v109Ev
  S593C3(); // tgen
};
//SIG(-1 S593C3) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S593C3 ::~S593C3(){ note_dtor("S593C3", this);}
void  S593C3 ::v90(){vfunc_called(this, "_ZN6S593C33v90Ev");}
void  S593C3 ::v91(){vfunc_called(this, "_ZN6S593C33v91Ev");}
void  S593C3 ::v92(){vfunc_called(this, "_ZN6S593C33v92Ev");}
void  S593C3 ::v93(){vfunc_called(this, "_ZN6S593C33v93Ev");}
void  S593C3 ::v94(){vfunc_called(this, "_ZN6S593C33v94Ev");}
void  S593C3 ::v95(){vfunc_called(this, "_ZN6S593C33v95Ev");}
void  S593C3 ::v96(){vfunc_called(this, "_ZN6S593C33v96Ev");}
void  S593C3 ::v97(){vfunc_called(this, "_ZN6S593C33v97Ev");}
void  S593C3 ::v98(){vfunc_called(this, "_ZN6S593C33v98Ev");}
void  S593C3 ::v99(){vfunc_called(this, "_ZN6S593C33v99Ev");}
void  S593C3 ::v100(){vfunc_called(this, "_ZN6S593C34v100Ev");}
void  S593C3 ::v101(){vfunc_called(this, "_ZN6S593C34v101Ev");}
void  S593C3 ::v102(){vfunc_called(this, "_ZN6S593C34v102Ev");}
void  S593C3 ::v103(){vfunc_called(this, "_ZN6S593C34v103Ev");}
void  S593C3 ::v104(){vfunc_called(this, "_ZN6S593C34v104Ev");}
void  S593C3 ::v105(){vfunc_called(this, "_ZN6S593C34v105Ev");}
void  S593C3 ::v106(){vfunc_called(this, "_ZN6S593C34v106Ev");}
void  S593C3 ::v107(){vfunc_called(this, "_ZN6S593C34v107Ev");}
void  S593C3 ::v108(){vfunc_called(this, "_ZN6S593C34v108Ev");}
void  S593C3 ::v109(){vfunc_called(this, "_ZN6S593C34v109Ev");}
S593C3 ::S593C3(){ note_ctor("S593C3", this);} // tgen

static void Test_S593C3()
{
  extern Class_Descriptor cd_S593C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S593C3, buf);
    S593C3 *dp, &lv = *(dp=new (buf) S593C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S593C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S593C3)");
    check_base_class_offset(lv, (S593C5*)(S593C4*), 0, "S593C3");
    check_base_class_offset(lv, (S593C4*), 0, "S593C3");
    set_bf_and_test(lv, s593c3f0, ABISELECT(188,132), 0, 1, 1, "S593C3");
    set_bf_and_test(lv, s593c3f1, ABISELECT(188,132), 1, 1, 1, "S593C3");
    set_bf_and_test(lv, s593c3f2, ABISELECT(188,132), 2, 1, 1, "S593C3");
    check_field_offset(lv, s593c3f3, ABISELECT(192,136), "S593C3.s593c3f3");
    check_field_offset(lv, s593c3f4, ABISELECT(208,148), "S593C3.s593c3f4");
    check_field_offset(lv, s593c3f5, ABISELECT(224,160), "S593C3.s593c3f5");
    check_field_offset(lv, s593c3f6, ABISELECT(240,172), "S593C3.s593c3f6");
    check_field_offset(lv, s593c3f7, ABISELECT(256,184), "S593C3.s593c3f7");
    test_class_info(&lv, &cd_S593C3);
    dp->~S593C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS593C3(Test_S593C3, "S593C3", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S593C3C1Ev();
extern void _ZN6S593C3D1Ev();
Name_Map name_map_S593C3[] = {
  NSPAIR(_ZN6S593C3C1Ev),
  NSPAIR(_ZN6S593C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S593C5;
extern VTBL_ENTRY _ZTI6S593C5[];
extern  VTBL_ENTRY _ZTV6S593C5[];
extern Class_Descriptor cd_S593C4;
extern VTBL_ENTRY _ZTI6S593C4[];
extern  VTBL_ENTRY _ZTV6S593C4[];
static Base_Class bases_S593C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S593C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S593C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S593C3[];
extern void _ZN6S593C3D1Ev();
extern void _ZN6S593C3D0Ev();
extern void _ZN6S593C52v4Ev();
extern void _ZN6S593C52v5Ev();
extern void _ZN6S593C52v6Ev();
extern void _ZN6S593C52v7Ev();
extern void _ZN6S593C52v8Ev();
extern void _ZN6S593C52v9Ev();
extern void _ZN6S593C53v10Ev();
extern void _ZN6S593C53v11Ev();
extern void _ZN6S593C53v12Ev();
extern void _ZN6S593C53v13Ev();
extern void _ZN6S593C53v14Ev();
extern void _ZN6S593C53v15Ev();
extern void _ZN6S593C53v16Ev();
extern void _ZN6S593C53v17Ev();
extern void _ZN6S593C53v18Ev();
extern void _ZN6S593C53v19Ev();
extern void _ZN6S593C53v20Ev();
extern void _ZN6S593C53v21Ev();
extern void _ZN6S593C53v22Ev();
extern void _ZN6S593C53v23Ev();
extern void _ZN6S593C53v24Ev();
extern void _ZN6S593C53v25Ev();
extern void _ZN6S593C53v26Ev();
extern void _ZN6S593C53v27Ev();
extern void _ZN6S593C53v28Ev();
extern void _ZN6S593C53v29Ev();
extern void _ZN6S593C53v30Ev();
extern void _ZN6S593C53v31Ev();
extern void _ZN6S593C53v32Ev();
extern void _ZN6S593C53v33Ev();
extern void _ZN6S593C53v34Ev();
extern void _ZN6S593C53v35Ev();
extern void _ZN6S593C53v36Ev();
extern void _ZN6S593C53v37Ev();
extern void _ZN6S593C53v38Ev();
extern void _ZN6S593C53v39Ev();
extern void _ZN6S593C53v40Ev();
extern void _ZN6S593C53v41Ev();
extern void _ZN6S593C53v42Ev();
extern void _ZN6S593C53v43Ev();
extern void _ZN6S593C53v44Ev();
extern void _ZN6S593C53v45Ev();
extern void _ZN6S593C53v46Ev();
extern void _ZN6S593C53v47Ev();
extern void _ZN6S593C53v48Ev();
extern void _ZN6S593C53v49Ev();
extern void _ZN6S593C53v50Ev();
extern void _ZN6S593C53v51Ev();
extern void _ZN6S593C53v52Ev();
extern void _ZN6S593C53v53Ev();
extern void _ZN6S593C53v54Ev();
extern void _ZN6S593C53v55Ev();
extern void _ZN6S593C53v56Ev();
extern void _ZN6S593C53v57Ev();
extern void _ZN6S593C53v58Ev();
extern void _ZN6S593C53v59Ev();
extern void _ZN6S593C53v60Ev();
extern void _ZN6S593C53v61Ev();
extern void _ZN6S593C53v62Ev();
extern void _ZN6S593C53v63Ev();
extern void _ZN6S593C53v64Ev();
extern void _ZN6S593C53v65Ev();
extern void _ZN6S593C53v66Ev();
extern void _ZN6S593C53v67Ev();
extern void _ZN6S593C43v68Ev();
extern void _ZN6S593C43v69Ev();
extern void _ZN6S593C43v70Ev();
extern void _ZN6S593C43v71Ev();
extern void _ZN6S593C43v72Ev();
extern void _ZN6S593C43v73Ev();
extern void _ZN6S593C43v74Ev();
extern void _ZN6S593C43v75Ev();
extern void _ZN6S593C43v76Ev();
extern void _ZN6S593C43v77Ev();
extern void _ZN6S593C43v78Ev();
extern void _ZN6S593C43v79Ev();
extern void _ZN6S593C43v80Ev();
extern void _ZN6S593C43v81Ev();
extern void _ZN6S593C43v82Ev();
extern void _ZN6S593C43v83Ev();
extern void _ZN6S593C43v84Ev();
extern void _ZN6S593C43v85Ev();
extern void _ZN6S593C43v86Ev();
extern void _ZN6S593C43v87Ev();
extern void _ZN6S593C43v88Ev();
extern void _ZN6S593C43v89Ev();
extern void _ZN6S593C33v90Ev();
extern void _ZN6S593C33v91Ev();
extern void _ZN6S593C33v92Ev();
extern void _ZN6S593C33v93Ev();
extern void _ZN6S593C33v94Ev();
extern void _ZN6S593C33v95Ev();
extern void _ZN6S593C33v96Ev();
extern void _ZN6S593C33v97Ev();
extern void _ZN6S593C33v98Ev();
extern void _ZN6S593C33v99Ev();
extern void _ZN6S593C34v100Ev();
extern void _ZN6S593C34v101Ev();
extern void _ZN6S593C34v102Ev();
extern void _ZN6S593C34v103Ev();
extern void _ZN6S593C34v104Ev();
extern void _ZN6S593C34v105Ev();
extern void _ZN6S593C34v106Ev();
extern void _ZN6S593C34v107Ev();
extern void _ZN6S593C34v108Ev();
extern void _ZN6S593C34v109Ev();
static  VTBL_ENTRY vtc_S593C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S593C3[0]),
  (VTBL_ENTRY)&_ZN6S593C3D1Ev,
  (VTBL_ENTRY)&_ZN6S593C3D0Ev,
  (VTBL_ENTRY)&_ZN6S593C52v4Ev,
  (VTBL_ENTRY)&_ZN6S593C52v5Ev,
  (VTBL_ENTRY)&_ZN6S593C52v6Ev,
  (VTBL_ENTRY)&_ZN6S593C52v7Ev,
  (VTBL_ENTRY)&_ZN6S593C52v8Ev,
  (VTBL_ENTRY)&_ZN6S593C52v9Ev,
  (VTBL_ENTRY)&_ZN6S593C53v10Ev,
  (VTBL_ENTRY)&_ZN6S593C53v11Ev,
  (VTBL_ENTRY)&_ZN6S593C53v12Ev,
  (VTBL_ENTRY)&_ZN6S593C53v13Ev,
  (VTBL_ENTRY)&_ZN6S593C53v14Ev,
  (VTBL_ENTRY)&_ZN6S593C53v15Ev,
  (VTBL_ENTRY)&_ZN6S593C53v16Ev,
  (VTBL_ENTRY)&_ZN6S593C53v17Ev,
  (VTBL_ENTRY)&_ZN6S593C53v18Ev,
  (VTBL_ENTRY)&_ZN6S593C53v19Ev,
  (VTBL_ENTRY)&_ZN6S593C53v20Ev,
  (VTBL_ENTRY)&_ZN6S593C53v21Ev,
  (VTBL_ENTRY)&_ZN6S593C53v22Ev,
  (VTBL_ENTRY)&_ZN6S593C53v23Ev,
  (VTBL_ENTRY)&_ZN6S593C53v24Ev,
  (VTBL_ENTRY)&_ZN6S593C53v25Ev,
  (VTBL_ENTRY)&_ZN6S593C53v26Ev,
  (VTBL_ENTRY)&_ZN6S593C53v27Ev,
  (VTBL_ENTRY)&_ZN6S593C53v28Ev,
  (VTBL_ENTRY)&_ZN6S593C53v29Ev,
  (VTBL_ENTRY)&_ZN6S593C53v30Ev,
  (VTBL_ENTRY)&_ZN6S593C53v31Ev,
  (VTBL_ENTRY)&_ZN6S593C53v32Ev,
  (VTBL_ENTRY)&_ZN6S593C53v33Ev,
  (VTBL_ENTRY)&_ZN6S593C53v34Ev,
  (VTBL_ENTRY)&_ZN6S593C53v35Ev,
  (VTBL_ENTRY)&_ZN6S593C53v36Ev,
  (VTBL_ENTRY)&_ZN6S593C53v37Ev,
  (VTBL_ENTRY)&_ZN6S593C53v38Ev,
  (VTBL_ENTRY)&_ZN6S593C53v39Ev,
  (VTBL_ENTRY)&_ZN6S593C53v40Ev,
  (VTBL_ENTRY)&_ZN6S593C53v41Ev,
  (VTBL_ENTRY)&_ZN6S593C53v42Ev,
  (VTBL_ENTRY)&_ZN6S593C53v43Ev,
  (VTBL_ENTRY)&_ZN6S593C53v44Ev,
  (VTBL_ENTRY)&_ZN6S593C53v45Ev,
  (VTBL_ENTRY)&_ZN6S593C53v46Ev,
  (VTBL_ENTRY)&_ZN6S593C53v47Ev,
  (VTBL_ENTRY)&_ZN6S593C53v48Ev,
  (VTBL_ENTRY)&_ZN6S593C53v49Ev,
  (VTBL_ENTRY)&_ZN6S593C53v50Ev,
  (VTBL_ENTRY)&_ZN6S593C53v51Ev,
  (VTBL_ENTRY)&_ZN6S593C53v52Ev,
  (VTBL_ENTRY)&_ZN6S593C53v53Ev,
  (VTBL_ENTRY)&_ZN6S593C53v54Ev,
  (VTBL_ENTRY)&_ZN6S593C53v55Ev,
  (VTBL_ENTRY)&_ZN6S593C53v56Ev,
  (VTBL_ENTRY)&_ZN6S593C53v57Ev,
  (VTBL_ENTRY)&_ZN6S593C53v58Ev,
  (VTBL_ENTRY)&_ZN6S593C53v59Ev,
  (VTBL_ENTRY)&_ZN6S593C53v60Ev,
  (VTBL_ENTRY)&_ZN6S593C53v61Ev,
  (VTBL_ENTRY)&_ZN6S593C53v62Ev,
  (VTBL_ENTRY)&_ZN6S593C53v63Ev,
  (VTBL_ENTRY)&_ZN6S593C53v64Ev,
  (VTBL_ENTRY)&_ZN6S593C53v65Ev,
  (VTBL_ENTRY)&_ZN6S593C53v66Ev,
  (VTBL_ENTRY)&_ZN6S593C53v67Ev,
  (VTBL_ENTRY)&_ZN6S593C43v68Ev,
  (VTBL_ENTRY)&_ZN6S593C43v69Ev,
  (VTBL_ENTRY)&_ZN6S593C43v70Ev,
  (VTBL_ENTRY)&_ZN6S593C43v71Ev,
  (VTBL_ENTRY)&_ZN6S593C43v72Ev,
  (VTBL_ENTRY)&_ZN6S593C43v73Ev,
  (VTBL_ENTRY)&_ZN6S593C43v74Ev,
  (VTBL_ENTRY)&_ZN6S593C43v75Ev,
  (VTBL_ENTRY)&_ZN6S593C43v76Ev,
  (VTBL_ENTRY)&_ZN6S593C43v77Ev,
  (VTBL_ENTRY)&_ZN6S593C43v78Ev,
  (VTBL_ENTRY)&_ZN6S593C43v79Ev,
  (VTBL_ENTRY)&_ZN6S593C43v80Ev,
  (VTBL_ENTRY)&_ZN6S593C43v81Ev,
  (VTBL_ENTRY)&_ZN6S593C43v82Ev,
  (VTBL_ENTRY)&_ZN6S593C43v83Ev,
  (VTBL_ENTRY)&_ZN6S593C43v84Ev,
  (VTBL_ENTRY)&_ZN6S593C43v85Ev,
  (VTBL_ENTRY)&_ZN6S593C43v86Ev,
  (VTBL_ENTRY)&_ZN6S593C43v87Ev,
  (VTBL_ENTRY)&_ZN6S593C43v88Ev,
  (VTBL_ENTRY)&_ZN6S593C43v89Ev,
  (VTBL_ENTRY)&_ZN6S593C33v90Ev,
  (VTBL_ENTRY)&_ZN6S593C33v91Ev,
  (VTBL_ENTRY)&_ZN6S593C33v92Ev,
  (VTBL_ENTRY)&_ZN6S593C33v93Ev,
  (VTBL_ENTRY)&_ZN6S593C33v94Ev,
  (VTBL_ENTRY)&_ZN6S593C33v95Ev,
  (VTBL_ENTRY)&_ZN6S593C33v96Ev,
  (VTBL_ENTRY)&_ZN6S593C33v97Ev,
  (VTBL_ENTRY)&_ZN6S593C33v98Ev,
  (VTBL_ENTRY)&_ZN6S593C33v99Ev,
  (VTBL_ENTRY)&_ZN6S593C34v100Ev,
  (VTBL_ENTRY)&_ZN6S593C34v101Ev,
  (VTBL_ENTRY)&_ZN6S593C34v102Ev,
  (VTBL_ENTRY)&_ZN6S593C34v103Ev,
  (VTBL_ENTRY)&_ZN6S593C34v104Ev,
  (VTBL_ENTRY)&_ZN6S593C34v105Ev,
  (VTBL_ENTRY)&_ZN6S593C34v106Ev,
  (VTBL_ENTRY)&_ZN6S593C34v107Ev,
  (VTBL_ENTRY)&_ZN6S593C34v108Ev,
  (VTBL_ENTRY)&_ZN6S593C34v109Ev,
};
extern VTBL_ENTRY _ZTI6S593C3[];
extern  VTBL_ENTRY _ZTV6S593C3[];
Class_Descriptor cd_S593C3 = {  "S593C3", // class name
  bases_S593C3, 2,
  &(vtc_S593C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S593C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S593C3),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S593C2 ::~S593C2(){ note_dtor("S593C2", this);}
void  S593C2 ::v110(){vfunc_called(this, "_ZN6S593C24v110Ev");}
void  S593C2 ::v111(){vfunc_called(this, "_ZN6S593C24v111Ev");}
S593C2 ::S593C2(){ note_ctor("S593C2", this);} // tgen

static void Test_S593C2()
{
  extern Class_Descriptor cd_S593C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S593C2, buf);
    S593C2 *dp, &lv = *(dp=new (buf) S593C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S593C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S593C2)");
    check_base_class_offset(lv, (S593C5*)(S593C4*)(S593C3*), 0, "S593C2");
    check_base_class_offset(lv, (S593C4*)(S593C3*), 0, "S593C2");
    check_base_class_offset(lv, (S593C3*), 0, "S593C2");
    test_class_info(&lv, &cd_S593C2);
    dp->~S593C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS593C2(Test_S593C2, "S593C2", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S593C2C1Ev();
extern void _ZN6S593C2D1Ev();
Name_Map name_map_S593C2[] = {
  NSPAIR(_ZN6S593C2C1Ev),
  NSPAIR(_ZN6S593C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S593C5;
extern VTBL_ENTRY _ZTI6S593C5[];
extern  VTBL_ENTRY _ZTV6S593C5[];
extern Class_Descriptor cd_S593C4;
extern VTBL_ENTRY _ZTI6S593C4[];
extern  VTBL_ENTRY _ZTV6S593C4[];
extern Class_Descriptor cd_S593C3;
extern VTBL_ENTRY _ZTI6S593C3[];
extern  VTBL_ENTRY _ZTV6S593C3[];
static Base_Class bases_S593C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S593C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S593C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S593C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S593C2[];
extern void _ZN6S593C2D1Ev();
extern void _ZN6S593C2D0Ev();
extern void _ZN6S593C52v4Ev();
extern void _ZN6S593C52v5Ev();
extern void _ZN6S593C52v6Ev();
extern void _ZN6S593C52v7Ev();
extern void _ZN6S593C52v8Ev();
extern void _ZN6S593C52v9Ev();
extern void _ZN6S593C53v10Ev();
extern void _ZN6S593C53v11Ev();
extern void _ZN6S593C53v12Ev();
extern void _ZN6S593C53v13Ev();
extern void _ZN6S593C53v14Ev();
extern void _ZN6S593C53v15Ev();
extern void _ZN6S593C53v16Ev();
extern void _ZN6S593C53v17Ev();
extern void _ZN6S593C53v18Ev();
extern void _ZN6S593C53v19Ev();
extern void _ZN6S593C53v20Ev();
extern void _ZN6S593C53v21Ev();
extern void _ZN6S593C53v22Ev();
extern void _ZN6S593C53v23Ev();
extern void _ZN6S593C53v24Ev();
extern void _ZN6S593C53v25Ev();
extern void _ZN6S593C53v26Ev();
extern void _ZN6S593C53v27Ev();
extern void _ZN6S593C53v28Ev();
extern void _ZN6S593C53v29Ev();
extern void _ZN6S593C53v30Ev();
extern void _ZN6S593C53v31Ev();
extern void _ZN6S593C53v32Ev();
extern void _ZN6S593C53v33Ev();
extern void _ZN6S593C53v34Ev();
extern void _ZN6S593C53v35Ev();
extern void _ZN6S593C53v36Ev();
extern void _ZN6S593C53v37Ev();
extern void _ZN6S593C53v38Ev();
extern void _ZN6S593C53v39Ev();
extern void _ZN6S593C53v40Ev();
extern void _ZN6S593C53v41Ev();
extern void _ZN6S593C53v42Ev();
extern void _ZN6S593C53v43Ev();
extern void _ZN6S593C53v44Ev();
extern void _ZN6S593C53v45Ev();
extern void _ZN6S593C53v46Ev();
extern void _ZN6S593C53v47Ev();
extern void _ZN6S593C53v48Ev();
extern void _ZN6S593C53v49Ev();
extern void _ZN6S593C53v50Ev();
extern void _ZN6S593C53v51Ev();
extern void _ZN6S593C53v52Ev();
extern void _ZN6S593C53v53Ev();
extern void _ZN6S593C53v54Ev();
extern void _ZN6S593C53v55Ev();
extern void _ZN6S593C53v56Ev();
extern void _ZN6S593C53v57Ev();
extern void _ZN6S593C53v58Ev();
extern void _ZN6S593C53v59Ev();
extern void _ZN6S593C53v60Ev();
extern void _ZN6S593C53v61Ev();
extern void _ZN6S593C53v62Ev();
extern void _ZN6S593C53v63Ev();
extern void _ZN6S593C53v64Ev();
extern void _ZN6S593C53v65Ev();
extern void _ZN6S593C53v66Ev();
extern void _ZN6S593C53v67Ev();
extern void _ZN6S593C43v68Ev();
extern void _ZN6S593C43v69Ev();
extern void _ZN6S593C43v70Ev();
extern void _ZN6S593C43v71Ev();
extern void _ZN6S593C43v72Ev();
extern void _ZN6S593C43v73Ev();
extern void _ZN6S593C43v74Ev();
extern void _ZN6S593C43v75Ev();
extern void _ZN6S593C43v76Ev();
extern void _ZN6S593C43v77Ev();
extern void _ZN6S593C43v78Ev();
extern void _ZN6S593C43v79Ev();
extern void _ZN6S593C43v80Ev();
extern void _ZN6S593C43v81Ev();
extern void _ZN6S593C43v82Ev();
extern void _ZN6S593C43v83Ev();
extern void _ZN6S593C43v84Ev();
extern void _ZN6S593C43v85Ev();
extern void _ZN6S593C43v86Ev();
extern void _ZN6S593C43v87Ev();
extern void _ZN6S593C43v88Ev();
extern void _ZN6S593C43v89Ev();
extern void _ZN6S593C33v90Ev();
extern void _ZN6S593C33v91Ev();
extern void _ZN6S593C33v92Ev();
extern void _ZN6S593C33v93Ev();
extern void _ZN6S593C33v94Ev();
extern void _ZN6S593C33v95Ev();
extern void _ZN6S593C33v96Ev();
extern void _ZN6S593C33v97Ev();
extern void _ZN6S593C33v98Ev();
extern void _ZN6S593C33v99Ev();
extern void _ZN6S593C34v100Ev();
extern void _ZN6S593C34v101Ev();
extern void _ZN6S593C34v102Ev();
extern void _ZN6S593C34v103Ev();
extern void _ZN6S593C34v104Ev();
extern void _ZN6S593C34v105Ev();
extern void _ZN6S593C34v106Ev();
extern void _ZN6S593C34v107Ev();
extern void _ZN6S593C34v108Ev();
extern void _ZN6S593C34v109Ev();
extern void _ZN6S593C24v110Ev();
extern void _ZN6S593C24v111Ev();
static  VTBL_ENTRY vtc_S593C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S593C2[0]),
  (VTBL_ENTRY)&_ZN6S593C2D1Ev,
  (VTBL_ENTRY)&_ZN6S593C2D0Ev,
  (VTBL_ENTRY)&_ZN6S593C52v4Ev,
  (VTBL_ENTRY)&_ZN6S593C52v5Ev,
  (VTBL_ENTRY)&_ZN6S593C52v6Ev,
  (VTBL_ENTRY)&_ZN6S593C52v7Ev,
  (VTBL_ENTRY)&_ZN6S593C52v8Ev,
  (VTBL_ENTRY)&_ZN6S593C52v9Ev,
  (VTBL_ENTRY)&_ZN6S593C53v10Ev,
  (VTBL_ENTRY)&_ZN6S593C53v11Ev,
  (VTBL_ENTRY)&_ZN6S593C53v12Ev,
  (VTBL_ENTRY)&_ZN6S593C53v13Ev,
  (VTBL_ENTRY)&_ZN6S593C53v14Ev,
  (VTBL_ENTRY)&_ZN6S593C53v15Ev,
  (VTBL_ENTRY)&_ZN6S593C53v16Ev,
  (VTBL_ENTRY)&_ZN6S593C53v17Ev,
  (VTBL_ENTRY)&_ZN6S593C53v18Ev,
  (VTBL_ENTRY)&_ZN6S593C53v19Ev,
  (VTBL_ENTRY)&_ZN6S593C53v20Ev,
  (VTBL_ENTRY)&_ZN6S593C53v21Ev,
  (VTBL_ENTRY)&_ZN6S593C53v22Ev,
  (VTBL_ENTRY)&_ZN6S593C53v23Ev,
  (VTBL_ENTRY)&_ZN6S593C53v24Ev,
  (VTBL_ENTRY)&_ZN6S593C53v25Ev,
  (VTBL_ENTRY)&_ZN6S593C53v26Ev,
  (VTBL_ENTRY)&_ZN6S593C53v27Ev,
  (VTBL_ENTRY)&_ZN6S593C53v28Ev,
  (VTBL_ENTRY)&_ZN6S593C53v29Ev,
  (VTBL_ENTRY)&_ZN6S593C53v30Ev,
  (VTBL_ENTRY)&_ZN6S593C53v31Ev,
  (VTBL_ENTRY)&_ZN6S593C53v32Ev,
  (VTBL_ENTRY)&_ZN6S593C53v33Ev,
  (VTBL_ENTRY)&_ZN6S593C53v34Ev,
  (VTBL_ENTRY)&_ZN6S593C53v35Ev,
  (VTBL_ENTRY)&_ZN6S593C53v36Ev,
  (VTBL_ENTRY)&_ZN6S593C53v37Ev,
  (VTBL_ENTRY)&_ZN6S593C53v38Ev,
  (VTBL_ENTRY)&_ZN6S593C53v39Ev,
  (VTBL_ENTRY)&_ZN6S593C53v40Ev,
  (VTBL_ENTRY)&_ZN6S593C53v41Ev,
  (VTBL_ENTRY)&_ZN6S593C53v42Ev,
  (VTBL_ENTRY)&_ZN6S593C53v43Ev,
  (VTBL_ENTRY)&_ZN6S593C53v44Ev,
  (VTBL_ENTRY)&_ZN6S593C53v45Ev,
  (VTBL_ENTRY)&_ZN6S593C53v46Ev,
  (VTBL_ENTRY)&_ZN6S593C53v47Ev,
  (VTBL_ENTRY)&_ZN6S593C53v48Ev,
  (VTBL_ENTRY)&_ZN6S593C53v49Ev,
  (VTBL_ENTRY)&_ZN6S593C53v50Ev,
  (VTBL_ENTRY)&_ZN6S593C53v51Ev,
  (VTBL_ENTRY)&_ZN6S593C53v52Ev,
  (VTBL_ENTRY)&_ZN6S593C53v53Ev,
  (VTBL_ENTRY)&_ZN6S593C53v54Ev,
  (VTBL_ENTRY)&_ZN6S593C53v55Ev,
  (VTBL_ENTRY)&_ZN6S593C53v56Ev,
  (VTBL_ENTRY)&_ZN6S593C53v57Ev,
  (VTBL_ENTRY)&_ZN6S593C53v58Ev,
  (VTBL_ENTRY)&_ZN6S593C53v59Ev,
  (VTBL_ENTRY)&_ZN6S593C53v60Ev,
  (VTBL_ENTRY)&_ZN6S593C53v61Ev,
  (VTBL_ENTRY)&_ZN6S593C53v62Ev,
  (VTBL_ENTRY)&_ZN6S593C53v63Ev,
  (VTBL_ENTRY)&_ZN6S593C53v64Ev,
  (VTBL_ENTRY)&_ZN6S593C53v65Ev,
  (VTBL_ENTRY)&_ZN6S593C53v66Ev,
  (VTBL_ENTRY)&_ZN6S593C53v67Ev,
  (VTBL_ENTRY)&_ZN6S593C43v68Ev,
  (VTBL_ENTRY)&_ZN6S593C43v69Ev,
  (VTBL_ENTRY)&_ZN6S593C43v70Ev,
  (VTBL_ENTRY)&_ZN6S593C43v71Ev,
  (VTBL_ENTRY)&_ZN6S593C43v72Ev,
  (VTBL_ENTRY)&_ZN6S593C43v73Ev,
  (VTBL_ENTRY)&_ZN6S593C43v74Ev,
  (VTBL_ENTRY)&_ZN6S593C43v75Ev,
  (VTBL_ENTRY)&_ZN6S593C43v76Ev,
  (VTBL_ENTRY)&_ZN6S593C43v77Ev,
  (VTBL_ENTRY)&_ZN6S593C43v78Ev,
  (VTBL_ENTRY)&_ZN6S593C43v79Ev,
  (VTBL_ENTRY)&_ZN6S593C43v80Ev,
  (VTBL_ENTRY)&_ZN6S593C43v81Ev,
  (VTBL_ENTRY)&_ZN6S593C43v82Ev,
  (VTBL_ENTRY)&_ZN6S593C43v83Ev,
  (VTBL_ENTRY)&_ZN6S593C43v84Ev,
  (VTBL_ENTRY)&_ZN6S593C43v85Ev,
  (VTBL_ENTRY)&_ZN6S593C43v86Ev,
  (VTBL_ENTRY)&_ZN6S593C43v87Ev,
  (VTBL_ENTRY)&_ZN6S593C43v88Ev,
  (VTBL_ENTRY)&_ZN6S593C43v89Ev,
  (VTBL_ENTRY)&_ZN6S593C33v90Ev,
  (VTBL_ENTRY)&_ZN6S593C33v91Ev,
  (VTBL_ENTRY)&_ZN6S593C33v92Ev,
  (VTBL_ENTRY)&_ZN6S593C33v93Ev,
  (VTBL_ENTRY)&_ZN6S593C33v94Ev,
  (VTBL_ENTRY)&_ZN6S593C33v95Ev,
  (VTBL_ENTRY)&_ZN6S593C33v96Ev,
  (VTBL_ENTRY)&_ZN6S593C33v97Ev,
  (VTBL_ENTRY)&_ZN6S593C33v98Ev,
  (VTBL_ENTRY)&_ZN6S593C33v99Ev,
  (VTBL_ENTRY)&_ZN6S593C34v100Ev,
  (VTBL_ENTRY)&_ZN6S593C34v101Ev,
  (VTBL_ENTRY)&_ZN6S593C34v102Ev,
  (VTBL_ENTRY)&_ZN6S593C34v103Ev,
  (VTBL_ENTRY)&_ZN6S593C34v104Ev,
  (VTBL_ENTRY)&_ZN6S593C34v105Ev,
  (VTBL_ENTRY)&_ZN6S593C34v106Ev,
  (VTBL_ENTRY)&_ZN6S593C34v107Ev,
  (VTBL_ENTRY)&_ZN6S593C34v108Ev,
  (VTBL_ENTRY)&_ZN6S593C34v109Ev,
  (VTBL_ENTRY)&_ZN6S593C24v110Ev,
  (VTBL_ENTRY)&_ZN6S593C24v111Ev,
};
extern VTBL_ENTRY _ZTI6S593C2[];
extern  VTBL_ENTRY _ZTV6S593C2[];
Class_Descriptor cd_S593C2 = {  "S593C2", // class name
  bases_S593C2, 3,
  &(vtc_S593C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S593C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S593C2),112, //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  S593C1  : S593C2 {
  int s593c1f0[2];
  virtual  ~S593C1(); // _ZN6S593C1D1Ev
  virtual void  v1(); // _ZN6S593C12v1Ev
  virtual void  v2(); // _ZN6S593C12v2Ev
  virtual void  v3(); // _ZN6S593C12v3Ev
  S593C1(); // tgen
};
//SIG(1 S593C1) 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]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v110 v111} vd v1 v2 v3 Fi[2]}


 S593C1 ::~S593C1(){ note_dtor("S593C1", this);}
void  S593C1 ::v1(){vfunc_called(this, "_ZN6S593C12v1Ev");}
void  S593C1 ::v2(){vfunc_called(this, "_ZN6S593C12v2Ev");}
void  S593C1 ::v3(){vfunc_called(this, "_ZN6S593C12v3Ev");}
S593C1 ::S593C1(){ note_ctor("S593C1", this);} // tgen

static void Test_S593C1()
{
  extern Class_Descriptor cd_S593C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,52)];
    init_test(&cd_S593C1, buf);
    S593C1 *dp, &lv = *(dp=new (buf) S593C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,204), "sizeof(S593C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S593C1)");
    check_base_class_offset(lv, (S593C5*)(S593C4*)(S593C3*)(S593C2*), 0, "S593C1");
    check_base_class_offset(lv, (S593C4*)(S593C3*)(S593C2*), 0, "S593C1");
    check_base_class_offset(lv, (S593C3*)(S593C2*), 0, "S593C1");
    check_base_class_offset(lv, (S593C2*), 0, "S593C1");
    check_field_offset(lv, s593c1f0, ABISELECT(268,196), "S593C1.s593c1f0");
    test_class_info(&lv, &cd_S593C1);
    dp->~S593C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS593C1(Test_S593C1, "S593C1", ABISELECT(280,204));

#else // __cplusplus

extern void _ZN6S593C1C1Ev();
extern void _ZN6S593C1D1Ev();
Name_Map name_map_S593C1[] = {
  NSPAIR(_ZN6S593C1C1Ev),
  NSPAIR(_ZN6S593C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S593C5;
extern VTBL_ENTRY _ZTI6S593C5[];
extern  VTBL_ENTRY _ZTV6S593C5[];
extern Class_Descriptor cd_S593C4;
extern VTBL_ENTRY _ZTI6S593C4[];
extern  VTBL_ENTRY _ZTV6S593C4[];
extern Class_Descriptor cd_S593C3;
extern VTBL_ENTRY _ZTI6S593C3[];
extern  VTBL_ENTRY _ZTV6S593C3[];
extern Class_Descriptor cd_S593C2;
extern VTBL_ENTRY _ZTI6S593C2[];
extern  VTBL_ENTRY _ZTV6S593C2[];
static Base_Class bases_S593C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S593C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S593C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S593C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S593C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S593C1[];
extern void _ZN6S593C1D1Ev();
extern void _ZN6S593C1D0Ev();
extern void _ZN6S593C52v4Ev();
extern void _ZN6S593C52v5Ev();
extern void _ZN6S593C52v6Ev();
extern void _ZN6S593C52v7Ev();
extern void _ZN6S593C52v8Ev();
extern void _ZN6S593C52v9Ev();
extern void _ZN6S593C53v10Ev();
extern void _ZN6S593C53v11Ev();
extern void _ZN6S593C53v12Ev();
extern void _ZN6S593C53v13Ev();
extern void _ZN6S593C53v14Ev();
extern void _ZN6S593C53v15Ev();
extern void _ZN6S593C53v16Ev();
extern void _ZN6S593C53v17Ev();
extern void _ZN6S593C53v18Ev();
extern void _ZN6S593C53v19Ev();
extern void _ZN6S593C53v20Ev();
extern void _ZN6S593C53v21Ev();
extern void _ZN6S593C53v22Ev();
extern void _ZN6S593C53v23Ev();
extern void _ZN6S593C53v24Ev();
extern void _ZN6S593C53v25Ev();
extern void _ZN6S593C53v26Ev();
extern void _ZN6S593C53v27Ev();
extern void _ZN6S593C53v28Ev();
extern void _ZN6S593C53v29Ev();
extern void _ZN6S593C53v30Ev();
extern void _ZN6S593C53v31Ev();
extern void _ZN6S593C53v32Ev();
extern void _ZN6S593C53v33Ev();
extern void _ZN6S593C53v34Ev();
extern void _ZN6S593C53v35Ev();
extern void _ZN6S593C53v36Ev();
extern void _ZN6S593C53v37Ev();
extern void _ZN6S593C53v38Ev();
extern void _ZN6S593C53v39Ev();
extern void _ZN6S593C53v40Ev();
extern void _ZN6S593C53v41Ev();
extern void _ZN6S593C53v42Ev();
extern void _ZN6S593C53v43Ev();
extern void _ZN6S593C53v44Ev();
extern void _ZN6S593C53v45Ev();
extern void _ZN6S593C53v46Ev();
extern void _ZN6S593C53v47Ev();
extern void _ZN6S593C53v48Ev();
extern void _ZN6S593C53v49Ev();
extern void _ZN6S593C53v50Ev();
extern void _ZN6S593C53v51Ev();
extern void _ZN6S593C53v52Ev();
extern void _ZN6S593C53v53Ev();
extern void _ZN6S593C53v54Ev();
extern void _ZN6S593C53v55Ev();
extern void _ZN6S593C53v56Ev();
extern void _ZN6S593C53v57Ev();
extern void _ZN6S593C53v58Ev();
extern void _ZN6S593C53v59Ev();
extern void _ZN6S593C53v60Ev();
extern void _ZN6S593C53v61Ev();
extern void _ZN6S593C53v62Ev();
extern void _ZN6S593C53v63Ev();
extern void _ZN6S593C53v64Ev();
extern void _ZN6S593C53v65Ev();
extern void _ZN6S593C53v66Ev();
extern void _ZN6S593C53v67Ev();
extern void _ZN6S593C43v68Ev();
extern void _ZN6S593C43v69Ev();
extern void _ZN6S593C43v70Ev();
extern void _ZN6S593C43v71Ev();
extern void _ZN6S593C43v72Ev();
extern void _ZN6S593C43v73Ev();
extern void _ZN6S593C43v74Ev();
extern void _ZN6S593C43v75Ev();
extern void _ZN6S593C43v76Ev();
extern void _ZN6S593C43v77Ev();
extern void _ZN6S593C43v78Ev();
extern void _ZN6S593C43v79Ev();
extern void _ZN6S593C43v80Ev();
extern void _ZN6S593C43v81Ev();
extern void _ZN6S593C43v82Ev();
extern void _ZN6S593C43v83Ev();
extern void _ZN6S593C43v84Ev();
extern void _ZN6S593C43v85Ev();
extern void _ZN6S593C43v86Ev();
extern void _ZN6S593C43v87Ev();
extern void _ZN6S593C43v88Ev();
extern void _ZN6S593C43v89Ev();
extern void _ZN6S593C33v90Ev();
extern void _ZN6S593C33v91Ev();
extern void _ZN6S593C33v92Ev();
extern void _ZN6S593C33v93Ev();
extern void _ZN6S593C33v94Ev();
extern void _ZN6S593C33v95Ev();
extern void _ZN6S593C33v96Ev();
extern void _ZN6S593C33v97Ev();
extern void _ZN6S593C33v98Ev();
extern void _ZN6S593C33v99Ev();
extern void _ZN6S593C34v100Ev();
extern void _ZN6S593C34v101Ev();
extern void _ZN6S593C34v102Ev();
extern void _ZN6S593C34v103Ev();
extern void _ZN6S593C34v104Ev();
extern void _ZN6S593C34v105Ev();
extern void _ZN6S593C34v106Ev();
extern void _ZN6S593C34v107Ev();
extern void _ZN6S593C34v108Ev();
extern void _ZN6S593C34v109Ev();
extern void _ZN6S593C24v110Ev();
extern void _ZN6S593C24v111Ev();
extern void _ZN6S593C12v1Ev();
extern void _ZN6S593C12v2Ev();
extern void _ZN6S593C12v3Ev();
static  VTBL_ENTRY vtc_S593C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S593C1[0]),
  (VTBL_ENTRY)&_ZN6S593C1D1Ev,
  (VTBL_ENTRY)&_ZN6S593C1D0Ev,
  (VTBL_ENTRY)&_ZN6S593C52v4Ev,
  (VTBL_ENTRY)&_ZN6S593C52v5Ev,
  (VTBL_ENTRY)&_ZN6S593C52v6Ev,
  (VTBL_ENTRY)&_ZN6S593C52v7Ev,
  (VTBL_ENTRY)&_ZN6S593C52v8Ev,
  (VTBL_ENTRY)&_ZN6S593C52v9Ev,
  (VTBL_ENTRY)&_ZN6S593C53v10Ev,
  (VTBL_ENTRY)&_ZN6S593C53v11Ev,
  (VTBL_ENTRY)&_ZN6S593C53v12Ev,
  (VTBL_ENTRY)&_ZN6S593C53v13Ev,
  (VTBL_ENTRY)&_ZN6S593C53v14Ev,
  (VTBL_ENTRY)&_ZN6S593C53v15Ev,
  (VTBL_ENTRY)&_ZN6S593C53v16Ev,
  (VTBL_ENTRY)&_ZN6S593C53v17Ev,
  (VTBL_ENTRY)&_ZN6S593C53v18Ev,
  (VTBL_ENTRY)&_ZN6S593C53v19Ev,
  (VTBL_ENTRY)&_ZN6S593C53v20Ev,
  (VTBL_ENTRY)&_ZN6S593C53v21Ev,
  (VTBL_ENTRY)&_ZN6S593C53v22Ev,
  (VTBL_ENTRY)&_ZN6S593C53v23Ev,
  (VTBL_ENTRY)&_ZN6S593C53v24Ev,
  (VTBL_ENTRY)&_ZN6S593C53v25Ev,
  (VTBL_ENTRY)&_ZN6S593C53v26Ev,
  (VTBL_ENTRY)&_ZN6S593C53v27Ev,
  (VTBL_ENTRY)&_ZN6S593C53v28Ev,
  (VTBL_ENTRY)&_ZN6S593C53v29Ev,
  (VTBL_ENTRY)&_ZN6S593C53v30Ev,
  (VTBL_ENTRY)&_ZN6S593C53v31Ev,
  (VTBL_ENTRY)&_ZN6S593C53v32Ev,
  (VTBL_ENTRY)&_ZN6S593C53v33Ev,
  (VTBL_ENTRY)&_ZN6S593C53v34Ev,
  (VTBL_ENTRY)&_ZN6S593C53v35Ev,
  (VTBL_ENTRY)&_ZN6S593C53v36Ev,
  (VTBL_ENTRY)&_ZN6S593C53v37Ev,
  (VTBL_ENTRY)&_ZN6S593C53v38Ev,
  (VTBL_ENTRY)&_ZN6S593C53v39Ev,
  (VTBL_ENTRY)&_ZN6S593C53v40Ev,
  (VTBL_ENTRY)&_ZN6S593C53v41Ev,
  (VTBL_ENTRY)&_ZN6S593C53v42Ev,
  (VTBL_ENTRY)&_ZN6S593C53v43Ev,
  (VTBL_ENTRY)&_ZN6S593C53v44Ev,
  (VTBL_ENTRY)&_ZN6S593C53v45Ev,
  (VTBL_ENTRY)&_ZN6S593C53v46Ev,
  (VTBL_ENTRY)&_ZN6S593C53v47Ev,
  (VTBL_ENTRY)&_ZN6S593C53v48Ev,
  (VTBL_ENTRY)&_ZN6S593C53v49Ev,
  (VTBL_ENTRY)&_ZN6S593C53v50Ev,
  (VTBL_ENTRY)&_ZN6S593C53v51Ev,
  (VTBL_ENTRY)&_ZN6S593C53v52Ev,
  (VTBL_ENTRY)&_ZN6S593C53v53Ev,
  (VTBL_ENTRY)&_ZN6S593C53v54Ev,
  (VTBL_ENTRY)&_ZN6S593C53v55Ev,
  (VTBL_ENTRY)&_ZN6S593C53v56Ev,
  (VTBL_ENTRY)&_ZN6S593C53v57Ev,
  (VTBL_ENTRY)&_ZN6S593C53v58Ev,
  (VTBL_ENTRY)&_ZN6S593C53v59Ev,
  (VTBL_ENTRY)&_ZN6S593C53v60Ev,
  (VTBL_ENTRY)&_ZN6S593C53v61Ev,
  (VTBL_ENTRY)&_ZN6S593C53v62Ev,
  (VTBL_ENTRY)&_ZN6S593C53v63Ev,
  (VTBL_ENTRY)&_ZN6S593C53v64Ev,
  (VTBL_ENTRY)&_ZN6S593C53v65Ev,
  (VTBL_ENTRY)&_ZN6S593C53v66Ev,
  (VTBL_ENTRY)&_ZN6S593C53v67Ev,
  (VTBL_ENTRY)&_ZN6S593C43v68Ev,
  (VTBL_ENTRY)&_ZN6S593C43v69Ev,
  (VTBL_ENTRY)&_ZN6S593C43v70Ev,
  (VTBL_ENTRY)&_ZN6S593C43v71Ev,
  (VTBL_ENTRY)&_ZN6S593C43v72Ev,
  (VTBL_ENTRY)&_ZN6S593C43v73Ev,
  (VTBL_ENTRY)&_ZN6S593C43v74Ev,
  (VTBL_ENTRY)&_ZN6S593C43v75Ev,
  (VTBL_ENTRY)&_ZN6S593C43v76Ev,
  (VTBL_ENTRY)&_ZN6S593C43v77Ev,
  (VTBL_ENTRY)&_ZN6S593C43v78Ev,
  (VTBL_ENTRY)&_ZN6S593C43v79Ev,
  (VTBL_ENTRY)&_ZN6S593C43v80Ev,
  (VTBL_ENTRY)&_ZN6S593C43v81Ev,
  (VTBL_ENTRY)&_ZN6S593C43v82Ev,
  (VTBL_ENTRY)&_ZN6S593C43v83Ev,
  (VTBL_ENTRY)&_ZN6S593C43v84Ev,
  (VTBL_ENTRY)&_ZN6S593C43v85Ev,
  (VTBL_ENTRY)&_ZN6S593C43v86Ev,
  (VTBL_ENTRY)&_ZN6S593C43v87Ev,
  (VTBL_ENTRY)&_ZN6S593C43v88Ev,
  (VTBL_ENTRY)&_ZN6S593C43v89Ev,
  (VTBL_ENTRY)&_ZN6S593C33v90Ev,
  (VTBL_ENTRY)&_ZN6S593C33v91Ev,
  (VTBL_ENTRY)&_ZN6S593C33v92Ev,
  (VTBL_ENTRY)&_ZN6S593C33v93Ev,
  (VTBL_ENTRY)&_ZN6S593C33v94Ev,
  (VTBL_ENTRY)&_ZN6S593C33v95Ev,
  (VTBL_ENTRY)&_ZN6S593C33v96Ev,
  (VTBL_ENTRY)&_ZN6S593C33v97Ev,
  (VTBL_ENTRY)&_ZN6S593C33v98Ev,
  (VTBL_ENTRY)&_ZN6S593C33v99Ev,
  (VTBL_ENTRY)&_ZN6S593C34v100Ev,
  (VTBL_ENTRY)&_ZN6S593C34v101Ev,
  (VTBL_ENTRY)&_ZN6S593C34v102Ev,
  (VTBL_ENTRY)&_ZN6S593C34v103Ev,
  (VTBL_ENTRY)&_ZN6S593C34v104Ev,
  (VTBL_ENTRY)&_ZN6S593C34v105Ev,
  (VTBL_ENTRY)&_ZN6S593C34v106Ev,
  (VTBL_ENTRY)&_ZN6S593C34v107Ev,
  (VTBL_ENTRY)&_ZN6S593C34v108Ev,
  (VTBL_ENTRY)&_ZN6S593C34v109Ev,
  (VTBL_ENTRY)&_ZN6S593C24v110Ev,
  (VTBL_ENTRY)&_ZN6S593C24v111Ev,
  (VTBL_ENTRY)&_ZN6S593C12v1Ev,
  (VTBL_ENTRY)&_ZN6S593C12v2Ev,
  (VTBL_ENTRY)&_ZN6S593C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S593C1[];
extern  VTBL_ENTRY _ZTV6S593C1[];
Class_Descriptor cd_S593C1 = {  "S593C1", // class name
  bases_S593C1, 4,
  &(vtc_S593C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,204), // object size
  NSPAIRA(_ZTI6S593C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S593C1),115, //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  S595C5  {
  int s595c5f0;
  __tsi64 s595c5f1;
  void *s595c5f2[4];
  int s595c5f3[2];
  void *s595c5f4;
  ::S3221C4_nt s595c5f5;
  void *s595c5f6[2];
  virtual  ~S595C5(); // _ZN6S595C5D1Ev
  virtual void  v4(); // _ZN6S595C52v4Ev
  virtual void  v5(); // _ZN6S595C52v5Ev
  virtual void  v6(); // _ZN6S595C52v6Ev
  virtual void  v7(); // _ZN6S595C52v7Ev
  virtual void  v8(); // _ZN6S595C52v8Ev
  virtual void  v9(); // _ZN6S595C52v9Ev
  virtual void  v10(); // _ZN6S595C53v10Ev
  virtual void  v11(); // _ZN6S595C53v11Ev
  virtual void  v12(); // _ZN6S595C53v12Ev
  virtual void  v13(); // _ZN6S595C53v13Ev
  virtual void  v14(); // _ZN6S595C53v14Ev
  virtual void  v15(); // _ZN6S595C53v15Ev
  virtual void  v16(); // _ZN6S595C53v16Ev
  virtual void  v17(); // _ZN6S595C53v17Ev
  virtual void  v18(); // _ZN6S595C53v18Ev
  virtual void  v19(); // _ZN6S595C53v19Ev
  virtual void  v20(); // _ZN6S595C53v20Ev
  virtual void  v21(); // _ZN6S595C53v21Ev
  virtual void  v22(); // _ZN6S595C53v22Ev
  virtual void  v23(); // _ZN6S595C53v23Ev
  virtual void  v24(); // _ZN6S595C53v24Ev
  virtual void  v25(); // _ZN6S595C53v25Ev
  virtual void  v26(); // _ZN6S595C53v26Ev
  virtual void  v27(); // _ZN6S595C53v27Ev
  virtual void  v28(); // _ZN6S595C53v28Ev
  virtual void  v29(); // _ZN6S595C53v29Ev
  virtual void  v30(); // _ZN6S595C53v30Ev
  virtual void  v31(); // _ZN6S595C53v31Ev
  virtual void  v32(); // _ZN6S595C53v32Ev
  virtual void  v33(); // _ZN6S595C53v33Ev
  virtual void  v34(); // _ZN6S595C53v34Ev
  virtual void  v35(); // _ZN6S595C53v35Ev
  virtual void  v36(); // _ZN6S595C53v36Ev
  virtual void  v37(); // _ZN6S595C53v37Ev
  virtual void  v38(); // _ZN6S595C53v38Ev
  virtual void  v39(); // _ZN6S595C53v39Ev
  virtual void  v40(); // _ZN6S595C53v40Ev
  virtual void  v41(); // _ZN6S595C53v41Ev
  virtual void  v42(); // _ZN6S595C53v42Ev
  virtual void  v43(); // _ZN6S595C53v43Ev
  virtual void  v44(); // _ZN6S595C53v44Ev
  virtual void  v45(); // _ZN6S595C53v45Ev
  virtual void  v46(); // _ZN6S595C53v46Ev
  virtual void  v47(); // _ZN6S595C53v47Ev
  virtual void  v48(); // _ZN6S595C53v48Ev
  virtual void  v49(); // _ZN6S595C53v49Ev
  virtual void  v50(); // _ZN6S595C53v50Ev
  virtual void  v51(); // _ZN6S595C53v51Ev
  virtual void  v52(); // _ZN6S595C53v52Ev
  virtual void  v53(); // _ZN6S595C53v53Ev
  virtual void  v54(); // _ZN6S595C53v54Ev
  virtual void  v55(); // _ZN6S595C53v55Ev
  virtual void  v56(); // _ZN6S595C53v56Ev
  virtual void  v57(); // _ZN6S595C53v57Ev
  virtual void  v58(); // _ZN6S595C53v58Ev
  virtual void  v59(); // _ZN6S595C53v59Ev
  virtual void  v60(); // _ZN6S595C53v60Ev
  virtual void  v61(); // _ZN6S595C53v61Ev
  virtual void  v62(); // _ZN6S595C53v62Ev
  virtual void  v63(); // _ZN6S595C53v63Ev
  virtual void  v64(); // _ZN6S595C53v64Ev
  virtual void  v65(); // _ZN6S595C53v65Ev
  virtual void  v66(); // _ZN6S595C53v66Ev
  virtual void  v67(); // _ZN6S595C53v67Ev
  S595C5(); // tgen
};
//SIG(-1 S595C5) 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]}


 S595C5 ::~S595C5(){ note_dtor("S595C5", this);}
void  S595C5 ::v4(){vfunc_called(this, "_ZN6S595C52v4Ev");}
void  S595C5 ::v5(){vfunc_called(this, "_ZN6S595C52v5Ev");}
void  S595C5 ::v6(){vfunc_called(this, "_ZN6S595C52v6Ev");}
void  S595C5 ::v7(){vfunc_called(this, "_ZN6S595C52v7Ev");}
void  S595C5 ::v8(){vfunc_called(this, "_ZN6S595C52v8Ev");}
void  S595C5 ::v9(){vfunc_called(this, "_ZN6S595C52v9Ev");}
void  S595C5 ::v10(){vfunc_called(this, "_ZN6S595C53v10Ev");}
void  S595C5 ::v11(){vfunc_called(this, "_ZN6S595C53v11Ev");}
void  S595C5 ::v12(){vfunc_called(this, "_ZN6S595C53v12Ev");}
void  S595C5 ::v13(){vfunc_called(this, "_ZN6S595C53v13Ev");}
void  S595C5 ::v14(){vfunc_called(this, "_ZN6S595C53v14Ev");}
void  S595C5 ::v15(){vfunc_called(this, "_ZN6S595C53v15Ev");}
void  S595C5 ::v16(){vfunc_called(this, "_ZN6S595C53v16Ev");}
void  S595C5 ::v17(){vfunc_called(this, "_ZN6S595C53v17Ev");}
void  S595C5 ::v18(){vfunc_called(this, "_ZN6S595C53v18Ev");}
void  S595C5 ::v19(){vfunc_called(this, "_ZN6S595C53v19Ev");}
void  S595C5 ::v20(){vfunc_called(this, "_ZN6S595C53v20Ev");}
void  S595C5 ::v21(){vfunc_called(this, "_ZN6S595C53v21Ev");}
void  S595C5 ::v22(){vfunc_called(this, "_ZN6S595C53v22Ev");}
void  S595C5 ::v23(){vfunc_called(this, "_ZN6S595C53v23Ev");}
void  S595C5 ::v24(){vfunc_called(this, "_ZN6S595C53v24Ev");}
void  S595C5 ::v25(){vfunc_called(this, "_ZN6S595C53v25Ev");}
void  S595C5 ::v26(){vfunc_called(this, "_ZN6S595C53v26Ev");}
void  S595C5 ::v27(){vfunc_called(this, "_ZN6S595C53v27Ev");}
void  S595C5 ::v28(){vfunc_called(this, "_ZN6S595C53v28Ev");}
void  S595C5 ::v29(){vfunc_called(this, "_ZN6S595C53v29Ev");}
void  S595C5 ::v30(){vfunc_called(this, "_ZN6S595C53v30Ev");}
void  S595C5 ::v31(){vfunc_called(this, "_ZN6S595C53v31Ev");}
void  S595C5 ::v32(){vfunc_called(this, "_ZN6S595C53v32Ev");}
void  S595C5 ::v33(){vfunc_called(this, "_ZN6S595C53v33Ev");}
void  S595C5 ::v34(){vfunc_called(this, "_ZN6S595C53v34Ev");}
void  S595C5 ::v35(){vfunc_called(this, "_ZN6S595C53v35Ev");}
void  S595C5 ::v36(){vfunc_called(this, "_ZN6S595C53v36Ev");}
void  S595C5 ::v37(){vfunc_called(this, "_ZN6S595C53v37Ev");}
void  S595C5 ::v38(){vfunc_called(this, "_ZN6S595C53v38Ev");}
void  S595C5 ::v39(){vfunc_called(this, "_ZN6S595C53v39Ev");}
void  S595C5 ::v40(){vfunc_called(this, "_ZN6S595C53v40Ev");}
void  S595C5 ::v41(){vfunc_called(this, "_ZN6S595C53v41Ev");}
void  S595C5 ::v42(){vfunc_called(this, "_ZN6S595C53v42Ev");}
void  S595C5 ::v43(){vfunc_called(this, "_ZN6S595C53v43Ev");}
void  S595C5 ::v44(){vfunc_called(this, "_ZN6S595C53v44Ev");}
void  S595C5 ::v45(){vfunc_called(this, "_ZN6S595C53v45Ev");}
void  S595C5 ::v46(){vfunc_called(this, "_ZN6S595C53v46Ev");}
void  S595C5 ::v47(){vfunc_called(this, "_ZN6S595C53v47Ev");}
void  S595C5 ::v48(){vfunc_called(this, "_ZN6S595C53v48Ev");}
void  S595C5 ::v49(){vfunc_called(this, "_ZN6S595C53v49Ev");}
void  S595C5 ::v50(){vfunc_called(this, "_ZN6S595C53v50Ev");}
void  S595C5 ::v51(){vfunc_called(this, "_ZN6S595C53v51Ev");}
void  S595C5 ::v52(){vfunc_called(this, "_ZN6S595C53v52Ev");}
void  S595C5 ::v53(){vfunc_called(this, "_ZN6S595C53v53Ev");}
void  S595C5 ::v54(){vfunc_called(this, "_ZN6S595C53v54Ev");}
void  S595C5 ::v55(){vfunc_called(this, "_ZN6S595C53v55Ev");}
void  S595C5 ::v56(){vfunc_called(this, "_ZN6S595C53v56Ev");}
void  S595C5 ::v57(){vfunc_called(this, "_ZN6S595C53v57Ev");}
void  S595C5 ::v58(){vfunc_called(this, "_ZN6S595C53v58Ev");}
void  S595C5 ::v59(){vfunc_called(this, "_ZN6S595C53v59Ev");}
void  S595C5 ::v60(){vfunc_called(this, "_ZN6S595C53v60Ev");}
void  S595C5 ::v61(){vfunc_called(this, "_ZN6S595C53v61Ev");}
void  S595C5 ::v62(){vfunc_called(this, "_ZN6S595C53v62Ev");}
void  S595C5 ::v63(){vfunc_called(this, "_ZN6S595C53v63Ev");}
void  S595C5 ::v64(){vfunc_called(this, "_ZN6S595C53v64Ev");}
void  S595C5 ::v65(){vfunc_called(this, "_ZN6S595C53v65Ev");}
void  S595C5 ::v66(){vfunc_called(this, "_ZN6S595C53v66Ev");}
void  S595C5 ::v67(){vfunc_called(this, "_ZN6S595C53v67Ev");}
S595C5 ::S595C5(){ note_ctor("S595C5", this);} // tgen

static void Test_S595C5()
{
  extern Class_Descriptor cd_S595C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S595C5, buf);
    S595C5 *dp, &lv = *(dp=new (buf) S595C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S595C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S595C5)");
    check_field_offset(lv, s595c5f0, ABISELECT(8,4), "S595C5.s595c5f0");
    check_field_offset(lv, s595c5f1, ABISELECT(16,8), "S595C5.s595c5f1");
    check_field_offset(lv, s595c5f2, ABISELECT(24,16), "S595C5.s595c5f2");
    check_field_offset(lv, s595c5f3, ABISELECT(56,32), "S595C5.s595c5f3");
    check_field_offset(lv, s595c5f4, ABISELECT(64,40), "S595C5.s595c5f4");
    check_field_offset(lv, s595c5f5, ABISELECT(72,44), "S595C5.s595c5f5");
    check_field_offset(lv, s595c5f6, ABISELECT(80,52), "S595C5.s595c5f6");
    test_class_info(&lv, &cd_S595C5);
    dp->~S595C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS595C5(Test_S595C5, "S595C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S595C5C1Ev();
extern void _ZN6S595C5D1Ev();
Name_Map name_map_S595C5[] = {
  NSPAIR(_ZN6S595C5C1Ev),
  NSPAIR(_ZN6S595C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S595C5[];
extern void _ZN6S595C5D1Ev();
extern void _ZN6S595C5D0Ev();
extern void _ZN6S595C52v4Ev();
extern void _ZN6S595C52v5Ev();
extern void _ZN6S595C52v6Ev();
extern void _ZN6S595C52v7Ev();
extern void _ZN6S595C52v8Ev();
extern void _ZN6S595C52v9Ev();
extern void _ZN6S595C53v10Ev();
extern void _ZN6S595C53v11Ev();
extern void _ZN6S595C53v12Ev();
extern void _ZN6S595C53v13Ev();
extern void _ZN6S595C53v14Ev();
extern void _ZN6S595C53v15Ev();
extern void _ZN6S595C53v16Ev();
extern void _ZN6S595C53v17Ev();
extern void _ZN6S595C53v18Ev();
extern void _ZN6S595C53v19Ev();
extern void _ZN6S595C53v20Ev();
extern void _ZN6S595C53v21Ev();
extern void _ZN6S595C53v22Ev();
extern void _ZN6S595C53v23Ev();
extern void _ZN6S595C53v24Ev();
extern void _ZN6S595C53v25Ev();
extern void _ZN6S595C53v26Ev();
extern void _ZN6S595C53v27Ev();
extern void _ZN6S595C53v28Ev();
extern void _ZN6S595C53v29Ev();
extern void _ZN6S595C53v30Ev();
extern void _ZN6S595C53v31Ev();
extern void _ZN6S595C53v32Ev();
extern void _ZN6S595C53v33Ev();
extern void _ZN6S595C53v34Ev();
extern void _ZN6S595C53v35Ev();
extern void _ZN6S595C53v36Ev();
extern void _ZN6S595C53v37Ev();
extern void _ZN6S595C53v38Ev();
extern void _ZN6S595C53v39Ev();
extern void _ZN6S595C53v40Ev();
extern void _ZN6S595C53v41Ev();
extern void _ZN6S595C53v42Ev();
extern void _ZN6S595C53v43Ev();
extern void _ZN6S595C53v44Ev();
extern void _ZN6S595C53v45Ev();
extern void _ZN6S595C53v46Ev();
extern void _ZN6S595C53v47Ev();
extern void _ZN6S595C53v48Ev();
extern void _ZN6S595C53v49Ev();
extern void _ZN6S595C53v50Ev();
extern void _ZN6S595C53v51Ev();
extern void _ZN6S595C53v52Ev();
extern void _ZN6S595C53v53Ev();
extern void _ZN6S595C53v54Ev();
extern void _ZN6S595C53v55Ev();
extern void _ZN6S595C53v56Ev();
extern void _ZN6S595C53v57Ev();
extern void _ZN6S595C53v58Ev();
extern void _ZN6S595C53v59Ev();
extern void _ZN6S595C53v60Ev();
extern void _ZN6S595C53v61Ev();
extern void _ZN6S595C53v62Ev();
extern void _ZN6S595C53v63Ev();
extern void _ZN6S595C53v64Ev();
extern void _ZN6S595C53v65Ev();
extern void _ZN6S595C53v66Ev();
extern void _ZN6S595C53v67Ev();
static  VTBL_ENTRY vtc_S595C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S595C5[0]),
  (VTBL_ENTRY)&_ZN6S595C5D1Ev,
  (VTBL_ENTRY)&_ZN6S595C5D0Ev,
  (VTBL_ENTRY)&_ZN6S595C52v4Ev,
  (VTBL_ENTRY)&_ZN6S595C52v5Ev,
  (VTBL_ENTRY)&_ZN6S595C52v6Ev,
  (VTBL_ENTRY)&_ZN6S595C52v7Ev,
  (VTBL_ENTRY)&_ZN6S595C52v8Ev,
  (VTBL_ENTRY)&_ZN6S595C52v9Ev,
  (VTBL_ENTRY)&_ZN6S595C53v10Ev,
  (VTBL_ENTRY)&_ZN6S595C53v11Ev,
  (VTBL_ENTRY)&_ZN6S595C53v12Ev,
  (VTBL_ENTRY)&_ZN6S595C53v13Ev,
  (VTBL_ENTRY)&_ZN6S595C53v14Ev,
  (VTBL_ENTRY)&_ZN6S595C53v15Ev,
  (VTBL_ENTRY)&_ZN6S595C53v16Ev,
  (VTBL_ENTRY)&_ZN6S595C53v17Ev,
  (VTBL_ENTRY)&_ZN6S595C53v18Ev,
  (VTBL_ENTRY)&_ZN6S595C53v19Ev,
  (VTBL_ENTRY)&_ZN6S595C53v20Ev,
  (VTBL_ENTRY)&_ZN6S595C53v21Ev,
  (VTBL_ENTRY)&_ZN6S595C53v22Ev,
  (VTBL_ENTRY)&_ZN6S595C53v23Ev,
  (VTBL_ENTRY)&_ZN6S595C53v24Ev,
  (VTBL_ENTRY)&_ZN6S595C53v25Ev,
  (VTBL_ENTRY)&_ZN6S595C53v26Ev,
  (VTBL_ENTRY)&_ZN6S595C53v27Ev,
  (VTBL_ENTRY)&_ZN6S595C53v28Ev,
  (VTBL_ENTRY)&_ZN6S595C53v29Ev,
  (VTBL_ENTRY)&_ZN6S595C53v30Ev,
  (VTBL_ENTRY)&_ZN6S595C53v31Ev,
  (VTBL_ENTRY)&_ZN6S595C53v32Ev,
  (VTBL_ENTRY)&_ZN6S595C53v33Ev,
  (VTBL_ENTRY)&_ZN6S595C53v34Ev,
  (VTBL_ENTRY)&_ZN6S595C53v35Ev,
  (VTBL_ENTRY)&_ZN6S595C53v36Ev,
  (VTBL_ENTRY)&_ZN6S595C53v37Ev,
  (VTBL_ENTRY)&_ZN6S595C53v38Ev,
  (VTBL_ENTRY)&_ZN6S595C53v39Ev,
  (VTBL_ENTRY)&_ZN6S595C53v40Ev,
  (VTBL_ENTRY)&_ZN6S595C53v41Ev,
  (VTBL_ENTRY)&_ZN6S595C53v42Ev,
  (VTBL_ENTRY)&_ZN6S595C53v43Ev,
  (VTBL_ENTRY)&_ZN6S595C53v44Ev,
  (VTBL_ENTRY)&_ZN6S595C53v45Ev,
  (VTBL_ENTRY)&_ZN6S595C53v46Ev,
  (VTBL_ENTRY)&_ZN6S595C53v47Ev,
  (VTBL_ENTRY)&_ZN6S595C53v48Ev,
  (VTBL_ENTRY)&_ZN6S595C53v49Ev,
  (VTBL_ENTRY)&_ZN6S595C53v50Ev,
  (VTBL_ENTRY)&_ZN6S595C53v51Ev,
  (VTBL_ENTRY)&_ZN6S595C53v52Ev,
  (VTBL_ENTRY)&_ZN6S595C53v53Ev,
  (VTBL_ENTRY)&_ZN6S595C53v54Ev,
  (VTBL_ENTRY)&_ZN6S595C53v55Ev,
  (VTBL_ENTRY)&_ZN6S595C53v56Ev,
  (VTBL_ENTRY)&_ZN6S595C53v57Ev,
  (VTBL_ENTRY)&_ZN6S595C53v58Ev,
  (VTBL_ENTRY)&_ZN6S595C53v59Ev,
  (VTBL_ENTRY)&_ZN6S595C53v60Ev,
  (VTBL_ENTRY)&_ZN6S595C53v61Ev,
  (VTBL_ENTRY)&_ZN6S595C53v62Ev,
  (VTBL_ENTRY)&_ZN6S595C53v63Ev,
  (VTBL_ENTRY)&_ZN6S595C53v64Ev,
  (VTBL_ENTRY)&_ZN6S595C53v65Ev,
  (VTBL_ENTRY)&_ZN6S595C53v66Ev,
  (VTBL_ENTRY)&_ZN6S595C53v67Ev,
};
extern VTBL_ENTRY _ZTI6S595C5[];
extern  VTBL_ENTRY _ZTV6S595C5[];
Class_Descriptor cd_S595C5 = {  "S595C5", // class name
  0,0,//no base classes
  &(vtc_S595C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S595C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S595C5),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  S595C4  : S595C5 {
  int s595c4f0[2];
  void *s595c4f1;
  int s595c4f2[2];
  ::S239C8_nt s595c4f3;
  ::S239C8_nt s595c4f4;
  ::S239C12_nt s595c4f5;
  ::S239C8_nt s595c4f6;
  unsigned int s595c4f7:1;
  unsigned int s595c4f8:1;
  unsigned int s595c4f9:1;
  unsigned int s595c4f10:1;
  unsigned int s595c4f11:1;
  int s595c4f12[2];
  virtual  ~S595C4(); // _ZN6S595C4D1Ev
  virtual void  v68(); // _ZN6S595C43v68Ev
  virtual void  v69(); // _ZN6S595C43v69Ev
  virtual void  v70(); // _ZN6S595C43v70Ev
  virtual void  v71(); // _ZN6S595C43v71Ev
  virtual void  v72(); // _ZN6S595C43v72Ev
  virtual void  v73(); // _ZN6S595C43v73Ev
  virtual void  v74(); // _ZN6S595C43v74Ev
  virtual void  v75(); // _ZN6S595C43v75Ev
  virtual void  v76(); // _ZN6S595C43v76Ev
  virtual void  v77(); // _ZN6S595C43v77Ev
  virtual void  v78(); // _ZN6S595C43v78Ev
  virtual void  v79(); // _ZN6S595C43v79Ev
  virtual void  v80(); // _ZN6S595C43v80Ev
  virtual void  v81(); // _ZN6S595C43v81Ev
  virtual void  v82(); // _ZN6S595C43v82Ev
  virtual void  v83(); // _ZN6S595C43v83Ev
  virtual void  v84(); // _ZN6S595C43v84Ev
  virtual void  v85(); // _ZN6S595C43v85Ev
  virtual void  v86(); // _ZN6S595C43v86Ev
  virtual void  v87(); // _ZN6S595C43v87Ev
  virtual void  v88(); // _ZN6S595C43v88Ev
  virtual void  v89(); // _ZN6S595C43v89Ev
  S595C4(); // tgen
};
//SIG(-1 S595C4) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S595C4 ::~S595C4(){ note_dtor("S595C4", this);}
void  S595C4 ::v68(){vfunc_called(this, "_ZN6S595C43v68Ev");}
void  S595C4 ::v69(){vfunc_called(this, "_ZN6S595C43v69Ev");}
void  S595C4 ::v70(){vfunc_called(this, "_ZN6S595C43v70Ev");}
void  S595C4 ::v71(){vfunc_called(this, "_ZN6S595C43v71Ev");}
void  S595C4 ::v72(){vfunc_called(this, "_ZN6S595C43v72Ev");}
void  S595C4 ::v73(){vfunc_called(this, "_ZN6S595C43v73Ev");}
void  S595C4 ::v74(){vfunc_called(this, "_ZN6S595C43v74Ev");}
void  S595C4 ::v75(){vfunc_called(this, "_ZN6S595C43v75Ev");}
void  S595C4 ::v76(){vfunc_called(this, "_ZN6S595C43v76Ev");}
void  S595C4 ::v77(){vfunc_called(this, "_ZN6S595C43v77Ev");}
void  S595C4 ::v78(){vfunc_called(this, "_ZN6S595C43v78Ev");}
void  S595C4 ::v79(){vfunc_called(this, "_ZN6S595C43v79Ev");}
void  S595C4 ::v80(){vfunc_called(this, "_ZN6S595C43v80Ev");}
void  S595C4 ::v81(){vfunc_called(this, "_ZN6S595C43v81Ev");}
void  S595C4 ::v82(){vfunc_called(this, "_ZN6S595C43v82Ev");}
void  S595C4 ::v83(){vfunc_called(this, "_ZN6S595C43v83Ev");}
void  S595C4 ::v84(){vfunc_called(this, "_ZN6S595C43v84Ev");}
void  S595C4 ::v85(){vfunc_called(this, "_ZN6S595C43v85Ev");}
void  S595C4 ::v86(){vfunc_called(this, "_ZN6S595C43v86Ev");}
void  S595C4 ::v87(){vfunc_called(this, "_ZN6S595C43v87Ev");}
void  S595C4 ::v88(){vfunc_called(this, "_ZN6S595C43v88Ev");}
void  S595C4 ::v89(){vfunc_called(this, "_ZN6S595C43v89Ev");}
S595C4 ::S595C4(){ note_ctor("S595C4", this);} // tgen

static void Test_S595C4()
{
  extern Class_Descriptor cd_S595C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S595C4, buf);
    S595C4 *dp, &lv = *(dp=new (buf) S595C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S595C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S595C4)");
    check_base_class_offset(lv, (S595C5*), 0, "S595C4");
    check_field_offset(lv, s595c4f0, ABISELECT(96,60), "S595C4.s595c4f0");
    check_field_offset(lv, s595c4f1, ABISELECT(104,68), "S595C4.s595c4f1");
    check_field_offset(lv, s595c4f2, ABISELECT(112,72), "S595C4.s595c4f2");
    check_field_offset(lv, s595c4f3, ABISELECT(120,80), "S595C4.s595c4f3");
    check_field_offset(lv, s595c4f4, ABISELECT(136,92), "S595C4.s595c4f4");
    check_field_offset(lv, s595c4f5, ABISELECT(152,104), "S595C4.s595c4f5");
    check_field_offset(lv, s595c4f6, ABISELECT(160,108), "S595C4.s595c4f6");
    set_bf_and_test(lv, s595c4f7, ABISELECT(176,120), 0, 1, 1, "S595C4");
    set_bf_and_test(lv, s595c4f8, ABISELECT(176,120), 1, 1, 1, "S595C4");
    set_bf_and_test(lv, s595c4f9, ABISELECT(176,120), 2, 1, 1, "S595C4");
    set_bf_and_test(lv, s595c4f10, ABISELECT(176,120), 3, 1, 1, "S595C4");
    set_bf_and_test(lv, s595c4f11, ABISELECT(176,120), 4, 1, 1, "S595C4");
    check_field_offset(lv, s595c4f12, ABISELECT(180,124), "S595C4.s595c4f12");
    test_class_info(&lv, &cd_S595C4);
    dp->~S595C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS595C4(Test_S595C4, "S595C4", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S595C4C1Ev();
extern void _ZN6S595C4D1Ev();
Name_Map name_map_S595C4[] = {
  NSPAIR(_ZN6S595C4C1Ev),
  NSPAIR(_ZN6S595C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S595C5;
extern VTBL_ENTRY _ZTI6S595C5[];
extern  VTBL_ENTRY _ZTV6S595C5[];
static Base_Class bases_S595C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S595C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S595C4[];
extern void _ZN6S595C4D1Ev();
extern void _ZN6S595C4D0Ev();
extern void _ZN6S595C52v4Ev();
extern void _ZN6S595C52v5Ev();
extern void _ZN6S595C52v6Ev();
extern void _ZN6S595C52v7Ev();
extern void _ZN6S595C52v8Ev();
extern void _ZN6S595C52v9Ev();
extern void _ZN6S595C53v10Ev();
extern void _ZN6S595C53v11Ev();
extern void _ZN6S595C53v12Ev();
extern void _ZN6S595C53v13Ev();
extern void _ZN6S595C53v14Ev();
extern void _ZN6S595C53v15Ev();
extern void _ZN6S595C53v16Ev();
extern void _ZN6S595C53v17Ev();
extern void _ZN6S595C53v18Ev();
extern void _ZN6S595C53v19Ev();
extern void _ZN6S595C53v20Ev();
extern void _ZN6S595C53v21Ev();
extern void _ZN6S595C53v22Ev();
extern void _ZN6S595C53v23Ev();
extern void _ZN6S595C53v24Ev();
extern void _ZN6S595C53v25Ev();
extern void _ZN6S595C53v26Ev();
extern void _ZN6S595C53v27Ev();
extern void _ZN6S595C53v28Ev();
extern void _ZN6S595C53v29Ev();
extern void _ZN6S595C53v30Ev();
extern void _ZN6S595C53v31Ev();
extern void _ZN6S595C53v32Ev();
extern void _ZN6S595C53v33Ev();
extern void _ZN6S595C53v34Ev();
extern void _ZN6S595C53v35Ev();
extern void _ZN6S595C53v36Ev();
extern void _ZN6S595C53v37Ev();
extern void _ZN6S595C53v38Ev();
extern void _ZN6S595C53v39Ev();
extern void _ZN6S595C53v40Ev();
extern void _ZN6S595C53v41Ev();
extern void _ZN6S595C53v42Ev();
extern void _ZN6S595C53v43Ev();
extern void _ZN6S595C53v44Ev();
extern void _ZN6S595C53v45Ev();
extern void _ZN6S595C53v46Ev();
extern void _ZN6S595C53v47Ev();
extern void _ZN6S595C53v48Ev();
extern void _ZN6S595C53v49Ev();
extern void _ZN6S595C53v50Ev();
extern void _ZN6S595C53v51Ev();
extern void _ZN6S595C53v52Ev();
extern void _ZN6S595C53v53Ev();
extern void _ZN6S595C53v54Ev();
extern void _ZN6S595C53v55Ev();
extern void _ZN6S595C53v56Ev();
extern void _ZN6S595C53v57Ev();
extern void _ZN6S595C53v58Ev();
extern void _ZN6S595C53v59Ev();
extern void _ZN6S595C53v60Ev();
extern void _ZN6S595C53v61Ev();
extern void _ZN6S595C53v62Ev();
extern void _ZN6S595C53v63Ev();
extern void _ZN6S595C53v64Ev();
extern void _ZN6S595C53v65Ev();
extern void _ZN6S595C53v66Ev();
extern void _ZN6S595C53v67Ev();
extern void _ZN6S595C43v68Ev();
extern void _ZN6S595C43v69Ev();
extern void _ZN6S595C43v70Ev();
extern void _ZN6S595C43v71Ev();
extern void _ZN6S595C43v72Ev();
extern void _ZN6S595C43v73Ev();
extern void _ZN6S595C43v74Ev();
extern void _ZN6S595C43v75Ev();
extern void _ZN6S595C43v76Ev();
extern void _ZN6S595C43v77Ev();
extern void _ZN6S595C43v78Ev();
extern void _ZN6S595C43v79Ev();
extern void _ZN6S595C43v80Ev();
extern void _ZN6S595C43v81Ev();
extern void _ZN6S595C43v82Ev();
extern void _ZN6S595C43v83Ev();
extern void _ZN6S595C43v84Ev();
extern void _ZN6S595C43v85Ev();
extern void _ZN6S595C43v86Ev();
extern void _ZN6S595C43v87Ev();
extern void _ZN6S595C43v88Ev();
extern void _ZN6S595C43v89Ev();
static  VTBL_ENTRY vtc_S595C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S595C4[0]),
  (VTBL_ENTRY)&_ZN6S595C4D1Ev,
  (VTBL_ENTRY)&_ZN6S595C4D0Ev,
  (VTBL_ENTRY)&_ZN6S595C52v4Ev,
  (VTBL_ENTRY)&_ZN6S595C52v5Ev,
  (VTBL_ENTRY)&_ZN6S595C52v6Ev,
  (VTBL_ENTRY)&_ZN6S595C52v7Ev,
  (VTBL_ENTRY)&_ZN6S595C52v8Ev,
  (VTBL_ENTRY)&_ZN6S595C52v9Ev,
  (VTBL_ENTRY)&_ZN6S595C53v10Ev,
  (VTBL_ENTRY)&_ZN6S595C53v11Ev,
  (VTBL_ENTRY)&_ZN6S595C53v12Ev,
  (VTBL_ENTRY)&_ZN6S595C53v13Ev,
  (VTBL_ENTRY)&_ZN6S595C53v14Ev,
  (VTBL_ENTRY)&_ZN6S595C53v15Ev,
  (VTBL_ENTRY)&_ZN6S595C53v16Ev,
  (VTBL_ENTRY)&_ZN6S595C53v17Ev,
  (VTBL_ENTRY)&_ZN6S595C53v18Ev,
  (VTBL_ENTRY)&_ZN6S595C53v19Ev,
  (VTBL_ENTRY)&_ZN6S595C53v20Ev,
  (VTBL_ENTRY)&_ZN6S595C53v21Ev,
  (VTBL_ENTRY)&_ZN6S595C53v22Ev,
  (VTBL_ENTRY)&_ZN6S595C53v23Ev,
  (VTBL_ENTRY)&_ZN6S595C53v24Ev,
  (VTBL_ENTRY)&_ZN6S595C53v25Ev,
  (VTBL_ENTRY)&_ZN6S595C53v26Ev,
  (VTBL_ENTRY)&_ZN6S595C53v27Ev,
  (VTBL_ENTRY)&_ZN6S595C53v28Ev,
  (VTBL_ENTRY)&_ZN6S595C53v29Ev,
  (VTBL_ENTRY)&_ZN6S595C53v30Ev,
  (VTBL_ENTRY)&_ZN6S595C53v31Ev,
  (VTBL_ENTRY)&_ZN6S595C53v32Ev,
  (VTBL_ENTRY)&_ZN6S595C53v33Ev,
  (VTBL_ENTRY)&_ZN6S595C53v34Ev,
  (VTBL_ENTRY)&_ZN6S595C53v35Ev,
  (VTBL_ENTRY)&_ZN6S595C53v36Ev,
  (VTBL_ENTRY)&_ZN6S595C53v37Ev,
  (VTBL_ENTRY)&_ZN6S595C53v38Ev,
  (VTBL_ENTRY)&_ZN6S595C53v39Ev,
  (VTBL_ENTRY)&_ZN6S595C53v40Ev,
  (VTBL_ENTRY)&_ZN6S595C53v41Ev,
  (VTBL_ENTRY)&_ZN6S595C53v42Ev,
  (VTBL_ENTRY)&_ZN6S595C53v43Ev,
  (VTBL_ENTRY)&_ZN6S595C53v44Ev,
  (VTBL_ENTRY)&_ZN6S595C53v45Ev,
  (VTBL_ENTRY)&_ZN6S595C53v46Ev,
  (VTBL_ENTRY)&_ZN6S595C53v47Ev,
  (VTBL_ENTRY)&_ZN6S595C53v48Ev,
  (VTBL_ENTRY)&_ZN6S595C53v49Ev,
  (VTBL_ENTRY)&_ZN6S595C53v50Ev,
  (VTBL_ENTRY)&_ZN6S595C53v51Ev,
  (VTBL_ENTRY)&_ZN6S595C53v52Ev,
  (VTBL_ENTRY)&_ZN6S595C53v53Ev,
  (VTBL_ENTRY)&_ZN6S595C53v54Ev,
  (VTBL_ENTRY)&_ZN6S595C53v55Ev,
  (VTBL_ENTRY)&_ZN6S595C53v56Ev,
  (VTBL_ENTRY)&_ZN6S595C53v57Ev,
  (VTBL_ENTRY)&_ZN6S595C53v58Ev,
  (VTBL_ENTRY)&_ZN6S595C53v59Ev,
  (VTBL_ENTRY)&_ZN6S595C53v60Ev,
  (VTBL_ENTRY)&_ZN6S595C53v61Ev,
  (VTBL_ENTRY)&_ZN6S595C53v62Ev,
  (VTBL_ENTRY)&_ZN6S595C53v63Ev,
  (VTBL_ENTRY)&_ZN6S595C53v64Ev,
  (VTBL_ENTRY)&_ZN6S595C53v65Ev,
  (VTBL_ENTRY)&_ZN6S595C53v66Ev,
  (VTBL_ENTRY)&_ZN6S595C53v67Ev,
  (VTBL_ENTRY)&_ZN6S595C43v68Ev,
  (VTBL_ENTRY)&_ZN6S595C43v69Ev,
  (VTBL_ENTRY)&_ZN6S595C43v70Ev,
  (VTBL_ENTRY)&_ZN6S595C43v71Ev,
  (VTBL_ENTRY)&_ZN6S595C43v72Ev,
  (VTBL_ENTRY)&_ZN6S595C43v73Ev,
  (VTBL_ENTRY)&_ZN6S595C43v74Ev,
  (VTBL_ENTRY)&_ZN6S595C43v75Ev,
  (VTBL_ENTRY)&_ZN6S595C43v76Ev,
  (VTBL_ENTRY)&_ZN6S595C43v77Ev,
  (VTBL_ENTRY)&_ZN6S595C43v78Ev,
  (VTBL_ENTRY)&_ZN6S595C43v79Ev,
  (VTBL_ENTRY)&_ZN6S595C43v80Ev,
  (VTBL_ENTRY)&_ZN6S595C43v81Ev,
  (VTBL_ENTRY)&_ZN6S595C43v82Ev,
  (VTBL_ENTRY)&_ZN6S595C43v83Ev,
  (VTBL_ENTRY)&_ZN6S595C43v84Ev,
  (VTBL_ENTRY)&_ZN6S595C43v85Ev,
  (VTBL_ENTRY)&_ZN6S595C43v86Ev,
  (VTBL_ENTRY)&_ZN6S595C43v87Ev,
  (VTBL_ENTRY)&_ZN6S595C43v88Ev,
  (VTBL_ENTRY)&_ZN6S595C43v89Ev,
};
extern VTBL_ENTRY _ZTI6S595C4[];
extern  VTBL_ENTRY _ZTV6S595C4[];
Class_Descriptor cd_S595C4 = {  "S595C4", // class name
  bases_S595C4, 1,
  &(vtc_S595C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S595C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S595C4),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S595C3  : S595C4 {
  unsigned int s595c3f0:1;
  unsigned int s595c3f1:1;
  unsigned int s595c3f2:1;
  ::S3221C17 s595c3f3;
  ::S3221C11 s595c3f4;
  ::S3221C5_nt s595c3f5;
  ::S3168C19 s595c3f6;
  int s595c3f7[3];
  virtual  ~S595C3(); // _ZN6S595C3D1Ev
  virtual void  v90(); // _ZN6S595C33v90Ev
  virtual void  v91(); // _ZN6S595C33v91Ev
  virtual void  v92(); // _ZN6S595C33v92Ev
  virtual void  v93(); // _ZN6S595C33v93Ev
  virtual void  v94(); // _ZN6S595C33v94Ev
  virtual void  v95(); // _ZN6S595C33v95Ev
  virtual void  v96(); // _ZN6S595C33v96Ev
  virtual void  v97(); // _ZN6S595C33v97Ev
  virtual void  v98(); // _ZN6S595C33v98Ev
  virtual void  v99(); // _ZN6S595C33v99Ev
  virtual void  v100(); // _ZN6S595C34v100Ev
  virtual void  v101(); // _ZN6S595C34v101Ev
  virtual void  v102(); // _ZN6S595C34v102Ev
  virtual void  v103(); // _ZN6S595C34v103Ev
  virtual void  v104(); // _ZN6S595C34v104Ev
  virtual void  v105(); // _ZN6S595C34v105Ev
  virtual void  v106(); // _ZN6S595C34v106Ev
  virtual void  v107(); // _ZN6S595C34v107Ev
  virtual void  v108(); // _ZN6S595C34v108Ev
  virtual void  v109(); // _ZN6S595C34v109Ev
  S595C3(); // tgen
};
//SIG(-1 S595C3) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S595C3 ::~S595C3(){ note_dtor("S595C3", this);}
void  S595C3 ::v90(){vfunc_called(this, "_ZN6S595C33v90Ev");}
void  S595C3 ::v91(){vfunc_called(this, "_ZN6S595C33v91Ev");}
void  S595C3 ::v92(){vfunc_called(this, "_ZN6S595C33v92Ev");}
void  S595C3 ::v93(){vfunc_called(this, "_ZN6S595C33v93Ev");}
void  S595C3 ::v94(){vfunc_called(this, "_ZN6S595C33v94Ev");}
void  S595C3 ::v95(){vfunc_called(this, "_ZN6S595C33v95Ev");}
void  S595C3 ::v96(){vfunc_called(this, "_ZN6S595C33v96Ev");}
void  S595C3 ::v97(){vfunc_called(this, "_ZN6S595C33v97Ev");}
void  S595C3 ::v98(){vfunc_called(this, "_ZN6S595C33v98Ev");}
void  S595C3 ::v99(){vfunc_called(this, "_ZN6S595C33v99Ev");}
void  S595C3 ::v100(){vfunc_called(this, "_ZN6S595C34v100Ev");}
void  S595C3 ::v101(){vfunc_called(this, "_ZN6S595C34v101Ev");}
void  S595C3 ::v102(){vfunc_called(this, "_ZN6S595C34v102Ev");}
void  S595C3 ::v103(){vfunc_called(this, "_ZN6S595C34v103Ev");}
void  S595C3 ::v104(){vfunc_called(this, "_ZN6S595C34v104Ev");}
void  S595C3 ::v105(){vfunc_called(this, "_ZN6S595C34v105Ev");}
void  S595C3 ::v106(){vfunc_called(this, "_ZN6S595C34v106Ev");}
void  S595C3 ::v107(){vfunc_called(this, "_ZN6S595C34v107Ev");}
void  S595C3 ::v108(){vfunc_called(this, "_ZN6S595C34v108Ev");}
void  S595C3 ::v109(){vfunc_called(this, "_ZN6S595C34v109Ev");}
S595C3 ::S595C3(){ note_ctor("S595C3", this);} // tgen

static void Test_S595C3()
{
  extern Class_Descriptor cd_S595C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S595C3, buf);
    S595C3 *dp, &lv = *(dp=new (buf) S595C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S595C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S595C3)");
    check_base_class_offset(lv, (S595C5*)(S595C4*), 0, "S595C3");
    check_base_class_offset(lv, (S595C4*), 0, "S595C3");
    set_bf_and_test(lv, s595c3f0, ABISELECT(188,132), 0, 1, 1, "S595C3");
    set_bf_and_test(lv, s595c3f1, ABISELECT(188,132), 1, 1, 1, "S595C3");
    set_bf_and_test(lv, s595c3f2, ABISELECT(188,132), 2, 1, 1, "S595C3");
    check_field_offset(lv, s595c3f3, ABISELECT(192,136), "S595C3.s595c3f3");
    check_field_offset(lv, s595c3f4, ABISELECT(208,148), "S595C3.s595c3f4");
    check_field_offset(lv, s595c3f5, ABISELECT(224,160), "S595C3.s595c3f5");
    check_field_offset(lv, s595c3f6, ABISELECT(240,172), "S595C3.s595c3f6");
    check_field_offset(lv, s595c3f7, ABISELECT(256,184), "S595C3.s595c3f7");
    test_class_info(&lv, &cd_S595C3);
    dp->~S595C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS595C3(Test_S595C3, "S595C3", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S595C3C1Ev();
extern void _ZN6S595C3D1Ev();
Name_Map name_map_S595C3[] = {
  NSPAIR(_ZN6S595C3C1Ev),
  NSPAIR(_ZN6S595C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S595C5;
extern VTBL_ENTRY _ZTI6S595C5[];
extern  VTBL_ENTRY _ZTV6S595C5[];
extern Class_Descriptor cd_S595C4;
extern VTBL_ENTRY _ZTI6S595C4[];
extern  VTBL_ENTRY _ZTV6S595C4[];
static Base_Class bases_S595C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S595C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S595C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S595C3[];
extern void _ZN6S595C3D1Ev();
extern void _ZN6S595C3D0Ev();
extern void _ZN6S595C52v4Ev();
extern void _ZN6S595C52v5Ev();
extern void _ZN6S595C52v6Ev();
extern void _ZN6S595C52v7Ev();
extern void _ZN6S595C52v8Ev();
extern void _ZN6S595C52v9Ev();
extern void _ZN6S595C53v10Ev();
extern void _ZN6S595C53v11Ev();
extern void _ZN6S595C53v12Ev();
extern void _ZN6S595C53v13Ev();
extern void _ZN6S595C53v14Ev();
extern void _ZN6S595C53v15Ev();
extern void _ZN6S595C53v16Ev();
extern void _ZN6S595C53v17Ev();
extern void _ZN6S595C53v18Ev();
extern void _ZN6S595C53v19Ev();
extern void _ZN6S595C53v20Ev();
extern void _ZN6S595C53v21Ev();
extern void _ZN6S595C53v22Ev();
extern void _ZN6S595C53v23Ev();
extern void _ZN6S595C53v24Ev();
extern void _ZN6S595C53v25Ev();
extern void _ZN6S595C53v26Ev();
extern void _ZN6S595C53v27Ev();
extern void _ZN6S595C53v28Ev();
extern void _ZN6S595C53v29Ev();
extern void _ZN6S595C53v30Ev();
extern void _ZN6S595C53v31Ev();
extern void _ZN6S595C53v32Ev();
extern void _ZN6S595C53v33Ev();
extern void _ZN6S595C53v34Ev();
extern void _ZN6S595C53v35Ev();
extern void _ZN6S595C53v36Ev();
extern void _ZN6S595C53v37Ev();
extern void _ZN6S595C53v38Ev();
extern void _ZN6S595C53v39Ev();
extern void _ZN6S595C53v40Ev();
extern void _ZN6S595C53v41Ev();
extern void _ZN6S595C53v42Ev();
extern void _ZN6S595C53v43Ev();
extern void _ZN6S595C53v44Ev();
extern void _ZN6S595C53v45Ev();
extern void _ZN6S595C53v46Ev();
extern void _ZN6S595C53v47Ev();
extern void _ZN6S595C53v48Ev();
extern void _ZN6S595C53v49Ev();
extern void _ZN6S595C53v50Ev();
extern void _ZN6S595C53v51Ev();
extern void _ZN6S595C53v52Ev();
extern void _ZN6S595C53v53Ev();
extern void _ZN6S595C53v54Ev();
extern void _ZN6S595C53v55Ev();
extern void _ZN6S595C53v56Ev();
extern void _ZN6S595C53v57Ev();
extern void _ZN6S595C53v58Ev();
extern void _ZN6S595C53v59Ev();
extern void _ZN6S595C53v60Ev();
extern void _ZN6S595C53v61Ev();
extern void _ZN6S595C53v62Ev();
extern void _ZN6S595C53v63Ev();
extern void _ZN6S595C53v64Ev();
extern void _ZN6S595C53v65Ev();
extern void _ZN6S595C53v66Ev();
extern void _ZN6S595C53v67Ev();
extern void _ZN6S595C43v68Ev();
extern void _ZN6S595C43v69Ev();
extern void _ZN6S595C43v70Ev();
extern void _ZN6S595C43v71Ev();
extern void _ZN6S595C43v72Ev();
extern void _ZN6S595C43v73Ev();
extern void _ZN6S595C43v74Ev();
extern void _ZN6S595C43v75Ev();
extern void _ZN6S595C43v76Ev();
extern void _ZN6S595C43v77Ev();
extern void _ZN6S595C43v78Ev();
extern void _ZN6S595C43v79Ev();
extern void _ZN6S595C43v80Ev();
extern void _ZN6S595C43v81Ev();
extern void _ZN6S595C43v82Ev();
extern void _ZN6S595C43v83Ev();
extern void _ZN6S595C43v84Ev();
extern void _ZN6S595C43v85Ev();
extern void _ZN6S595C43v86Ev();
extern void _ZN6S595C43v87Ev();
extern void _ZN6S595C43v88Ev();
extern void _ZN6S595C43v89Ev();
extern void _ZN6S595C33v90Ev();
extern void _ZN6S595C33v91Ev();
extern void _ZN6S595C33v92Ev();
extern void _ZN6S595C33v93Ev();
extern void _ZN6S595C33v94Ev();
extern void _ZN6S595C33v95Ev();
extern void _ZN6S595C33v96Ev();
extern void _ZN6S595C33v97Ev();
extern void _ZN6S595C33v98Ev();
extern void _ZN6S595C33v99Ev();
extern void _ZN6S595C34v100Ev();
extern void _ZN6S595C34v101Ev();
extern void _ZN6S595C34v102Ev();
extern void _ZN6S595C34v103Ev();
extern void _ZN6S595C34v104Ev();
extern void _ZN6S595C34v105Ev();
extern void _ZN6S595C34v106Ev();
extern void _ZN6S595C34v107Ev();
extern void _ZN6S595C34v108Ev();
extern void _ZN6S595C34v109Ev();
static  VTBL_ENTRY vtc_S595C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S595C3[0]),
  (VTBL_ENTRY)&_ZN6S595C3D1Ev,
  (VTBL_ENTRY)&_ZN6S595C3D0Ev,
  (VTBL_ENTRY)&_ZN6S595C52v4Ev,
  (VTBL_ENTRY)&_ZN6S595C52v5Ev,
  (VTBL_ENTRY)&_ZN6S595C52v6Ev,
  (VTBL_ENTRY)&_ZN6S595C52v7Ev,
  (VTBL_ENTRY)&_ZN6S595C52v8Ev,
  (VTBL_ENTRY)&_ZN6S595C52v9Ev,
  (VTBL_ENTRY)&_ZN6S595C53v10Ev,
  (VTBL_ENTRY)&_ZN6S595C53v11Ev,
  (VTBL_ENTRY)&_ZN6S595C53v12Ev,
  (VTBL_ENTRY)&_ZN6S595C53v13Ev,
  (VTBL_ENTRY)&_ZN6S595C53v14Ev,
  (VTBL_ENTRY)&_ZN6S595C53v15Ev,
  (VTBL_ENTRY)&_ZN6S595C53v16Ev,
  (VTBL_ENTRY)&_ZN6S595C53v17Ev,
  (VTBL_ENTRY)&_ZN6S595C53v18Ev,
  (VTBL_ENTRY)&_ZN6S595C53v19Ev,
  (VTBL_ENTRY)&_ZN6S595C53v20Ev,
  (VTBL_ENTRY)&_ZN6S595C53v21Ev,
  (VTBL_ENTRY)&_ZN6S595C53v22Ev,
  (VTBL_ENTRY)&_ZN6S595C53v23Ev,
  (VTBL_ENTRY)&_ZN6S595C53v24Ev,
  (VTBL_ENTRY)&_ZN6S595C53v25Ev,
  (VTBL_ENTRY)&_ZN6S595C53v26Ev,
  (VTBL_ENTRY)&_ZN6S595C53v27Ev,
  (VTBL_ENTRY)&_ZN6S595C53v28Ev,
  (VTBL_ENTRY)&_ZN6S595C53v29Ev,
  (VTBL_ENTRY)&_ZN6S595C53v30Ev,
  (VTBL_ENTRY)&_ZN6S595C53v31Ev,
  (VTBL_ENTRY)&_ZN6S595C53v32Ev,
  (VTBL_ENTRY)&_ZN6S595C53v33Ev,
  (VTBL_ENTRY)&_ZN6S595C53v34Ev,
  (VTBL_ENTRY)&_ZN6S595C53v35Ev,
  (VTBL_ENTRY)&_ZN6S595C53v36Ev,
  (VTBL_ENTRY)&_ZN6S595C53v37Ev,
  (VTBL_ENTRY)&_ZN6S595C53v38Ev,
  (VTBL_ENTRY)&_ZN6S595C53v39Ev,
  (VTBL_ENTRY)&_ZN6S595C53v40Ev,
  (VTBL_ENTRY)&_ZN6S595C53v41Ev,
  (VTBL_ENTRY)&_ZN6S595C53v42Ev,
  (VTBL_ENTRY)&_ZN6S595C53v43Ev,
  (VTBL_ENTRY)&_ZN6S595C53v44Ev,
  (VTBL_ENTRY)&_ZN6S595C53v45Ev,
  (VTBL_ENTRY)&_ZN6S595C53v46Ev,
  (VTBL_ENTRY)&_ZN6S595C53v47Ev,
  (VTBL_ENTRY)&_ZN6S595C53v48Ev,
  (VTBL_ENTRY)&_ZN6S595C53v49Ev,
  (VTBL_ENTRY)&_ZN6S595C53v50Ev,
  (VTBL_ENTRY)&_ZN6S595C53v51Ev,
  (VTBL_ENTRY)&_ZN6S595C53v52Ev,
  (VTBL_ENTRY)&_ZN6S595C53v53Ev,
  (VTBL_ENTRY)&_ZN6S595C53v54Ev,
  (VTBL_ENTRY)&_ZN6S595C53v55Ev,
  (VTBL_ENTRY)&_ZN6S595C53v56Ev,
  (VTBL_ENTRY)&_ZN6S595C53v57Ev,
  (VTBL_ENTRY)&_ZN6S595C53v58Ev,
  (VTBL_ENTRY)&_ZN6S595C53v59Ev,
  (VTBL_ENTRY)&_ZN6S595C53v60Ev,
  (VTBL_ENTRY)&_ZN6S595C53v61Ev,
  (VTBL_ENTRY)&_ZN6S595C53v62Ev,
  (VTBL_ENTRY)&_ZN6S595C53v63Ev,
  (VTBL_ENTRY)&_ZN6S595C53v64Ev,
  (VTBL_ENTRY)&_ZN6S595C53v65Ev,
  (VTBL_ENTRY)&_ZN6S595C53v66Ev,
  (VTBL_ENTRY)&_ZN6S595C53v67Ev,
  (VTBL_ENTRY)&_ZN6S595C43v68Ev,
  (VTBL_ENTRY)&_ZN6S595C43v69Ev,
  (VTBL_ENTRY)&_ZN6S595C43v70Ev,
  (VTBL_ENTRY)&_ZN6S595C43v71Ev,
  (VTBL_ENTRY)&_ZN6S595C43v72Ev,
  (VTBL_ENTRY)&_ZN6S595C43v73Ev,
  (VTBL_ENTRY)&_ZN6S595C43v74Ev,
  (VTBL_ENTRY)&_ZN6S595C43v75Ev,
  (VTBL_ENTRY)&_ZN6S595C43v76Ev,
  (VTBL_ENTRY)&_ZN6S595C43v77Ev,
  (VTBL_ENTRY)&_ZN6S595C43v78Ev,
  (VTBL_ENTRY)&_ZN6S595C43v79Ev,
  (VTBL_ENTRY)&_ZN6S595C43v80Ev,
  (VTBL_ENTRY)&_ZN6S595C43v81Ev,
  (VTBL_ENTRY)&_ZN6S595C43v82Ev,
  (VTBL_ENTRY)&_ZN6S595C43v83Ev,
  (VTBL_ENTRY)&_ZN6S595C43v84Ev,
  (VTBL_ENTRY)&_ZN6S595C43v85Ev,
  (VTBL_ENTRY)&_ZN6S595C43v86Ev,
  (VTBL_ENTRY)&_ZN6S595C43v87Ev,
  (VTBL_ENTRY)&_ZN6S595C43v88Ev,
  (VTBL_ENTRY)&_ZN6S595C43v89Ev,
  (VTBL_ENTRY)&_ZN6S595C33v90Ev,
  (VTBL_ENTRY)&_ZN6S595C33v91Ev,
  (VTBL_ENTRY)&_ZN6S595C33v92Ev,
  (VTBL_ENTRY)&_ZN6S595C33v93Ev,
  (VTBL_ENTRY)&_ZN6S595C33v94Ev,
  (VTBL_ENTRY)&_ZN6S595C33v95Ev,
  (VTBL_ENTRY)&_ZN6S595C33v96Ev,
  (VTBL_ENTRY)&_ZN6S595C33v97Ev,
  (VTBL_ENTRY)&_ZN6S595C33v98Ev,
  (VTBL_ENTRY)&_ZN6S595C33v99Ev,
  (VTBL_ENTRY)&_ZN6S595C34v100Ev,
  (VTBL_ENTRY)&_ZN6S595C34v101Ev,
  (VTBL_ENTRY)&_ZN6S595C34v102Ev,
  (VTBL_ENTRY)&_ZN6S595C34v103Ev,
  (VTBL_ENTRY)&_ZN6S595C34v104Ev,
  (VTBL_ENTRY)&_ZN6S595C34v105Ev,
  (VTBL_ENTRY)&_ZN6S595C34v106Ev,
  (VTBL_ENTRY)&_ZN6S595C34v107Ev,
  (VTBL_ENTRY)&_ZN6S595C34v108Ev,
  (VTBL_ENTRY)&_ZN6S595C34v109Ev,
};
extern VTBL_ENTRY _ZTI6S595C3[];
extern  VTBL_ENTRY _ZTV6S595C3[];
Class_Descriptor cd_S595C3 = {  "S595C3", // class name
  bases_S595C3, 2,
  &(vtc_S595C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S595C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S595C3),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S595C2 ::~S595C2(){ note_dtor("S595C2", this);}
void  S595C2 ::v110(){vfunc_called(this, "_ZN6S595C24v110Ev");}
void  S595C2 ::v111(){vfunc_called(this, "_ZN6S595C24v111Ev");}
S595C2 ::S595C2(){ note_ctor("S595C2", this);} // tgen

static void Test_S595C2()
{
  extern Class_Descriptor cd_S595C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S595C2, buf);
    S595C2 *dp, &lv = *(dp=new (buf) S595C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S595C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S595C2)");
    check_base_class_offset(lv, (S595C5*)(S595C4*)(S595C3*), 0, "S595C2");
    check_base_class_offset(lv, (S595C4*)(S595C3*), 0, "S595C2");
    check_base_class_offset(lv, (S595C3*), 0, "S595C2");
    test_class_info(&lv, &cd_S595C2);
    dp->~S595C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS595C2(Test_S595C2, "S595C2", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S595C2C1Ev();
extern void _ZN6S595C2D1Ev();
Name_Map name_map_S595C2[] = {
  NSPAIR(_ZN6S595C2C1Ev),
  NSPAIR(_ZN6S595C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S595C5;
extern VTBL_ENTRY _ZTI6S595C5[];
extern  VTBL_ENTRY _ZTV6S595C5[];
extern Class_Descriptor cd_S595C4;
extern VTBL_ENTRY _ZTI6S595C4[];
extern  VTBL_ENTRY _ZTV6S595C4[];
extern Class_Descriptor cd_S595C3;
extern VTBL_ENTRY _ZTI6S595C3[];
extern  VTBL_ENTRY _ZTV6S595C3[];
static Base_Class bases_S595C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S595C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S595C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S595C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S595C2[];
extern void _ZN6S595C2D1Ev();
extern void _ZN6S595C2D0Ev();
extern void _ZN6S595C52v4Ev();
extern void _ZN6S595C52v5Ev();
extern void _ZN6S595C52v6Ev();
extern void _ZN6S595C52v7Ev();
extern void _ZN6S595C52v8Ev();
extern void _ZN6S595C52v9Ev();
extern void _ZN6S595C53v10Ev();
extern void _ZN6S595C53v11Ev();
extern void _ZN6S595C53v12Ev();
extern void _ZN6S595C53v13Ev();
extern void _ZN6S595C53v14Ev();
extern void _ZN6S595C53v15Ev();
extern void _ZN6S595C53v16Ev();
extern void _ZN6S595C53v17Ev();
extern void _ZN6S595C53v18Ev();
extern void _ZN6S595C53v19Ev();
extern void _ZN6S595C53v20Ev();
extern void _ZN6S595C53v21Ev();
extern void _ZN6S595C53v22Ev();
extern void _ZN6S595C53v23Ev();
extern void _ZN6S595C53v24Ev();
extern void _ZN6S595C53v25Ev();
extern void _ZN6S595C53v26Ev();
extern void _ZN6S595C53v27Ev();
extern void _ZN6S595C53v28Ev();
extern void _ZN6S595C53v29Ev();
extern void _ZN6S595C53v30Ev();
extern void _ZN6S595C53v31Ev();
extern void _ZN6S595C53v32Ev();
extern void _ZN6S595C53v33Ev();
extern void _ZN6S595C53v34Ev();
extern void _ZN6S595C53v35Ev();
extern void _ZN6S595C53v36Ev();
extern void _ZN6S595C53v37Ev();
extern void _ZN6S595C53v38Ev();
extern void _ZN6S595C53v39Ev();
extern void _ZN6S595C53v40Ev();
extern void _ZN6S595C53v41Ev();
extern void _ZN6S595C53v42Ev();
extern void _ZN6S595C53v43Ev();
extern void _ZN6S595C53v44Ev();
extern void _ZN6S595C53v45Ev();
extern void _ZN6S595C53v46Ev();
extern void _ZN6S595C53v47Ev();
extern void _ZN6S595C53v48Ev();
extern void _ZN6S595C53v49Ev();
extern void _ZN6S595C53v50Ev();
extern void _ZN6S595C53v51Ev();
extern void _ZN6S595C53v52Ev();
extern void _ZN6S595C53v53Ev();
extern void _ZN6S595C53v54Ev();
extern void _ZN6S595C53v55Ev();
extern void _ZN6S595C53v56Ev();
extern void _ZN6S595C53v57Ev();
extern void _ZN6S595C53v58Ev();
extern void _ZN6S595C53v59Ev();
extern void _ZN6S595C53v60Ev();
extern void _ZN6S595C53v61Ev();
extern void _ZN6S595C53v62Ev();
extern void _ZN6S595C53v63Ev();
extern void _ZN6S595C53v64Ev();
extern void _ZN6S595C53v65Ev();
extern void _ZN6S595C53v66Ev();
extern void _ZN6S595C53v67Ev();
extern void _ZN6S595C43v68Ev();
extern void _ZN6S595C43v69Ev();
extern void _ZN6S595C43v70Ev();
extern void _ZN6S595C43v71Ev();
extern void _ZN6S595C43v72Ev();
extern void _ZN6S595C43v73Ev();
extern void _ZN6S595C43v74Ev();
extern void _ZN6S595C43v75Ev();
extern void _ZN6S595C43v76Ev();
extern void _ZN6S595C43v77Ev();
extern void _ZN6S595C43v78Ev();
extern void _ZN6S595C43v79Ev();
extern void _ZN6S595C43v80Ev();
extern void _ZN6S595C43v81Ev();
extern void _ZN6S595C43v82Ev();
extern void _ZN6S595C43v83Ev();
extern void _ZN6S595C43v84Ev();
extern void _ZN6S595C43v85Ev();
extern void _ZN6S595C43v86Ev();
extern void _ZN6S595C43v87Ev();
extern void _ZN6S595C43v88Ev();
extern void _ZN6S595C43v89Ev();
extern void _ZN6S595C33v90Ev();
extern void _ZN6S595C33v91Ev();
extern void _ZN6S595C33v92Ev();
extern void _ZN6S595C33v93Ev();
extern void _ZN6S595C33v94Ev();
extern void _ZN6S595C33v95Ev();
extern void _ZN6S595C33v96Ev();
extern void _ZN6S595C33v97Ev();
extern void _ZN6S595C33v98Ev();
extern void _ZN6S595C33v99Ev();
extern void _ZN6S595C34v100Ev();
extern void _ZN6S595C34v101Ev();
extern void _ZN6S595C34v102Ev();
extern void _ZN6S595C34v103Ev();
extern void _ZN6S595C34v104Ev();
extern void _ZN6S595C34v105Ev();
extern void _ZN6S595C34v106Ev();
extern void _ZN6S595C34v107Ev();
extern void _ZN6S595C34v108Ev();
extern void _ZN6S595C34v109Ev();
extern void _ZN6S595C24v110Ev();
extern void _ZN6S595C24v111Ev();
static  VTBL_ENTRY vtc_S595C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S595C2[0]),
  (VTBL_ENTRY)&_ZN6S595C2D1Ev,
  (VTBL_ENTRY)&_ZN6S595C2D0Ev,
  (VTBL_ENTRY)&_ZN6S595C52v4Ev,
  (VTBL_ENTRY)&_ZN6S595C52v5Ev,
  (VTBL_ENTRY)&_ZN6S595C52v6Ev,
  (VTBL_ENTRY)&_ZN6S595C52v7Ev,
  (VTBL_ENTRY)&_ZN6S595C52v8Ev,
  (VTBL_ENTRY)&_ZN6S595C52v9Ev,
  (VTBL_ENTRY)&_ZN6S595C53v10Ev,
  (VTBL_ENTRY)&_ZN6S595C53v11Ev,
  (VTBL_ENTRY)&_ZN6S595C53v12Ev,
  (VTBL_ENTRY)&_ZN6S595C53v13Ev,
  (VTBL_ENTRY)&_ZN6S595C53v14Ev,
  (VTBL_ENTRY)&_ZN6S595C53v15Ev,
  (VTBL_ENTRY)&_ZN6S595C53v16Ev,
  (VTBL_ENTRY)&_ZN6S595C53v17Ev,
  (VTBL_ENTRY)&_ZN6S595C53v18Ev,
  (VTBL_ENTRY)&_ZN6S595C53v19Ev,
  (VTBL_ENTRY)&_ZN6S595C53v20Ev,
  (VTBL_ENTRY)&_ZN6S595C53v21Ev,
  (VTBL_ENTRY)&_ZN6S595C53v22Ev,
  (VTBL_ENTRY)&_ZN6S595C53v23Ev,
  (VTBL_ENTRY)&_ZN6S595C53v24Ev,
  (VTBL_ENTRY)&_ZN6S595C53v25Ev,
  (VTBL_ENTRY)&_ZN6S595C53v26Ev,
  (VTBL_ENTRY)&_ZN6S595C53v27Ev,
  (VTBL_ENTRY)&_ZN6S595C53v28Ev,
  (VTBL_ENTRY)&_ZN6S595C53v29Ev,
  (VTBL_ENTRY)&_ZN6S595C53v30Ev,
  (VTBL_ENTRY)&_ZN6S595C53v31Ev,
  (VTBL_ENTRY)&_ZN6S595C53v32Ev,
  (VTBL_ENTRY)&_ZN6S595C53v33Ev,
  (VTBL_ENTRY)&_ZN6S595C53v34Ev,
  (VTBL_ENTRY)&_ZN6S595C53v35Ev,
  (VTBL_ENTRY)&_ZN6S595C53v36Ev,
  (VTBL_ENTRY)&_ZN6S595C53v37Ev,
  (VTBL_ENTRY)&_ZN6S595C53v38Ev,
  (VTBL_ENTRY)&_ZN6S595C53v39Ev,
  (VTBL_ENTRY)&_ZN6S595C53v40Ev,
  (VTBL_ENTRY)&_ZN6S595C53v41Ev,
  (VTBL_ENTRY)&_ZN6S595C53v42Ev,
  (VTBL_ENTRY)&_ZN6S595C53v43Ev,
  (VTBL_ENTRY)&_ZN6S595C53v44Ev,
  (VTBL_ENTRY)&_ZN6S595C53v45Ev,
  (VTBL_ENTRY)&_ZN6S595C53v46Ev,
  (VTBL_ENTRY)&_ZN6S595C53v47Ev,
  (VTBL_ENTRY)&_ZN6S595C53v48Ev,
  (VTBL_ENTRY)&_ZN6S595C53v49Ev,
  (VTBL_ENTRY)&_ZN6S595C53v50Ev,
  (VTBL_ENTRY)&_ZN6S595C53v51Ev,
  (VTBL_ENTRY)&_ZN6S595C53v52Ev,
  (VTBL_ENTRY)&_ZN6S595C53v53Ev,
  (VTBL_ENTRY)&_ZN6S595C53v54Ev,
  (VTBL_ENTRY)&_ZN6S595C53v55Ev,
  (VTBL_ENTRY)&_ZN6S595C53v56Ev,
  (VTBL_ENTRY)&_ZN6S595C53v57Ev,
  (VTBL_ENTRY)&_ZN6S595C53v58Ev,
  (VTBL_ENTRY)&_ZN6S595C53v59Ev,
  (VTBL_ENTRY)&_ZN6S595C53v60Ev,
  (VTBL_ENTRY)&_ZN6S595C53v61Ev,
  (VTBL_ENTRY)&_ZN6S595C53v62Ev,
  (VTBL_ENTRY)&_ZN6S595C53v63Ev,
  (VTBL_ENTRY)&_ZN6S595C53v64Ev,
  (VTBL_ENTRY)&_ZN6S595C53v65Ev,
  (VTBL_ENTRY)&_ZN6S595C53v66Ev,
  (VTBL_ENTRY)&_ZN6S595C53v67Ev,
  (VTBL_ENTRY)&_ZN6S595C43v68Ev,
  (VTBL_ENTRY)&_ZN6S595C43v69Ev,
  (VTBL_ENTRY)&_ZN6S595C43v70Ev,
  (VTBL_ENTRY)&_ZN6S595C43v71Ev,
  (VTBL_ENTRY)&_ZN6S595C43v72Ev,
  (VTBL_ENTRY)&_ZN6S595C43v73Ev,
  (VTBL_ENTRY)&_ZN6S595C43v74Ev,
  (VTBL_ENTRY)&_ZN6S595C43v75Ev,
  (VTBL_ENTRY)&_ZN6S595C43v76Ev,
  (VTBL_ENTRY)&_ZN6S595C43v77Ev,
  (VTBL_ENTRY)&_ZN6S595C43v78Ev,
  (VTBL_ENTRY)&_ZN6S595C43v79Ev,
  (VTBL_ENTRY)&_ZN6S595C43v80Ev,
  (VTBL_ENTRY)&_ZN6S595C43v81Ev,
  (VTBL_ENTRY)&_ZN6S595C43v82Ev,
  (VTBL_ENTRY)&_ZN6S595C43v83Ev,
  (VTBL_ENTRY)&_ZN6S595C43v84Ev,
  (VTBL_ENTRY)&_ZN6S595C43v85Ev,
  (VTBL_ENTRY)&_ZN6S595C43v86Ev,
  (VTBL_ENTRY)&_ZN6S595C43v87Ev,
  (VTBL_ENTRY)&_ZN6S595C43v88Ev,
  (VTBL_ENTRY)&_ZN6S595C43v89Ev,
  (VTBL_ENTRY)&_ZN6S595C33v90Ev,
  (VTBL_ENTRY)&_ZN6S595C33v91Ev,
  (VTBL_ENTRY)&_ZN6S595C33v92Ev,
  (VTBL_ENTRY)&_ZN6S595C33v93Ev,
  (VTBL_ENTRY)&_ZN6S595C33v94Ev,
  (VTBL_ENTRY)&_ZN6S595C33v95Ev,
  (VTBL_ENTRY)&_ZN6S595C33v96Ev,
  (VTBL_ENTRY)&_ZN6S595C33v97Ev,
  (VTBL_ENTRY)&_ZN6S595C33v98Ev,
  (VTBL_ENTRY)&_ZN6S595C33v99Ev,
  (VTBL_ENTRY)&_ZN6S595C34v100Ev,
  (VTBL_ENTRY)&_ZN6S595C34v101Ev,
  (VTBL_ENTRY)&_ZN6S595C34v102Ev,
  (VTBL_ENTRY)&_ZN6S595C34v103Ev,
  (VTBL_ENTRY)&_ZN6S595C34v104Ev,
  (VTBL_ENTRY)&_ZN6S595C34v105Ev,
  (VTBL_ENTRY)&_ZN6S595C34v106Ev,
  (VTBL_ENTRY)&_ZN6S595C34v107Ev,
  (VTBL_ENTRY)&_ZN6S595C34v108Ev,
  (VTBL_ENTRY)&_ZN6S595C34v109Ev,
  (VTBL_ENTRY)&_ZN6S595C24v110Ev,
  (VTBL_ENTRY)&_ZN6S595C24v111Ev,
};
extern VTBL_ENTRY _ZTI6S595C2[];
extern  VTBL_ENTRY _ZTV6S595C2[];
Class_Descriptor cd_S595C2 = {  "S595C2", // class name
  bases_S595C2, 3,
  &(vtc_S595C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S595C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S595C2),112, //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  S595C1  : S595C2 {
  int s595c1f0;
  virtual  ~S595C1(); // _ZN6S595C1D1Ev
  virtual void  v1(); // _ZN6S595C12v1Ev
  virtual void  v2(); // _ZN6S595C12v2Ev
  virtual void  v3(); // _ZN6S595C12v3Ev
  S595C1(); // tgen
};
//SIG(1 S595C1) 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]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v110 v111} vd v1 v2 v3 Fi}


 S595C1 ::~S595C1(){ note_dtor("S595C1", this);}
void  S595C1 ::v1(){vfunc_called(this, "_ZN6S595C12v1Ev");}
void  S595C1 ::v2(){vfunc_called(this, "_ZN6S595C12v2Ev");}
void  S595C1 ::v3(){vfunc_called(this, "_ZN6S595C12v3Ev");}
S595C1 ::S595C1(){ note_ctor("S595C1", this);} // tgen

static void Test_S595C1()
{
  extern Class_Descriptor cd_S595C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,51)];
    init_test(&cd_S595C1, buf);
    S595C1 *dp, &lv = *(dp=new (buf) S595C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,200), "sizeof(S595C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S595C1)");
    check_base_class_offset(lv, (S595C5*)(S595C4*)(S595C3*)(S595C2*), 0, "S595C1");
    check_base_class_offset(lv, (S595C4*)(S595C3*)(S595C2*), 0, "S595C1");
    check_base_class_offset(lv, (S595C3*)(S595C2*), 0, "S595C1");
    check_base_class_offset(lv, (S595C2*), 0, "S595C1");
    check_field_offset(lv, s595c1f0, ABISELECT(268,196), "S595C1.s595c1f0");
    test_class_info(&lv, &cd_S595C1);
    dp->~S595C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS595C1(Test_S595C1, "S595C1", ABISELECT(272,200));

#else // __cplusplus

extern void _ZN6S595C1C1Ev();
extern void _ZN6S595C1D1Ev();
Name_Map name_map_S595C1[] = {
  NSPAIR(_ZN6S595C1C1Ev),
  NSPAIR(_ZN6S595C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S595C5;
extern VTBL_ENTRY _ZTI6S595C5[];
extern  VTBL_ENTRY _ZTV6S595C5[];
extern Class_Descriptor cd_S595C4;
extern VTBL_ENTRY _ZTI6S595C4[];
extern  VTBL_ENTRY _ZTV6S595C4[];
extern Class_Descriptor cd_S595C3;
extern VTBL_ENTRY _ZTI6S595C3[];
extern  VTBL_ENTRY _ZTV6S595C3[];
extern Class_Descriptor cd_S595C2;
extern VTBL_ENTRY _ZTI6S595C2[];
extern  VTBL_ENTRY _ZTV6S595C2[];
static Base_Class bases_S595C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S595C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S595C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S595C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S595C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S595C1[];
extern void _ZN6S595C1D1Ev();
extern void _ZN6S595C1D0Ev();
extern void _ZN6S595C52v4Ev();
extern void _ZN6S595C52v5Ev();
extern void _ZN6S595C52v6Ev();
extern void _ZN6S595C52v7Ev();
extern void _ZN6S595C52v8Ev();
extern void _ZN6S595C52v9Ev();
extern void _ZN6S595C53v10Ev();
extern void _ZN6S595C53v11Ev();
extern void _ZN6S595C53v12Ev();
extern void _ZN6S595C53v13Ev();
extern void _ZN6S595C53v14Ev();
extern void _ZN6S595C53v15Ev();
extern void _ZN6S595C53v16Ev();
extern void _ZN6S595C53v17Ev();
extern void _ZN6S595C53v18Ev();
extern void _ZN6S595C53v19Ev();
extern void _ZN6S595C53v20Ev();
extern void _ZN6S595C53v21Ev();
extern void _ZN6S595C53v22Ev();
extern void _ZN6S595C53v23Ev();
extern void _ZN6S595C53v24Ev();
extern void _ZN6S595C53v25Ev();
extern void _ZN6S595C53v26Ev();
extern void _ZN6S595C53v27Ev();
extern void _ZN6S595C53v28Ev();
extern void _ZN6S595C53v29Ev();
extern void _ZN6S595C53v30Ev();
extern void _ZN6S595C53v31Ev();
extern void _ZN6S595C53v32Ev();
extern void _ZN6S595C53v33Ev();
extern void _ZN6S595C53v34Ev();
extern void _ZN6S595C53v35Ev();
extern void _ZN6S595C53v36Ev();
extern void _ZN6S595C53v37Ev();
extern void _ZN6S595C53v38Ev();
extern void _ZN6S595C53v39Ev();
extern void _ZN6S595C53v40Ev();
extern void _ZN6S595C53v41Ev();
extern void _ZN6S595C53v42Ev();
extern void _ZN6S595C53v43Ev();
extern void _ZN6S595C53v44Ev();
extern void _ZN6S595C53v45Ev();
extern void _ZN6S595C53v46Ev();
extern void _ZN6S595C53v47Ev();
extern void _ZN6S595C53v48Ev();
extern void _ZN6S595C53v49Ev();
extern void _ZN6S595C53v50Ev();
extern void _ZN6S595C53v51Ev();
extern void _ZN6S595C53v52Ev();
extern void _ZN6S595C53v53Ev();
extern void _ZN6S595C53v54Ev();
extern void _ZN6S595C53v55Ev();
extern void _ZN6S595C53v56Ev();
extern void _ZN6S595C53v57Ev();
extern void _ZN6S595C53v58Ev();
extern void _ZN6S595C53v59Ev();
extern void _ZN6S595C53v60Ev();
extern void _ZN6S595C53v61Ev();
extern void _ZN6S595C53v62Ev();
extern void _ZN6S595C53v63Ev();
extern void _ZN6S595C53v64Ev();
extern void _ZN6S595C53v65Ev();
extern void _ZN6S595C53v66Ev();
extern void _ZN6S595C53v67Ev();
extern void _ZN6S595C43v68Ev();
extern void _ZN6S595C43v69Ev();
extern void _ZN6S595C43v70Ev();
extern void _ZN6S595C43v71Ev();
extern void _ZN6S595C43v72Ev();
extern void _ZN6S595C43v73Ev();
extern void _ZN6S595C43v74Ev();
extern void _ZN6S595C43v75Ev();
extern void _ZN6S595C43v76Ev();
extern void _ZN6S595C43v77Ev();
extern void _ZN6S595C43v78Ev();
extern void _ZN6S595C43v79Ev();
extern void _ZN6S595C43v80Ev();
extern void _ZN6S595C43v81Ev();
extern void _ZN6S595C43v82Ev();
extern void _ZN6S595C43v83Ev();
extern void _ZN6S595C43v84Ev();
extern void _ZN6S595C43v85Ev();
extern void _ZN6S595C43v86Ev();
extern void _ZN6S595C43v87Ev();
extern void _ZN6S595C43v88Ev();
extern void _ZN6S595C43v89Ev();
extern void _ZN6S595C33v90Ev();
extern void _ZN6S595C33v91Ev();
extern void _ZN6S595C33v92Ev();
extern void _ZN6S595C33v93Ev();
extern void _ZN6S595C33v94Ev();
extern void _ZN6S595C33v95Ev();
extern void _ZN6S595C33v96Ev();
extern void _ZN6S595C33v97Ev();
extern void _ZN6S595C33v98Ev();
extern void _ZN6S595C33v99Ev();
extern void _ZN6S595C34v100Ev();
extern void _ZN6S595C34v101Ev();
extern void _ZN6S595C34v102Ev();
extern void _ZN6S595C34v103Ev();
extern void _ZN6S595C34v104Ev();
extern void _ZN6S595C34v105Ev();
extern void _ZN6S595C34v106Ev();
extern void _ZN6S595C34v107Ev();
extern void _ZN6S595C34v108Ev();
extern void _ZN6S595C34v109Ev();
extern void _ZN6S595C24v110Ev();
extern void _ZN6S595C24v111Ev();
extern void _ZN6S595C12v1Ev();
extern void _ZN6S595C12v2Ev();
extern void _ZN6S595C12v3Ev();
static  VTBL_ENTRY vtc_S595C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S595C1[0]),
  (VTBL_ENTRY)&_ZN6S595C1D1Ev,
  (VTBL_ENTRY)&_ZN6S595C1D0Ev,
  (VTBL_ENTRY)&_ZN6S595C52v4Ev,
  (VTBL_ENTRY)&_ZN6S595C52v5Ev,
  (VTBL_ENTRY)&_ZN6S595C52v6Ev,
  (VTBL_ENTRY)&_ZN6S595C52v7Ev,
  (VTBL_ENTRY)&_ZN6S595C52v8Ev,
  (VTBL_ENTRY)&_ZN6S595C52v9Ev,
  (VTBL_ENTRY)&_ZN6S595C53v10Ev,
  (VTBL_ENTRY)&_ZN6S595C53v11Ev,
  (VTBL_ENTRY)&_ZN6S595C53v12Ev,
  (VTBL_ENTRY)&_ZN6S595C53v13Ev,
  (VTBL_ENTRY)&_ZN6S595C53v14Ev,
  (VTBL_ENTRY)&_ZN6S595C53v15Ev,
  (VTBL_ENTRY)&_ZN6S595C53v16Ev,
  (VTBL_ENTRY)&_ZN6S595C53v17Ev,
  (VTBL_ENTRY)&_ZN6S595C53v18Ev,
  (VTBL_ENTRY)&_ZN6S595C53v19Ev,
  (VTBL_ENTRY)&_ZN6S595C53v20Ev,
  (VTBL_ENTRY)&_ZN6S595C53v21Ev,
  (VTBL_ENTRY)&_ZN6S595C53v22Ev,
  (VTBL_ENTRY)&_ZN6S595C53v23Ev,
  (VTBL_ENTRY)&_ZN6S595C53v24Ev,
  (VTBL_ENTRY)&_ZN6S595C53v25Ev,
  (VTBL_ENTRY)&_ZN6S595C53v26Ev,
  (VTBL_ENTRY)&_ZN6S595C53v27Ev,
  (VTBL_ENTRY)&_ZN6S595C53v28Ev,
  (VTBL_ENTRY)&_ZN6S595C53v29Ev,
  (VTBL_ENTRY)&_ZN6S595C53v30Ev,
  (VTBL_ENTRY)&_ZN6S595C53v31Ev,
  (VTBL_ENTRY)&_ZN6S595C53v32Ev,
  (VTBL_ENTRY)&_ZN6S595C53v33Ev,
  (VTBL_ENTRY)&_ZN6S595C53v34Ev,
  (VTBL_ENTRY)&_ZN6S595C53v35Ev,
  (VTBL_ENTRY)&_ZN6S595C53v36Ev,
  (VTBL_ENTRY)&_ZN6S595C53v37Ev,
  (VTBL_ENTRY)&_ZN6S595C53v38Ev,
  (VTBL_ENTRY)&_ZN6S595C53v39Ev,
  (VTBL_ENTRY)&_ZN6S595C53v40Ev,
  (VTBL_ENTRY)&_ZN6S595C53v41Ev,
  (VTBL_ENTRY)&_ZN6S595C53v42Ev,
  (VTBL_ENTRY)&_ZN6S595C53v43Ev,
  (VTBL_ENTRY)&_ZN6S595C53v44Ev,
  (VTBL_ENTRY)&_ZN6S595C53v45Ev,
  (VTBL_ENTRY)&_ZN6S595C53v46Ev,
  (VTBL_ENTRY)&_ZN6S595C53v47Ev,
  (VTBL_ENTRY)&_ZN6S595C53v48Ev,
  (VTBL_ENTRY)&_ZN6S595C53v49Ev,
  (VTBL_ENTRY)&_ZN6S595C53v50Ev,
  (VTBL_ENTRY)&_ZN6S595C53v51Ev,
  (VTBL_ENTRY)&_ZN6S595C53v52Ev,
  (VTBL_ENTRY)&_ZN6S595C53v53Ev,
  (VTBL_ENTRY)&_ZN6S595C53v54Ev,
  (VTBL_ENTRY)&_ZN6S595C53v55Ev,
  (VTBL_ENTRY)&_ZN6S595C53v56Ev,
  (VTBL_ENTRY)&_ZN6S595C53v57Ev,
  (VTBL_ENTRY)&_ZN6S595C53v58Ev,
  (VTBL_ENTRY)&_ZN6S595C53v59Ev,
  (VTBL_ENTRY)&_ZN6S595C53v60Ev,
  (VTBL_ENTRY)&_ZN6S595C53v61Ev,
  (VTBL_ENTRY)&_ZN6S595C53v62Ev,
  (VTBL_ENTRY)&_ZN6S595C53v63Ev,
  (VTBL_ENTRY)&_ZN6S595C53v64Ev,
  (VTBL_ENTRY)&_ZN6S595C53v65Ev,
  (VTBL_ENTRY)&_ZN6S595C53v66Ev,
  (VTBL_ENTRY)&_ZN6S595C53v67Ev,
  (VTBL_ENTRY)&_ZN6S595C43v68Ev,
  (VTBL_ENTRY)&_ZN6S595C43v69Ev,
  (VTBL_ENTRY)&_ZN6S595C43v70Ev,
  (VTBL_ENTRY)&_ZN6S595C43v71Ev,
  (VTBL_ENTRY)&_ZN6S595C43v72Ev,
  (VTBL_ENTRY)&_ZN6S595C43v73Ev,
  (VTBL_ENTRY)&_ZN6S595C43v74Ev,
  (VTBL_ENTRY)&_ZN6S595C43v75Ev,
  (VTBL_ENTRY)&_ZN6S595C43v76Ev,
  (VTBL_ENTRY)&_ZN6S595C43v77Ev,
  (VTBL_ENTRY)&_ZN6S595C43v78Ev,
  (VTBL_ENTRY)&_ZN6S595C43v79Ev,
  (VTBL_ENTRY)&_ZN6S595C43v80Ev,
  (VTBL_ENTRY)&_ZN6S595C43v81Ev,
  (VTBL_ENTRY)&_ZN6S595C43v82Ev,
  (VTBL_ENTRY)&_ZN6S595C43v83Ev,
  (VTBL_ENTRY)&_ZN6S595C43v84Ev,
  (VTBL_ENTRY)&_ZN6S595C43v85Ev,
  (VTBL_ENTRY)&_ZN6S595C43v86Ev,
  (VTBL_ENTRY)&_ZN6S595C43v87Ev,
  (VTBL_ENTRY)&_ZN6S595C43v88Ev,
  (VTBL_ENTRY)&_ZN6S595C43v89Ev,
  (VTBL_ENTRY)&_ZN6S595C33v90Ev,
  (VTBL_ENTRY)&_ZN6S595C33v91Ev,
  (VTBL_ENTRY)&_ZN6S595C33v92Ev,
  (VTBL_ENTRY)&_ZN6S595C33v93Ev,
  (VTBL_ENTRY)&_ZN6S595C33v94Ev,
  (VTBL_ENTRY)&_ZN6S595C33v95Ev,
  (VTBL_ENTRY)&_ZN6S595C33v96Ev,
  (VTBL_ENTRY)&_ZN6S595C33v97Ev,
  (VTBL_ENTRY)&_ZN6S595C33v98Ev,
  (VTBL_ENTRY)&_ZN6S595C33v99Ev,
  (VTBL_ENTRY)&_ZN6S595C34v100Ev,
  (VTBL_ENTRY)&_ZN6S595C34v101Ev,
  (VTBL_ENTRY)&_ZN6S595C34v102Ev,
  (VTBL_ENTRY)&_ZN6S595C34v103Ev,
  (VTBL_ENTRY)&_ZN6S595C34v104Ev,
  (VTBL_ENTRY)&_ZN6S595C34v105Ev,
  (VTBL_ENTRY)&_ZN6S595C34v106Ev,
  (VTBL_ENTRY)&_ZN6S595C34v107Ev,
  (VTBL_ENTRY)&_ZN6S595C34v108Ev,
  (VTBL_ENTRY)&_ZN6S595C34v109Ev,
  (VTBL_ENTRY)&_ZN6S595C24v110Ev,
  (VTBL_ENTRY)&_ZN6S595C24v111Ev,
  (VTBL_ENTRY)&_ZN6S595C12v1Ev,
  (VTBL_ENTRY)&_ZN6S595C12v2Ev,
  (VTBL_ENTRY)&_ZN6S595C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S595C1[];
extern  VTBL_ENTRY _ZTV6S595C1[];
Class_Descriptor cd_S595C1 = {  "S595C1", // class name
  bases_S595C1, 4,
  &(vtc_S595C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,200), // object size
  NSPAIRA(_ZTI6S595C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S595C1),115, //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  S596C5  {
  int s596c5f0;
  __tsi64 s596c5f1;
  void *s596c5f2[4];
  int s596c5f3[2];
  void *s596c5f4;
  ::S3221C4_nt s596c5f5;
  void *s596c5f6[2];
  virtual  ~S596C5(); // _ZN6S596C5D1Ev
  virtual void  v4(); // _ZN6S596C52v4Ev
  virtual void  v5(); // _ZN6S596C52v5Ev
  virtual void  v6(); // _ZN6S596C52v6Ev
  virtual void  v7(); // _ZN6S596C52v7Ev
  virtual void  v8(); // _ZN6S596C52v8Ev
  virtual void  v9(); // _ZN6S596C52v9Ev
  virtual void  v10(); // _ZN6S596C53v10Ev
  virtual void  v11(); // _ZN6S596C53v11Ev
  virtual void  v12(); // _ZN6S596C53v12Ev
  virtual void  v13(); // _ZN6S596C53v13Ev
  virtual void  v14(); // _ZN6S596C53v14Ev
  virtual void  v15(); // _ZN6S596C53v15Ev
  virtual void  v16(); // _ZN6S596C53v16Ev
  virtual void  v17(); // _ZN6S596C53v17Ev
  virtual void  v18(); // _ZN6S596C53v18Ev
  virtual void  v19(); // _ZN6S596C53v19Ev
  virtual void  v20(); // _ZN6S596C53v20Ev
  virtual void  v21(); // _ZN6S596C53v21Ev
  virtual void  v22(); // _ZN6S596C53v22Ev
  virtual void  v23(); // _ZN6S596C53v23Ev
  virtual void  v24(); // _ZN6S596C53v24Ev
  virtual void  v25(); // _ZN6S596C53v25Ev
  virtual void  v26(); // _ZN6S596C53v26Ev
  virtual void  v27(); // _ZN6S596C53v27Ev
  virtual void  v28(); // _ZN6S596C53v28Ev
  virtual void  v29(); // _ZN6S596C53v29Ev
  virtual void  v30(); // _ZN6S596C53v30Ev
  virtual void  v31(); // _ZN6S596C53v31Ev
  virtual void  v32(); // _ZN6S596C53v32Ev
  virtual void  v33(); // _ZN6S596C53v33Ev
  virtual void  v34(); // _ZN6S596C53v34Ev
  virtual void  v35(); // _ZN6S596C53v35Ev
  virtual void  v36(); // _ZN6S596C53v36Ev
  virtual void  v37(); // _ZN6S596C53v37Ev
  virtual void  v38(); // _ZN6S596C53v38Ev
  virtual void  v39(); // _ZN6S596C53v39Ev
  virtual void  v40(); // _ZN6S596C53v40Ev
  virtual void  v41(); // _ZN6S596C53v41Ev
  virtual void  v42(); // _ZN6S596C53v42Ev
  virtual void  v43(); // _ZN6S596C53v43Ev
  virtual void  v44(); // _ZN6S596C53v44Ev
  virtual void  v45(); // _ZN6S596C53v45Ev
  virtual void  v46(); // _ZN6S596C53v46Ev
  virtual void  v47(); // _ZN6S596C53v47Ev
  virtual void  v48(); // _ZN6S596C53v48Ev
  virtual void  v49(); // _ZN6S596C53v49Ev
  virtual void  v50(); // _ZN6S596C53v50Ev
  virtual void  v51(); // _ZN6S596C53v51Ev
  virtual void  v52(); // _ZN6S596C53v52Ev
  virtual void  v53(); // _ZN6S596C53v53Ev
  virtual void  v54(); // _ZN6S596C53v54Ev
  virtual void  v55(); // _ZN6S596C53v55Ev
  virtual void  v56(); // _ZN6S596C53v56Ev
  virtual void  v57(); // _ZN6S596C53v57Ev
  virtual void  v58(); // _ZN6S596C53v58Ev
  virtual void  v59(); // _ZN6S596C53v59Ev
  virtual void  v60(); // _ZN6S596C53v60Ev
  virtual void  v61(); // _ZN6S596C53v61Ev
  virtual void  v62(); // _ZN6S596C53v62Ev
  virtual void  v63(); // _ZN6S596C53v63Ev
  virtual void  v64(); // _ZN6S596C53v64Ev
  virtual void  v65(); // _ZN6S596C53v65Ev
  virtual void  v66(); // _ZN6S596C53v66Ev
  virtual void  v67(); // _ZN6S596C53v67Ev
  S596C5(); // tgen
};
//SIG(-1 S596C5) 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]}


 S596C5 ::~S596C5(){ note_dtor("S596C5", this);}
void  S596C5 ::v4(){vfunc_called(this, "_ZN6S596C52v4Ev");}
void  S596C5 ::v5(){vfunc_called(this, "_ZN6S596C52v5Ev");}
void  S596C5 ::v6(){vfunc_called(this, "_ZN6S596C52v6Ev");}
void  S596C5 ::v7(){vfunc_called(this, "_ZN6S596C52v7Ev");}
void  S596C5 ::v8(){vfunc_called(this, "_ZN6S596C52v8Ev");}
void  S596C5 ::v9(){vfunc_called(this, "_ZN6S596C52v9Ev");}
void  S596C5 ::v10(){vfunc_called(this, "_ZN6S596C53v10Ev");}
void  S596C5 ::v11(){vfunc_called(this, "_ZN6S596C53v11Ev");}
void  S596C5 ::v12(){vfunc_called(this, "_ZN6S596C53v12Ev");}
void  S596C5 ::v13(){vfunc_called(this, "_ZN6S596C53v13Ev");}
void  S596C5 ::v14(){vfunc_called(this, "_ZN6S596C53v14Ev");}
void  S596C5 ::v15(){vfunc_called(this, "_ZN6S596C53v15Ev");}
void  S596C5 ::v16(){vfunc_called(this, "_ZN6S596C53v16Ev");}
void  S596C5 ::v17(){vfunc_called(this, "_ZN6S596C53v17Ev");}
void  S596C5 ::v18(){vfunc_called(this, "_ZN6S596C53v18Ev");}
void  S596C5 ::v19(){vfunc_called(this, "_ZN6S596C53v19Ev");}
void  S596C5 ::v20(){vfunc_called(this, "_ZN6S596C53v20Ev");}
void  S596C5 ::v21(){vfunc_called(this, "_ZN6S596C53v21Ev");}
void  S596C5 ::v22(){vfunc_called(this, "_ZN6S596C53v22Ev");}
void  S596C5 ::v23(){vfunc_called(this, "_ZN6S596C53v23Ev");}
void  S596C5 ::v24(){vfunc_called(this, "_ZN6S596C53v24Ev");}
void  S596C5 ::v25(){vfunc_called(this, "_ZN6S596C53v25Ev");}
void  S596C5 ::v26(){vfunc_called(this, "_ZN6S596C53v26Ev");}
void  S596C5 ::v27(){vfunc_called(this, "_ZN6S596C53v27Ev");}
void  S596C5 ::v28(){vfunc_called(this, "_ZN6S596C53v28Ev");}
void  S596C5 ::v29(){vfunc_called(this, "_ZN6S596C53v29Ev");}
void  S596C5 ::v30(){vfunc_called(this, "_ZN6S596C53v30Ev");}
void  S596C5 ::v31(){vfunc_called(this, "_ZN6S596C53v31Ev");}
void  S596C5 ::v32(){vfunc_called(this, "_ZN6S596C53v32Ev");}
void  S596C5 ::v33(){vfunc_called(this, "_ZN6S596C53v33Ev");}
void  S596C5 ::v34(){vfunc_called(this, "_ZN6S596C53v34Ev");}
void  S596C5 ::v35(){vfunc_called(this, "_ZN6S596C53v35Ev");}
void  S596C5 ::v36(){vfunc_called(this, "_ZN6S596C53v36Ev");}
void  S596C5 ::v37(){vfunc_called(this, "_ZN6S596C53v37Ev");}
void  S596C5 ::v38(){vfunc_called(this, "_ZN6S596C53v38Ev");}
void  S596C5 ::v39(){vfunc_called(this, "_ZN6S596C53v39Ev");}
void  S596C5 ::v40(){vfunc_called(this, "_ZN6S596C53v40Ev");}
void  S596C5 ::v41(){vfunc_called(this, "_ZN6S596C53v41Ev");}
void  S596C5 ::v42(){vfunc_called(this, "_ZN6S596C53v42Ev");}
void  S596C5 ::v43(){vfunc_called(this, "_ZN6S596C53v43Ev");}
void  S596C5 ::v44(){vfunc_called(this, "_ZN6S596C53v44Ev");}
void  S596C5 ::v45(){vfunc_called(this, "_ZN6S596C53v45Ev");}
void  S596C5 ::v46(){vfunc_called(this, "_ZN6S596C53v46Ev");}
void  S596C5 ::v47(){vfunc_called(this, "_ZN6S596C53v47Ev");}
void  S596C5 ::v48(){vfunc_called(this, "_ZN6S596C53v48Ev");}
void  S596C5 ::v49(){vfunc_called(this, "_ZN6S596C53v49Ev");}
void  S596C5 ::v50(){vfunc_called(this, "_ZN6S596C53v50Ev");}
void  S596C5 ::v51(){vfunc_called(this, "_ZN6S596C53v51Ev");}
void  S596C5 ::v52(){vfunc_called(this, "_ZN6S596C53v52Ev");}
void  S596C5 ::v53(){vfunc_called(this, "_ZN6S596C53v53Ev");}
void  S596C5 ::v54(){vfunc_called(this, "_ZN6S596C53v54Ev");}
void  S596C5 ::v55(){vfunc_called(this, "_ZN6S596C53v55Ev");}
void  S596C5 ::v56(){vfunc_called(this, "_ZN6S596C53v56Ev");}
void  S596C5 ::v57(){vfunc_called(this, "_ZN6S596C53v57Ev");}
void  S596C5 ::v58(){vfunc_called(this, "_ZN6S596C53v58Ev");}
void  S596C5 ::v59(){vfunc_called(this, "_ZN6S596C53v59Ev");}
void  S596C5 ::v60(){vfunc_called(this, "_ZN6S596C53v60Ev");}
void  S596C5 ::v61(){vfunc_called(this, "_ZN6S596C53v61Ev");}
void  S596C5 ::v62(){vfunc_called(this, "_ZN6S596C53v62Ev");}
void  S596C5 ::v63(){vfunc_called(this, "_ZN6S596C53v63Ev");}
void  S596C5 ::v64(){vfunc_called(this, "_ZN6S596C53v64Ev");}
void  S596C5 ::v65(){vfunc_called(this, "_ZN6S596C53v65Ev");}
void  S596C5 ::v66(){vfunc_called(this, "_ZN6S596C53v66Ev");}
void  S596C5 ::v67(){vfunc_called(this, "_ZN6S596C53v67Ev");}
S596C5 ::S596C5(){ note_ctor("S596C5", this);} // tgen

static void Test_S596C5()
{
  extern Class_Descriptor cd_S596C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S596C5, buf);
    S596C5 *dp, &lv = *(dp=new (buf) S596C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S596C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S596C5)");
    check_field_offset(lv, s596c5f0, ABISELECT(8,4), "S596C5.s596c5f0");
    check_field_offset(lv, s596c5f1, ABISELECT(16,8), "S596C5.s596c5f1");
    check_field_offset(lv, s596c5f2, ABISELECT(24,16), "S596C5.s596c5f2");
    check_field_offset(lv, s596c5f3, ABISELECT(56,32), "S596C5.s596c5f3");
    check_field_offset(lv, s596c5f4, ABISELECT(64,40), "S596C5.s596c5f4");
    check_field_offset(lv, s596c5f5, ABISELECT(72,44), "S596C5.s596c5f5");
    check_field_offset(lv, s596c5f6, ABISELECT(80,52), "S596C5.s596c5f6");
    test_class_info(&lv, &cd_S596C5);
    dp->~S596C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS596C5(Test_S596C5, "S596C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S596C5C1Ev();
extern void _ZN6S596C5D1Ev();
Name_Map name_map_S596C5[] = {
  NSPAIR(_ZN6S596C5C1Ev),
  NSPAIR(_ZN6S596C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S596C5[];
extern void _ZN6S596C5D1Ev();
extern void _ZN6S596C5D0Ev();
extern void _ZN6S596C52v4Ev();
extern void _ZN6S596C52v5Ev();
extern void _ZN6S596C52v6Ev();
extern void _ZN6S596C52v7Ev();
extern void _ZN6S596C52v8Ev();
extern void _ZN6S596C52v9Ev();
extern void _ZN6S596C53v10Ev();
extern void _ZN6S596C53v11Ev();
extern void _ZN6S596C53v12Ev();
extern void _ZN6S596C53v13Ev();
extern void _ZN6S596C53v14Ev();
extern void _ZN6S596C53v15Ev();
extern void _ZN6S596C53v16Ev();
extern void _ZN6S596C53v17Ev();
extern void _ZN6S596C53v18Ev();
extern void _ZN6S596C53v19Ev();
extern void _ZN6S596C53v20Ev();
extern void _ZN6S596C53v21Ev();
extern void _ZN6S596C53v22Ev();
extern void _ZN6S596C53v23Ev();
extern void _ZN6S596C53v24Ev();
extern void _ZN6S596C53v25Ev();
extern void _ZN6S596C53v26Ev();
extern void _ZN6S596C53v27Ev();
extern void _ZN6S596C53v28Ev();
extern void _ZN6S596C53v29Ev();
extern void _ZN6S596C53v30Ev();
extern void _ZN6S596C53v31Ev();
extern void _ZN6S596C53v32Ev();
extern void _ZN6S596C53v33Ev();
extern void _ZN6S596C53v34Ev();
extern void _ZN6S596C53v35Ev();
extern void _ZN6S596C53v36Ev();
extern void _ZN6S596C53v37Ev();
extern void _ZN6S596C53v38Ev();
extern void _ZN6S596C53v39Ev();
extern void _ZN6S596C53v40Ev();
extern void _ZN6S596C53v41Ev();
extern void _ZN6S596C53v42Ev();
extern void _ZN6S596C53v43Ev();
extern void _ZN6S596C53v44Ev();
extern void _ZN6S596C53v45Ev();
extern void _ZN6S596C53v46Ev();
extern void _ZN6S596C53v47Ev();
extern void _ZN6S596C53v48Ev();
extern void _ZN6S596C53v49Ev();
extern void _ZN6S596C53v50Ev();
extern void _ZN6S596C53v51Ev();
extern void _ZN6S596C53v52Ev();
extern void _ZN6S596C53v53Ev();
extern void _ZN6S596C53v54Ev();
extern void _ZN6S596C53v55Ev();
extern void _ZN6S596C53v56Ev();
extern void _ZN6S596C53v57Ev();
extern void _ZN6S596C53v58Ev();
extern void _ZN6S596C53v59Ev();
extern void _ZN6S596C53v60Ev();
extern void _ZN6S596C53v61Ev();
extern void _ZN6S596C53v62Ev();
extern void _ZN6S596C53v63Ev();
extern void _ZN6S596C53v64Ev();
extern void _ZN6S596C53v65Ev();
extern void _ZN6S596C53v66Ev();
extern void _ZN6S596C53v67Ev();
static  VTBL_ENTRY vtc_S596C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S596C5[0]),
  (VTBL_ENTRY)&_ZN6S596C5D1Ev,
  (VTBL_ENTRY)&_ZN6S596C5D0Ev,
  (VTBL_ENTRY)&_ZN6S596C52v4Ev,
  (VTBL_ENTRY)&_ZN6S596C52v5Ev,
  (VTBL_ENTRY)&_ZN6S596C52v6Ev,
  (VTBL_ENTRY)&_ZN6S596C52v7Ev,
  (VTBL_ENTRY)&_ZN6S596C52v8Ev,
  (VTBL_ENTRY)&_ZN6S596C52v9Ev,
  (VTBL_ENTRY)&_ZN6S596C53v10Ev,
  (VTBL_ENTRY)&_ZN6S596C53v11Ev,
  (VTBL_ENTRY)&_ZN6S596C53v12Ev,
  (VTBL_ENTRY)&_ZN6S596C53v13Ev,
  (VTBL_ENTRY)&_ZN6S596C53v14Ev,
  (VTBL_ENTRY)&_ZN6S596C53v15Ev,
  (VTBL_ENTRY)&_ZN6S596C53v16Ev,
  (VTBL_ENTRY)&_ZN6S596C53v17Ev,
  (VTBL_ENTRY)&_ZN6S596C53v18Ev,
  (VTBL_ENTRY)&_ZN6S596C53v19Ev,
  (VTBL_ENTRY)&_ZN6S596C53v20Ev,
  (VTBL_ENTRY)&_ZN6S596C53v21Ev,
  (VTBL_ENTRY)&_ZN6S596C53v22Ev,
  (VTBL_ENTRY)&_ZN6S596C53v23Ev,
  (VTBL_ENTRY)&_ZN6S596C53v24Ev,
  (VTBL_ENTRY)&_ZN6S596C53v25Ev,
  (VTBL_ENTRY)&_ZN6S596C53v26Ev,
  (VTBL_ENTRY)&_ZN6S596C53v27Ev,
  (VTBL_ENTRY)&_ZN6S596C53v28Ev,
  (VTBL_ENTRY)&_ZN6S596C53v29Ev,
  (VTBL_ENTRY)&_ZN6S596C53v30Ev,
  (VTBL_ENTRY)&_ZN6S596C53v31Ev,
  (VTBL_ENTRY)&_ZN6S596C53v32Ev,
  (VTBL_ENTRY)&_ZN6S596C53v33Ev,
  (VTBL_ENTRY)&_ZN6S596C53v34Ev,
  (VTBL_ENTRY)&_ZN6S596C53v35Ev,
  (VTBL_ENTRY)&_ZN6S596C53v36Ev,
  (VTBL_ENTRY)&_ZN6S596C53v37Ev,
  (VTBL_ENTRY)&_ZN6S596C53v38Ev,
  (VTBL_ENTRY)&_ZN6S596C53v39Ev,
  (VTBL_ENTRY)&_ZN6S596C53v40Ev,
  (VTBL_ENTRY)&_ZN6S596C53v41Ev,
  (VTBL_ENTRY)&_ZN6S596C53v42Ev,
  (VTBL_ENTRY)&_ZN6S596C53v43Ev,
  (VTBL_ENTRY)&_ZN6S596C53v44Ev,
  (VTBL_ENTRY)&_ZN6S596C53v45Ev,
  (VTBL_ENTRY)&_ZN6S596C53v46Ev,
  (VTBL_ENTRY)&_ZN6S596C53v47Ev,
  (VTBL_ENTRY)&_ZN6S596C53v48Ev,
  (VTBL_ENTRY)&_ZN6S596C53v49Ev,
  (VTBL_ENTRY)&_ZN6S596C53v50Ev,
  (VTBL_ENTRY)&_ZN6S596C53v51Ev,
  (VTBL_ENTRY)&_ZN6S596C53v52Ev,
  (VTBL_ENTRY)&_ZN6S596C53v53Ev,
  (VTBL_ENTRY)&_ZN6S596C53v54Ev,
  (VTBL_ENTRY)&_ZN6S596C53v55Ev,
  (VTBL_ENTRY)&_ZN6S596C53v56Ev,
  (VTBL_ENTRY)&_ZN6S596C53v57Ev,
  (VTBL_ENTRY)&_ZN6S596C53v58Ev,
  (VTBL_ENTRY)&_ZN6S596C53v59Ev,
  (VTBL_ENTRY)&_ZN6S596C53v60Ev,
  (VTBL_ENTRY)&_ZN6S596C53v61Ev,
  (VTBL_ENTRY)&_ZN6S596C53v62Ev,
  (VTBL_ENTRY)&_ZN6S596C53v63Ev,
  (VTBL_ENTRY)&_ZN6S596C53v64Ev,
  (VTBL_ENTRY)&_ZN6S596C53v65Ev,
  (VTBL_ENTRY)&_ZN6S596C53v66Ev,
  (VTBL_ENTRY)&_ZN6S596C53v67Ev,
};
extern VTBL_ENTRY _ZTI6S596C5[];
extern  VTBL_ENTRY _ZTV6S596C5[];
Class_Descriptor cd_S596C5 = {  "S596C5", // class name
  0,0,//no base classes
  &(vtc_S596C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S596C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S596C5),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  S596C4  : S596C5 {
  int s596c4f0[2];
  void *s596c4f1;
  int s596c4f2[2];
  ::S239C8_nt s596c4f3;
  ::S239C8_nt s596c4f4;
  ::S239C12_nt s596c4f5;
  ::S239C8_nt s596c4f6;
  unsigned int s596c4f7:1;
  unsigned int s596c4f8:1;
  unsigned int s596c4f9:1;
  unsigned int s596c4f10:1;
  unsigned int s596c4f11:1;
  int s596c4f12[2];
  virtual  ~S596C4(); // _ZN6S596C4D1Ev
  virtual void  v68(); // _ZN6S596C43v68Ev
  virtual void  v69(); // _ZN6S596C43v69Ev
  virtual void  v70(); // _ZN6S596C43v70Ev
  virtual void  v71(); // _ZN6S596C43v71Ev
  virtual void  v72(); // _ZN6S596C43v72Ev
  virtual void  v73(); // _ZN6S596C43v73Ev
  virtual void  v74(); // _ZN6S596C43v74Ev
  virtual void  v75(); // _ZN6S596C43v75Ev
  virtual void  v76(); // _ZN6S596C43v76Ev
  virtual void  v77(); // _ZN6S596C43v77Ev
  virtual void  v78(); // _ZN6S596C43v78Ev
  virtual void  v79(); // _ZN6S596C43v79Ev
  virtual void  v80(); // _ZN6S596C43v80Ev
  virtual void  v81(); // _ZN6S596C43v81Ev
  virtual void  v82(); // _ZN6S596C43v82Ev
  virtual void  v83(); // _ZN6S596C43v83Ev
  virtual void  v84(); // _ZN6S596C43v84Ev
  virtual void  v85(); // _ZN6S596C43v85Ev
  virtual void  v86(); // _ZN6S596C43v86Ev
  virtual void  v87(); // _ZN6S596C43v87Ev
  virtual void  v88(); // _ZN6S596C43v88Ev
  virtual void  v89(); // _ZN6S596C43v89Ev
  S596C4(); // tgen
};
//SIG(-1 S596C4) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S596C4 ::~S596C4(){ note_dtor("S596C4", this);}
void  S596C4 ::v68(){vfunc_called(this, "_ZN6S596C43v68Ev");}
void  S596C4 ::v69(){vfunc_called(this, "_ZN6S596C43v69Ev");}
void  S596C4 ::v70(){vfunc_called(this, "_ZN6S596C43v70Ev");}
void  S596C4 ::v71(){vfunc_called(this, "_ZN6S596C43v71Ev");}
void  S596C4 ::v72(){vfunc_called(this, "_ZN6S596C43v72Ev");}
void  S596C4 ::v73(){vfunc_called(this, "_ZN6S596C43v73Ev");}
void  S596C4 ::v74(){vfunc_called(this, "_ZN6S596C43v74Ev");}
void  S596C4 ::v75(){vfunc_called(this, "_ZN6S596C43v75Ev");}
void  S596C4 ::v76(){vfunc_called(this, "_ZN6S596C43v76Ev");}
void  S596C4 ::v77(){vfunc_called(this, "_ZN6S596C43v77Ev");}
void  S596C4 ::v78(){vfunc_called(this, "_ZN6S596C43v78Ev");}
void  S596C4 ::v79(){vfunc_called(this, "_ZN6S596C43v79Ev");}
void  S596C4 ::v80(){vfunc_called(this, "_ZN6S596C43v80Ev");}
void  S596C4 ::v81(){vfunc_called(this, "_ZN6S596C43v81Ev");}
void  S596C4 ::v82(){vfunc_called(this, "_ZN6S596C43v82Ev");}
void  S596C4 ::v83(){vfunc_called(this, "_ZN6S596C43v83Ev");}
void  S596C4 ::v84(){vfunc_called(this, "_ZN6S596C43v84Ev");}
void  S596C4 ::v85(){vfunc_called(this, "_ZN6S596C43v85Ev");}
void  S596C4 ::v86(){vfunc_called(this, "_ZN6S596C43v86Ev");}
void  S596C4 ::v87(){vfunc_called(this, "_ZN6S596C43v87Ev");}
void  S596C4 ::v88(){vfunc_called(this, "_ZN6S596C43v88Ev");}
void  S596C4 ::v89(){vfunc_called(this, "_ZN6S596C43v89Ev");}
S596C4 ::S596C4(){ note_ctor("S596C4", this);} // tgen

static void Test_S596C4()
{
  extern Class_Descriptor cd_S596C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S596C4, buf);
    S596C4 *dp, &lv = *(dp=new (buf) S596C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S596C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S596C4)");
    check_base_class_offset(lv, (S596C5*), 0, "S596C4");
    check_field_offset(lv, s596c4f0, ABISELECT(96,60), "S596C4.s596c4f0");
    check_field_offset(lv, s596c4f1, ABISELECT(104,68), "S596C4.s596c4f1");
    check_field_offset(lv, s596c4f2, ABISELECT(112,72), "S596C4.s596c4f2");
    check_field_offset(lv, s596c4f3, ABISELECT(120,80), "S596C4.s596c4f3");
    check_field_offset(lv, s596c4f4, ABISELECT(136,92), "S596C4.s596c4f4");
    check_field_offset(lv, s596c4f5, ABISELECT(152,104), "S596C4.s596c4f5");
    check_field_offset(lv, s596c4f6, ABISELECT(160,108), "S596C4.s596c4f6");
    set_bf_and_test(lv, s596c4f7, ABISELECT(176,120), 0, 1, 1, "S596C4");
    set_bf_and_test(lv, s596c4f8, ABISELECT(176,120), 1, 1, 1, "S596C4");
    set_bf_and_test(lv, s596c4f9, ABISELECT(176,120), 2, 1, 1, "S596C4");
    set_bf_and_test(lv, s596c4f10, ABISELECT(176,120), 3, 1, 1, "S596C4");
    set_bf_and_test(lv, s596c4f11, ABISELECT(176,120), 4, 1, 1, "S596C4");
    check_field_offset(lv, s596c4f12, ABISELECT(180,124), "S596C4.s596c4f12");
    test_class_info(&lv, &cd_S596C4);
    dp->~S596C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS596C4(Test_S596C4, "S596C4", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S596C4C1Ev();
extern void _ZN6S596C4D1Ev();
Name_Map name_map_S596C4[] = {
  NSPAIR(_ZN6S596C4C1Ev),
  NSPAIR(_ZN6S596C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S596C5;
extern VTBL_ENTRY _ZTI6S596C5[];
extern  VTBL_ENTRY _ZTV6S596C5[];
static Base_Class bases_S596C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S596C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S596C4[];
extern void _ZN6S596C4D1Ev();
extern void _ZN6S596C4D0Ev();
extern void _ZN6S596C52v4Ev();
extern void _ZN6S596C52v5Ev();
extern void _ZN6S596C52v6Ev();
extern void _ZN6S596C52v7Ev();
extern void _ZN6S596C52v8Ev();
extern void _ZN6S596C52v9Ev();
extern void _ZN6S596C53v10Ev();
extern void _ZN6S596C53v11Ev();
extern void _ZN6S596C53v12Ev();
extern void _ZN6S596C53v13Ev();
extern void _ZN6S596C53v14Ev();
extern void _ZN6S596C53v15Ev();
extern void _ZN6S596C53v16Ev();
extern void _ZN6S596C53v17Ev();
extern void _ZN6S596C53v18Ev();
extern void _ZN6S596C53v19Ev();
extern void _ZN6S596C53v20Ev();
extern void _ZN6S596C53v21Ev();
extern void _ZN6S596C53v22Ev();
extern void _ZN6S596C53v23Ev();
extern void _ZN6S596C53v24Ev();
extern void _ZN6S596C53v25Ev();
extern void _ZN6S596C53v26Ev();
extern void _ZN6S596C53v27Ev();
extern void _ZN6S596C53v28Ev();
extern void _ZN6S596C53v29Ev();
extern void _ZN6S596C53v30Ev();
extern void _ZN6S596C53v31Ev();
extern void _ZN6S596C53v32Ev();
extern void _ZN6S596C53v33Ev();
extern void _ZN6S596C53v34Ev();
extern void _ZN6S596C53v35Ev();
extern void _ZN6S596C53v36Ev();
extern void _ZN6S596C53v37Ev();
extern void _ZN6S596C53v38Ev();
extern void _ZN6S596C53v39Ev();
extern void _ZN6S596C53v40Ev();
extern void _ZN6S596C53v41Ev();
extern void _ZN6S596C53v42Ev();
extern void _ZN6S596C53v43Ev();
extern void _ZN6S596C53v44Ev();
extern void _ZN6S596C53v45Ev();
extern void _ZN6S596C53v46Ev();
extern void _ZN6S596C53v47Ev();
extern void _ZN6S596C53v48Ev();
extern void _ZN6S596C53v49Ev();
extern void _ZN6S596C53v50Ev();
extern void _ZN6S596C53v51Ev();
extern void _ZN6S596C53v52Ev();
extern void _ZN6S596C53v53Ev();
extern void _ZN6S596C53v54Ev();
extern void _ZN6S596C53v55Ev();
extern void _ZN6S596C53v56Ev();
extern void _ZN6S596C53v57Ev();
extern void _ZN6S596C53v58Ev();
extern void _ZN6S596C53v59Ev();
extern void _ZN6S596C53v60Ev();
extern void _ZN6S596C53v61Ev();
extern void _ZN6S596C53v62Ev();
extern void _ZN6S596C53v63Ev();
extern void _ZN6S596C53v64Ev();
extern void _ZN6S596C53v65Ev();
extern void _ZN6S596C53v66Ev();
extern void _ZN6S596C53v67Ev();
extern void _ZN6S596C43v68Ev();
extern void _ZN6S596C43v69Ev();
extern void _ZN6S596C43v70Ev();
extern void _ZN6S596C43v71Ev();
extern void _ZN6S596C43v72Ev();
extern void _ZN6S596C43v73Ev();
extern void _ZN6S596C43v74Ev();
extern void _ZN6S596C43v75Ev();
extern void _ZN6S596C43v76Ev();
extern void _ZN6S596C43v77Ev();
extern void _ZN6S596C43v78Ev();
extern void _ZN6S596C43v79Ev();
extern void _ZN6S596C43v80Ev();
extern void _ZN6S596C43v81Ev();
extern void _ZN6S596C43v82Ev();
extern void _ZN6S596C43v83Ev();
extern void _ZN6S596C43v84Ev();
extern void _ZN6S596C43v85Ev();
extern void _ZN6S596C43v86Ev();
extern void _ZN6S596C43v87Ev();
extern void _ZN6S596C43v88Ev();
extern void _ZN6S596C43v89Ev();
static  VTBL_ENTRY vtc_S596C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S596C4[0]),
  (VTBL_ENTRY)&_ZN6S596C4D1Ev,
  (VTBL_ENTRY)&_ZN6S596C4D0Ev,
  (VTBL_ENTRY)&_ZN6S596C52v4Ev,
  (VTBL_ENTRY)&_ZN6S596C52v5Ev,
  (VTBL_ENTRY)&_ZN6S596C52v6Ev,
  (VTBL_ENTRY)&_ZN6S596C52v7Ev,
  (VTBL_ENTRY)&_ZN6S596C52v8Ev,
  (VTBL_ENTRY)&_ZN6S596C52v9Ev,
  (VTBL_ENTRY)&_ZN6S596C53v10Ev,
  (VTBL_ENTRY)&_ZN6S596C53v11Ev,
  (VTBL_ENTRY)&_ZN6S596C53v12Ev,
  (VTBL_ENTRY)&_ZN6S596C53v13Ev,
  (VTBL_ENTRY)&_ZN6S596C53v14Ev,
  (VTBL_ENTRY)&_ZN6S596C53v15Ev,
  (VTBL_ENTRY)&_ZN6S596C53v16Ev,
  (VTBL_ENTRY)&_ZN6S596C53v17Ev,
  (VTBL_ENTRY)&_ZN6S596C53v18Ev,
  (VTBL_ENTRY)&_ZN6S596C53v19Ev,
  (VTBL_ENTRY)&_ZN6S596C53v20Ev,
  (VTBL_ENTRY)&_ZN6S596C53v21Ev,
  (VTBL_ENTRY)&_ZN6S596C53v22Ev,
  (VTBL_ENTRY)&_ZN6S596C53v23Ev,
  (VTBL_ENTRY)&_ZN6S596C53v24Ev,
  (VTBL_ENTRY)&_ZN6S596C53v25Ev,
  (VTBL_ENTRY)&_ZN6S596C53v26Ev,
  (VTBL_ENTRY)&_ZN6S596C53v27Ev,
  (VTBL_ENTRY)&_ZN6S596C53v28Ev,
  (VTBL_ENTRY)&_ZN6S596C53v29Ev,
  (VTBL_ENTRY)&_ZN6S596C53v30Ev,
  (VTBL_ENTRY)&_ZN6S596C53v31Ev,
  (VTBL_ENTRY)&_ZN6S596C53v32Ev,
  (VTBL_ENTRY)&_ZN6S596C53v33Ev,
  (VTBL_ENTRY)&_ZN6S596C53v34Ev,
  (VTBL_ENTRY)&_ZN6S596C53v35Ev,
  (VTBL_ENTRY)&_ZN6S596C53v36Ev,
  (VTBL_ENTRY)&_ZN6S596C53v37Ev,
  (VTBL_ENTRY)&_ZN6S596C53v38Ev,
  (VTBL_ENTRY)&_ZN6S596C53v39Ev,
  (VTBL_ENTRY)&_ZN6S596C53v40Ev,
  (VTBL_ENTRY)&_ZN6S596C53v41Ev,
  (VTBL_ENTRY)&_ZN6S596C53v42Ev,
  (VTBL_ENTRY)&_ZN6S596C53v43Ev,
  (VTBL_ENTRY)&_ZN6S596C53v44Ev,
  (VTBL_ENTRY)&_ZN6S596C53v45Ev,
  (VTBL_ENTRY)&_ZN6S596C53v46Ev,
  (VTBL_ENTRY)&_ZN6S596C53v47Ev,
  (VTBL_ENTRY)&_ZN6S596C53v48Ev,
  (VTBL_ENTRY)&_ZN6S596C53v49Ev,
  (VTBL_ENTRY)&_ZN6S596C53v50Ev,
  (VTBL_ENTRY)&_ZN6S596C53v51Ev,
  (VTBL_ENTRY)&_ZN6S596C53v52Ev,
  (VTBL_ENTRY)&_ZN6S596C53v53Ev,
  (VTBL_ENTRY)&_ZN6S596C53v54Ev,
  (VTBL_ENTRY)&_ZN6S596C53v55Ev,
  (VTBL_ENTRY)&_ZN6S596C53v56Ev,
  (VTBL_ENTRY)&_ZN6S596C53v57Ev,
  (VTBL_ENTRY)&_ZN6S596C53v58Ev,
  (VTBL_ENTRY)&_ZN6S596C53v59Ev,
  (VTBL_ENTRY)&_ZN6S596C53v60Ev,
  (VTBL_ENTRY)&_ZN6S596C53v61Ev,
  (VTBL_ENTRY)&_ZN6S596C53v62Ev,
  (VTBL_ENTRY)&_ZN6S596C53v63Ev,
  (VTBL_ENTRY)&_ZN6S596C53v64Ev,
  (VTBL_ENTRY)&_ZN6S596C53v65Ev,
  (VTBL_ENTRY)&_ZN6S596C53v66Ev,
  (VTBL_ENTRY)&_ZN6S596C53v67Ev,
  (VTBL_ENTRY)&_ZN6S596C43v68Ev,
  (VTBL_ENTRY)&_ZN6S596C43v69Ev,
  (VTBL_ENTRY)&_ZN6S596C43v70Ev,
  (VTBL_ENTRY)&_ZN6S596C43v71Ev,
  (VTBL_ENTRY)&_ZN6S596C43v72Ev,
  (VTBL_ENTRY)&_ZN6S596C43v73Ev,
  (VTBL_ENTRY)&_ZN6S596C43v74Ev,
  (VTBL_ENTRY)&_ZN6S596C43v75Ev,
  (VTBL_ENTRY)&_ZN6S596C43v76Ev,
  (VTBL_ENTRY)&_ZN6S596C43v77Ev,
  (VTBL_ENTRY)&_ZN6S596C43v78Ev,
  (VTBL_ENTRY)&_ZN6S596C43v79Ev,
  (VTBL_ENTRY)&_ZN6S596C43v80Ev,
  (VTBL_ENTRY)&_ZN6S596C43v81Ev,
  (VTBL_ENTRY)&_ZN6S596C43v82Ev,
  (VTBL_ENTRY)&_ZN6S596C43v83Ev,
  (VTBL_ENTRY)&_ZN6S596C43v84Ev,
  (VTBL_ENTRY)&_ZN6S596C43v85Ev,
  (VTBL_ENTRY)&_ZN6S596C43v86Ev,
  (VTBL_ENTRY)&_ZN6S596C43v87Ev,
  (VTBL_ENTRY)&_ZN6S596C43v88Ev,
  (VTBL_ENTRY)&_ZN6S596C43v89Ev,
};
extern VTBL_ENTRY _ZTI6S596C4[];
extern  VTBL_ENTRY _ZTV6S596C4[];
Class_Descriptor cd_S596C4 = {  "S596C4", // class name
  bases_S596C4, 1,
  &(vtc_S596C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S596C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S596C4),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S596C3  : S596C4 {
  unsigned int s596c3f0:1;
  unsigned int s596c3f1:1;
  unsigned int s596c3f2:1;
  ::S3221C17 s596c3f3;
  ::S3221C11 s596c3f4;
  ::S3221C5_nt s596c3f5;
  ::S3168C19 s596c3f6;
  int s596c3f7[3];
  virtual  ~S596C3(); // _ZN6S596C3D1Ev
  virtual void  v90(); // _ZN6S596C33v90Ev
  virtual void  v91(); // _ZN6S596C33v91Ev
  virtual void  v92(); // _ZN6S596C33v92Ev
  virtual void  v93(); // _ZN6S596C33v93Ev
  virtual void  v94(); // _ZN6S596C33v94Ev
  virtual void  v95(); // _ZN6S596C33v95Ev
  virtual void  v96(); // _ZN6S596C33v96Ev
  virtual void  v97(); // _ZN6S596C33v97Ev
  virtual void  v98(); // _ZN6S596C33v98Ev
  virtual void  v99(); // _ZN6S596C33v99Ev
  virtual void  v100(); // _ZN6S596C34v100Ev
  virtual void  v101(); // _ZN6S596C34v101Ev
  virtual void  v102(); // _ZN6S596C34v102Ev
  virtual void  v103(); // _ZN6S596C34v103Ev
  virtual void  v104(); // _ZN6S596C34v104Ev
  virtual void  v105(); // _ZN6S596C34v105Ev
  virtual void  v106(); // _ZN6S596C34v106Ev
  virtual void  v107(); // _ZN6S596C34v107Ev
  virtual void  v108(); // _ZN6S596C34v108Ev
  virtual void  v109(); // _ZN6S596C34v109Ev
  S596C3(); // tgen
};
//SIG(-1 S596C3) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S596C3 ::~S596C3(){ note_dtor("S596C3", this);}
void  S596C3 ::v90(){vfunc_called(this, "_ZN6S596C33v90Ev");}
void  S596C3 ::v91(){vfunc_called(this, "_ZN6S596C33v91Ev");}
void  S596C3 ::v92(){vfunc_called(this, "_ZN6S596C33v92Ev");}
void  S596C3 ::v93(){vfunc_called(this, "_ZN6S596C33v93Ev");}
void  S596C3 ::v94(){vfunc_called(this, "_ZN6S596C33v94Ev");}
void  S596C3 ::v95(){vfunc_called(this, "_ZN6S596C33v95Ev");}
void  S596C3 ::v96(){vfunc_called(this, "_ZN6S596C33v96Ev");}
void  S596C3 ::v97(){vfunc_called(this, "_ZN6S596C33v97Ev");}
void  S596C3 ::v98(){vfunc_called(this, "_ZN6S596C33v98Ev");}
void  S596C3 ::v99(){vfunc_called(this, "_ZN6S596C33v99Ev");}
void  S596C3 ::v100(){vfunc_called(this, "_ZN6S596C34v100Ev");}
void  S596C3 ::v101(){vfunc_called(this, "_ZN6S596C34v101Ev");}
void  S596C3 ::v102(){vfunc_called(this, "_ZN6S596C34v102Ev");}
void  S596C3 ::v103(){vfunc_called(this, "_ZN6S596C34v103Ev");}
void  S596C3 ::v104(){vfunc_called(this, "_ZN6S596C34v104Ev");}
void  S596C3 ::v105(){vfunc_called(this, "_ZN6S596C34v105Ev");}
void  S596C3 ::v106(){vfunc_called(this, "_ZN6S596C34v106Ev");}
void  S596C3 ::v107(){vfunc_called(this, "_ZN6S596C34v107Ev");}
void  S596C3 ::v108(){vfunc_called(this, "_ZN6S596C34v108Ev");}
void  S596C3 ::v109(){vfunc_called(this, "_ZN6S596C34v109Ev");}
S596C3 ::S596C3(){ note_ctor("S596C3", this);} // tgen

static void Test_S596C3()
{
  extern Class_Descriptor cd_S596C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S596C3, buf);
    S596C3 *dp, &lv = *(dp=new (buf) S596C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S596C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S596C3)");
    check_base_class_offset(lv, (S596C5*)(S596C4*), 0, "S596C3");
    check_base_class_offset(lv, (S596C4*), 0, "S596C3");
    set_bf_and_test(lv, s596c3f0, ABISELECT(188,132), 0, 1, 1, "S596C3");
    set_bf_and_test(lv, s596c3f1, ABISELECT(188,132), 1, 1, 1, "S596C3");
    set_bf_and_test(lv, s596c3f2, ABISELECT(188,132), 2, 1, 1, "S596C3");
    check_field_offset(lv, s596c3f3, ABISELECT(192,136), "S596C3.s596c3f3");
    check_field_offset(lv, s596c3f4, ABISELECT(208,148), "S596C3.s596c3f4");
    check_field_offset(lv, s596c3f5, ABISELECT(224,160), "S596C3.s596c3f5");
    check_field_offset(lv, s596c3f6, ABISELECT(240,172), "S596C3.s596c3f6");
    check_field_offset(lv, s596c3f7, ABISELECT(256,184), "S596C3.s596c3f7");
    test_class_info(&lv, &cd_S596C3);
    dp->~S596C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS596C3(Test_S596C3, "S596C3", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S596C3C1Ev();
extern void _ZN6S596C3D1Ev();
Name_Map name_map_S596C3[] = {
  NSPAIR(_ZN6S596C3C1Ev),
  NSPAIR(_ZN6S596C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S596C5;
extern VTBL_ENTRY _ZTI6S596C5[];
extern  VTBL_ENTRY _ZTV6S596C5[];
extern Class_Descriptor cd_S596C4;
extern VTBL_ENTRY _ZTI6S596C4[];
extern  VTBL_ENTRY _ZTV6S596C4[];
static Base_Class bases_S596C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S596C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S596C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S596C3[];
extern void _ZN6S596C3D1Ev();
extern void _ZN6S596C3D0Ev();
extern void _ZN6S596C52v4Ev();
extern void _ZN6S596C52v5Ev();
extern void _ZN6S596C52v6Ev();
extern void _ZN6S596C52v7Ev();
extern void _ZN6S596C52v8Ev();
extern void _ZN6S596C52v9Ev();
extern void _ZN6S596C53v10Ev();
extern void _ZN6S596C53v11Ev();
extern void _ZN6S596C53v12Ev();
extern void _ZN6S596C53v13Ev();
extern void _ZN6S596C53v14Ev();
extern void _ZN6S596C53v15Ev();
extern void _ZN6S596C53v16Ev();
extern void _ZN6S596C53v17Ev();
extern void _ZN6S596C53v18Ev();
extern void _ZN6S596C53v19Ev();
extern void _ZN6S596C53v20Ev();
extern void _ZN6S596C53v21Ev();
extern void _ZN6S596C53v22Ev();
extern void _ZN6S596C53v23Ev();
extern void _ZN6S596C53v24Ev();
extern void _ZN6S596C53v25Ev();
extern void _ZN6S596C53v26Ev();
extern void _ZN6S596C53v27Ev();
extern void _ZN6S596C53v28Ev();
extern void _ZN6S596C53v29Ev();
extern void _ZN6S596C53v30Ev();
extern void _ZN6S596C53v31Ev();
extern void _ZN6S596C53v32Ev();
extern void _ZN6S596C53v33Ev();
extern void _ZN6S596C53v34Ev();
extern void _ZN6S596C53v35Ev();
extern void _ZN6S596C53v36Ev();
extern void _ZN6S596C53v37Ev();
extern void _ZN6S596C53v38Ev();
extern void _ZN6S596C53v39Ev();
extern void _ZN6S596C53v40Ev();
extern void _ZN6S596C53v41Ev();
extern void _ZN6S596C53v42Ev();
extern void _ZN6S596C53v43Ev();
extern void _ZN6S596C53v44Ev();
extern void _ZN6S596C53v45Ev();
extern void _ZN6S596C53v46Ev();
extern void _ZN6S596C53v47Ev();
extern void _ZN6S596C53v48Ev();
extern void _ZN6S596C53v49Ev();
extern void _ZN6S596C53v50Ev();
extern void _ZN6S596C53v51Ev();
extern void _ZN6S596C53v52Ev();
extern void _ZN6S596C53v53Ev();
extern void _ZN6S596C53v54Ev();
extern void _ZN6S596C53v55Ev();
extern void _ZN6S596C53v56Ev();
extern void _ZN6S596C53v57Ev();
extern void _ZN6S596C53v58Ev();
extern void _ZN6S596C53v59Ev();
extern void _ZN6S596C53v60Ev();
extern void _ZN6S596C53v61Ev();
extern void _ZN6S596C53v62Ev();
extern void _ZN6S596C53v63Ev();
extern void _ZN6S596C53v64Ev();
extern void _ZN6S596C53v65Ev();
extern void _ZN6S596C53v66Ev();
extern void _ZN6S596C53v67Ev();
extern void _ZN6S596C43v68Ev();
extern void _ZN6S596C43v69Ev();
extern void _ZN6S596C43v70Ev();
extern void _ZN6S596C43v71Ev();
extern void _ZN6S596C43v72Ev();
extern void _ZN6S596C43v73Ev();
extern void _ZN6S596C43v74Ev();
extern void _ZN6S596C43v75Ev();
extern void _ZN6S596C43v76Ev();
extern void _ZN6S596C43v77Ev();
extern void _ZN6S596C43v78Ev();
extern void _ZN6S596C43v79Ev();
extern void _ZN6S596C43v80Ev();
extern void _ZN6S596C43v81Ev();
extern void _ZN6S596C43v82Ev();
extern void _ZN6S596C43v83Ev();
extern void _ZN6S596C43v84Ev();
extern void _ZN6S596C43v85Ev();
extern void _ZN6S596C43v86Ev();
extern void _ZN6S596C43v87Ev();
extern void _ZN6S596C43v88Ev();
extern void _ZN6S596C43v89Ev();
extern void _ZN6S596C33v90Ev();
extern void _ZN6S596C33v91Ev();
extern void _ZN6S596C33v92Ev();
extern void _ZN6S596C33v93Ev();
extern void _ZN6S596C33v94Ev();
extern void _ZN6S596C33v95Ev();
extern void _ZN6S596C33v96Ev();
extern void _ZN6S596C33v97Ev();
extern void _ZN6S596C33v98Ev();
extern void _ZN6S596C33v99Ev();
extern void _ZN6S596C34v100Ev();
extern void _ZN6S596C34v101Ev();
extern void _ZN6S596C34v102Ev();
extern void _ZN6S596C34v103Ev();
extern void _ZN6S596C34v104Ev();
extern void _ZN6S596C34v105Ev();
extern void _ZN6S596C34v106Ev();
extern void _ZN6S596C34v107Ev();
extern void _ZN6S596C34v108Ev();
extern void _ZN6S596C34v109Ev();
static  VTBL_ENTRY vtc_S596C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S596C3[0]),
  (VTBL_ENTRY)&_ZN6S596C3D1Ev,
  (VTBL_ENTRY)&_ZN6S596C3D0Ev,
  (VTBL_ENTRY)&_ZN6S596C52v4Ev,
  (VTBL_ENTRY)&_ZN6S596C52v5Ev,
  (VTBL_ENTRY)&_ZN6S596C52v6Ev,
  (VTBL_ENTRY)&_ZN6S596C52v7Ev,
  (VTBL_ENTRY)&_ZN6S596C52v8Ev,
  (VTBL_ENTRY)&_ZN6S596C52v9Ev,
  (VTBL_ENTRY)&_ZN6S596C53v10Ev,
  (VTBL_ENTRY)&_ZN6S596C53v11Ev,
  (VTBL_ENTRY)&_ZN6S596C53v12Ev,
  (VTBL_ENTRY)&_ZN6S596C53v13Ev,
  (VTBL_ENTRY)&_ZN6S596C53v14Ev,
  (VTBL_ENTRY)&_ZN6S596C53v15Ev,
  (VTBL_ENTRY)&_ZN6S596C53v16Ev,
  (VTBL_ENTRY)&_ZN6S596C53v17Ev,
  (VTBL_ENTRY)&_ZN6S596C53v18Ev,
  (VTBL_ENTRY)&_ZN6S596C53v19Ev,
  (VTBL_ENTRY)&_ZN6S596C53v20Ev,
  (VTBL_ENTRY)&_ZN6S596C53v21Ev,
  (VTBL_ENTRY)&_ZN6S596C53v22Ev,
  (VTBL_ENTRY)&_ZN6S596C53v23Ev,
  (VTBL_ENTRY)&_ZN6S596C53v24Ev,
  (VTBL_ENTRY)&_ZN6S596C53v25Ev,
  (VTBL_ENTRY)&_ZN6S596C53v26Ev,
  (VTBL_ENTRY)&_ZN6S596C53v27Ev,
  (VTBL_ENTRY)&_ZN6S596C53v28Ev,
  (VTBL_ENTRY)&_ZN6S596C53v29Ev,
  (VTBL_ENTRY)&_ZN6S596C53v30Ev,
  (VTBL_ENTRY)&_ZN6S596C53v31Ev,
  (VTBL_ENTRY)&_ZN6S596C53v32Ev,
  (VTBL_ENTRY)&_ZN6S596C53v33Ev,
  (VTBL_ENTRY)&_ZN6S596C53v34Ev,
  (VTBL_ENTRY)&_ZN6S596C53v35Ev,
  (VTBL_ENTRY)&_ZN6S596C53v36Ev,
  (VTBL_ENTRY)&_ZN6S596C53v37Ev,
  (VTBL_ENTRY)&_ZN6S596C53v38Ev,
  (VTBL_ENTRY)&_ZN6S596C53v39Ev,
  (VTBL_ENTRY)&_ZN6S596C53v40Ev,
  (VTBL_ENTRY)&_ZN6S596C53v41Ev,
  (VTBL_ENTRY)&_ZN6S596C53v42Ev,
  (VTBL_ENTRY)&_ZN6S596C53v43Ev,
  (VTBL_ENTRY)&_ZN6S596C53v44Ev,
  (VTBL_ENTRY)&_ZN6S596C53v45Ev,
  (VTBL_ENTRY)&_ZN6S596C53v46Ev,
  (VTBL_ENTRY)&_ZN6S596C53v47Ev,
  (VTBL_ENTRY)&_ZN6S596C53v48Ev,
  (VTBL_ENTRY)&_ZN6S596C53v49Ev,
  (VTBL_ENTRY)&_ZN6S596C53v50Ev,
  (VTBL_ENTRY)&_ZN6S596C53v51Ev,
  (VTBL_ENTRY)&_ZN6S596C53v52Ev,
  (VTBL_ENTRY)&_ZN6S596C53v53Ev,
  (VTBL_ENTRY)&_ZN6S596C53v54Ev,
  (VTBL_ENTRY)&_ZN6S596C53v55Ev,
  (VTBL_ENTRY)&_ZN6S596C53v56Ev,
  (VTBL_ENTRY)&_ZN6S596C53v57Ev,
  (VTBL_ENTRY)&_ZN6S596C53v58Ev,
  (VTBL_ENTRY)&_ZN6S596C53v59Ev,
  (VTBL_ENTRY)&_ZN6S596C53v60Ev,
  (VTBL_ENTRY)&_ZN6S596C53v61Ev,
  (VTBL_ENTRY)&_ZN6S596C53v62Ev,
  (VTBL_ENTRY)&_ZN6S596C53v63Ev,
  (VTBL_ENTRY)&_ZN6S596C53v64Ev,
  (VTBL_ENTRY)&_ZN6S596C53v65Ev,
  (VTBL_ENTRY)&_ZN6S596C53v66Ev,
  (VTBL_ENTRY)&_ZN6S596C53v67Ev,
  (VTBL_ENTRY)&_ZN6S596C43v68Ev,
  (VTBL_ENTRY)&_ZN6S596C43v69Ev,
  (VTBL_ENTRY)&_ZN6S596C43v70Ev,
  (VTBL_ENTRY)&_ZN6S596C43v71Ev,
  (VTBL_ENTRY)&_ZN6S596C43v72Ev,
  (VTBL_ENTRY)&_ZN6S596C43v73Ev,
  (VTBL_ENTRY)&_ZN6S596C43v74Ev,
  (VTBL_ENTRY)&_ZN6S596C43v75Ev,
  (VTBL_ENTRY)&_ZN6S596C43v76Ev,
  (VTBL_ENTRY)&_ZN6S596C43v77Ev,
  (VTBL_ENTRY)&_ZN6S596C43v78Ev,
  (VTBL_ENTRY)&_ZN6S596C43v79Ev,
  (VTBL_ENTRY)&_ZN6S596C43v80Ev,
  (VTBL_ENTRY)&_ZN6S596C43v81Ev,
  (VTBL_ENTRY)&_ZN6S596C43v82Ev,
  (VTBL_ENTRY)&_ZN6S596C43v83Ev,
  (VTBL_ENTRY)&_ZN6S596C43v84Ev,
  (VTBL_ENTRY)&_ZN6S596C43v85Ev,
  (VTBL_ENTRY)&_ZN6S596C43v86Ev,
  (VTBL_ENTRY)&_ZN6S596C43v87Ev,
  (VTBL_ENTRY)&_ZN6S596C43v88Ev,
  (VTBL_ENTRY)&_ZN6S596C43v89Ev,
  (VTBL_ENTRY)&_ZN6S596C33v90Ev,
  (VTBL_ENTRY)&_ZN6S596C33v91Ev,
  (VTBL_ENTRY)&_ZN6S596C33v92Ev,
  (VTBL_ENTRY)&_ZN6S596C33v93Ev,
  (VTBL_ENTRY)&_ZN6S596C33v94Ev,
  (VTBL_ENTRY)&_ZN6S596C33v95Ev,
  (VTBL_ENTRY)&_ZN6S596C33v96Ev,
  (VTBL_ENTRY)&_ZN6S596C33v97Ev,
  (VTBL_ENTRY)&_ZN6S596C33v98Ev,
  (VTBL_ENTRY)&_ZN6S596C33v99Ev,
  (VTBL_ENTRY)&_ZN6S596C34v100Ev,
  (VTBL_ENTRY)&_ZN6S596C34v101Ev,
  (VTBL_ENTRY)&_ZN6S596C34v102Ev,
  (VTBL_ENTRY)&_ZN6S596C34v103Ev,
  (VTBL_ENTRY)&_ZN6S596C34v104Ev,
  (VTBL_ENTRY)&_ZN6S596C34v105Ev,
  (VTBL_ENTRY)&_ZN6S596C34v106Ev,
  (VTBL_ENTRY)&_ZN6S596C34v107Ev,
  (VTBL_ENTRY)&_ZN6S596C34v108Ev,
  (VTBL_ENTRY)&_ZN6S596C34v109Ev,
};
extern VTBL_ENTRY _ZTI6S596C3[];
extern  VTBL_ENTRY _ZTV6S596C3[];
Class_Descriptor cd_S596C3 = {  "S596C3", // class name
  bases_S596C3, 2,
  &(vtc_S596C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S596C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S596C3),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S596C2 ::~S596C2(){ note_dtor("S596C2", this);}
void  S596C2 ::v110(){vfunc_called(this, "_ZN6S596C24v110Ev");}
void  S596C2 ::v111(){vfunc_called(this, "_ZN6S596C24v111Ev");}
S596C2 ::S596C2(){ note_ctor("S596C2", this);} // tgen

static void Test_S596C2()
{
  extern Class_Descriptor cd_S596C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S596C2, buf);
    S596C2 *dp, &lv = *(dp=new (buf) S596C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S596C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S596C2)");
    check_base_class_offset(lv, (S596C5*)(S596C4*)(S596C3*), 0, "S596C2");
    check_base_class_offset(lv, (S596C4*)(S596C3*), 0, "S596C2");
    check_base_class_offset(lv, (S596C3*), 0, "S596C2");
    test_class_info(&lv, &cd_S596C2);
    dp->~S596C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS596C2(Test_S596C2, "S596C2", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S596C2C1Ev();
extern void _ZN6S596C2D1Ev();
Name_Map name_map_S596C2[] = {
  NSPAIR(_ZN6S596C2C1Ev),
  NSPAIR(_ZN6S596C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S596C5;
extern VTBL_ENTRY _ZTI6S596C5[];
extern  VTBL_ENTRY _ZTV6S596C5[];
extern Class_Descriptor cd_S596C4;
extern VTBL_ENTRY _ZTI6S596C4[];
extern  VTBL_ENTRY _ZTV6S596C4[];
extern Class_Descriptor cd_S596C3;
extern VTBL_ENTRY _ZTI6S596C3[];
extern  VTBL_ENTRY _ZTV6S596C3[];
static Base_Class bases_S596C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S596C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S596C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S596C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S596C2[];
extern void _ZN6S596C2D1Ev();
extern void _ZN6S596C2D0Ev();
extern void _ZN6S596C52v4Ev();
extern void _ZN6S596C52v5Ev();
extern void _ZN6S596C52v6Ev();
extern void _ZN6S596C52v7Ev();
extern void _ZN6S596C52v8Ev();
extern void _ZN6S596C52v9Ev();
extern void _ZN6S596C53v10Ev();
extern void _ZN6S596C53v11Ev();
extern void _ZN6S596C53v12Ev();
extern void _ZN6S596C53v13Ev();
extern void _ZN6S596C53v14Ev();
extern void _ZN6S596C53v15Ev();
extern void _ZN6S596C53v16Ev();
extern void _ZN6S596C53v17Ev();
extern void _ZN6S596C53v18Ev();
extern void _ZN6S596C53v19Ev();
extern void _ZN6S596C53v20Ev();
extern void _ZN6S596C53v21Ev();
extern void _ZN6S596C53v22Ev();
extern void _ZN6S596C53v23Ev();
extern void _ZN6S596C53v24Ev();
extern void _ZN6S596C53v25Ev();
extern void _ZN6S596C53v26Ev();
extern void _ZN6S596C53v27Ev();
extern void _ZN6S596C53v28Ev();
extern void _ZN6S596C53v29Ev();
extern void _ZN6S596C53v30Ev();
extern void _ZN6S596C53v31Ev();
extern void _ZN6S596C53v32Ev();
extern void _ZN6S596C53v33Ev();
extern void _ZN6S596C53v34Ev();
extern void _ZN6S596C53v35Ev();
extern void _ZN6S596C53v36Ev();
extern void _ZN6S596C53v37Ev();
extern void _ZN6S596C53v38Ev();
extern void _ZN6S596C53v39Ev();
extern void _ZN6S596C53v40Ev();
extern void _ZN6S596C53v41Ev();
extern void _ZN6S596C53v42Ev();
extern void _ZN6S596C53v43Ev();
extern void _ZN6S596C53v44Ev();
extern void _ZN6S596C53v45Ev();
extern void _ZN6S596C53v46Ev();
extern void _ZN6S596C53v47Ev();
extern void _ZN6S596C53v48Ev();
extern void _ZN6S596C53v49Ev();
extern void _ZN6S596C53v50Ev();
extern void _ZN6S596C53v51Ev();
extern void _ZN6S596C53v52Ev();
extern void _ZN6S596C53v53Ev();
extern void _ZN6S596C53v54Ev();
extern void _ZN6S596C53v55Ev();
extern void _ZN6S596C53v56Ev();
extern void _ZN6S596C53v57Ev();
extern void _ZN6S596C53v58Ev();
extern void _ZN6S596C53v59Ev();
extern void _ZN6S596C53v60Ev();
extern void _ZN6S596C53v61Ev();
extern void _ZN6S596C53v62Ev();
extern void _ZN6S596C53v63Ev();
extern void _ZN6S596C53v64Ev();
extern void _ZN6S596C53v65Ev();
extern void _ZN6S596C53v66Ev();
extern void _ZN6S596C53v67Ev();
extern void _ZN6S596C43v68Ev();
extern void _ZN6S596C43v69Ev();
extern void _ZN6S596C43v70Ev();
extern void _ZN6S596C43v71Ev();
extern void _ZN6S596C43v72Ev();
extern void _ZN6S596C43v73Ev();
extern void _ZN6S596C43v74Ev();
extern void _ZN6S596C43v75Ev();
extern void _ZN6S596C43v76Ev();
extern void _ZN6S596C43v77Ev();
extern void _ZN6S596C43v78Ev();
extern void _ZN6S596C43v79Ev();
extern void _ZN6S596C43v80Ev();
extern void _ZN6S596C43v81Ev();
extern void _ZN6S596C43v82Ev();
extern void _ZN6S596C43v83Ev();
extern void _ZN6S596C43v84Ev();
extern void _ZN6S596C43v85Ev();
extern void _ZN6S596C43v86Ev();
extern void _ZN6S596C43v87Ev();
extern void _ZN6S596C43v88Ev();
extern void _ZN6S596C43v89Ev();
extern void _ZN6S596C33v90Ev();
extern void _ZN6S596C33v91Ev();
extern void _ZN6S596C33v92Ev();
extern void _ZN6S596C33v93Ev();
extern void _ZN6S596C33v94Ev();
extern void _ZN6S596C33v95Ev();
extern void _ZN6S596C33v96Ev();
extern void _ZN6S596C33v97Ev();
extern void _ZN6S596C33v98Ev();
extern void _ZN6S596C33v99Ev();
extern void _ZN6S596C34v100Ev();
extern void _ZN6S596C34v101Ev();
extern void _ZN6S596C34v102Ev();
extern void _ZN6S596C34v103Ev();
extern void _ZN6S596C34v104Ev();
extern void _ZN6S596C34v105Ev();
extern void _ZN6S596C34v106Ev();
extern void _ZN6S596C34v107Ev();
extern void _ZN6S596C34v108Ev();
extern void _ZN6S596C34v109Ev();
extern void _ZN6S596C24v110Ev();
extern void _ZN6S596C24v111Ev();
static  VTBL_ENTRY vtc_S596C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S596C2[0]),
  (VTBL_ENTRY)&_ZN6S596C2D1Ev,
  (VTBL_ENTRY)&_ZN6S596C2D0Ev,
  (VTBL_ENTRY)&_ZN6S596C52v4Ev,
  (VTBL_ENTRY)&_ZN6S596C52v5Ev,
  (VTBL_ENTRY)&_ZN6S596C52v6Ev,
  (VTBL_ENTRY)&_ZN6S596C52v7Ev,
  (VTBL_ENTRY)&_ZN6S596C52v8Ev,
  (VTBL_ENTRY)&_ZN6S596C52v9Ev,
  (VTBL_ENTRY)&_ZN6S596C53v10Ev,
  (VTBL_ENTRY)&_ZN6S596C53v11Ev,
  (VTBL_ENTRY)&_ZN6S596C53v12Ev,
  (VTBL_ENTRY)&_ZN6S596C53v13Ev,
  (VTBL_ENTRY)&_ZN6S596C53v14Ev,
  (VTBL_ENTRY)&_ZN6S596C53v15Ev,
  (VTBL_ENTRY)&_ZN6S596C53v16Ev,
  (VTBL_ENTRY)&_ZN6S596C53v17Ev,
  (VTBL_ENTRY)&_ZN6S596C53v18Ev,
  (VTBL_ENTRY)&_ZN6S596C53v19Ev,
  (VTBL_ENTRY)&_ZN6S596C53v20Ev,
  (VTBL_ENTRY)&_ZN6S596C53v21Ev,
  (VTBL_ENTRY)&_ZN6S596C53v22Ev,
  (VTBL_ENTRY)&_ZN6S596C53v23Ev,
  (VTBL_ENTRY)&_ZN6S596C53v24Ev,
  (VTBL_ENTRY)&_ZN6S596C53v25Ev,
  (VTBL_ENTRY)&_ZN6S596C53v26Ev,
  (VTBL_ENTRY)&_ZN6S596C53v27Ev,
  (VTBL_ENTRY)&_ZN6S596C53v28Ev,
  (VTBL_ENTRY)&_ZN6S596C53v29Ev,
  (VTBL_ENTRY)&_ZN6S596C53v30Ev,
  (VTBL_ENTRY)&_ZN6S596C53v31Ev,
  (VTBL_ENTRY)&_ZN6S596C53v32Ev,
  (VTBL_ENTRY)&_ZN6S596C53v33Ev,
  (VTBL_ENTRY)&_ZN6S596C53v34Ev,
  (VTBL_ENTRY)&_ZN6S596C53v35Ev,
  (VTBL_ENTRY)&_ZN6S596C53v36Ev,
  (VTBL_ENTRY)&_ZN6S596C53v37Ev,
  (VTBL_ENTRY)&_ZN6S596C53v38Ev,
  (VTBL_ENTRY)&_ZN6S596C53v39Ev,
  (VTBL_ENTRY)&_ZN6S596C53v40Ev,
  (VTBL_ENTRY)&_ZN6S596C53v41Ev,
  (VTBL_ENTRY)&_ZN6S596C53v42Ev,
  (VTBL_ENTRY)&_ZN6S596C53v43Ev,
  (VTBL_ENTRY)&_ZN6S596C53v44Ev,
  (VTBL_ENTRY)&_ZN6S596C53v45Ev,
  (VTBL_ENTRY)&_ZN6S596C53v46Ev,
  (VTBL_ENTRY)&_ZN6S596C53v47Ev,
  (VTBL_ENTRY)&_ZN6S596C53v48Ev,
  (VTBL_ENTRY)&_ZN6S596C53v49Ev,
  (VTBL_ENTRY)&_ZN6S596C53v50Ev,
  (VTBL_ENTRY)&_ZN6S596C53v51Ev,
  (VTBL_ENTRY)&_ZN6S596C53v52Ev,
  (VTBL_ENTRY)&_ZN6S596C53v53Ev,
  (VTBL_ENTRY)&_ZN6S596C53v54Ev,
  (VTBL_ENTRY)&_ZN6S596C53v55Ev,
  (VTBL_ENTRY)&_ZN6S596C53v56Ev,
  (VTBL_ENTRY)&_ZN6S596C53v57Ev,
  (VTBL_ENTRY)&_ZN6S596C53v58Ev,
  (VTBL_ENTRY)&_ZN6S596C53v59Ev,
  (VTBL_ENTRY)&_ZN6S596C53v60Ev,
  (VTBL_ENTRY)&_ZN6S596C53v61Ev,
  (VTBL_ENTRY)&_ZN6S596C53v62Ev,
  (VTBL_ENTRY)&_ZN6S596C53v63Ev,
  (VTBL_ENTRY)&_ZN6S596C53v64Ev,
  (VTBL_ENTRY)&_ZN6S596C53v65Ev,
  (VTBL_ENTRY)&_ZN6S596C53v66Ev,
  (VTBL_ENTRY)&_ZN6S596C53v67Ev,
  (VTBL_ENTRY)&_ZN6S596C43v68Ev,
  (VTBL_ENTRY)&_ZN6S596C43v69Ev,
  (VTBL_ENTRY)&_ZN6S596C43v70Ev,
  (VTBL_ENTRY)&_ZN6S596C43v71Ev,
  (VTBL_ENTRY)&_ZN6S596C43v72Ev,
  (VTBL_ENTRY)&_ZN6S596C43v73Ev,
  (VTBL_ENTRY)&_ZN6S596C43v74Ev,
  (VTBL_ENTRY)&_ZN6S596C43v75Ev,
  (VTBL_ENTRY)&_ZN6S596C43v76Ev,
  (VTBL_ENTRY)&_ZN6S596C43v77Ev,
  (VTBL_ENTRY)&_ZN6S596C43v78Ev,
  (VTBL_ENTRY)&_ZN6S596C43v79Ev,
  (VTBL_ENTRY)&_ZN6S596C43v80Ev,
  (VTBL_ENTRY)&_ZN6S596C43v81Ev,
  (VTBL_ENTRY)&_ZN6S596C43v82Ev,
  (VTBL_ENTRY)&_ZN6S596C43v83Ev,
  (VTBL_ENTRY)&_ZN6S596C43v84Ev,
  (VTBL_ENTRY)&_ZN6S596C43v85Ev,
  (VTBL_ENTRY)&_ZN6S596C43v86Ev,
  (VTBL_ENTRY)&_ZN6S596C43v87Ev,
  (VTBL_ENTRY)&_ZN6S596C43v88Ev,
  (VTBL_ENTRY)&_ZN6S596C43v89Ev,
  (VTBL_ENTRY)&_ZN6S596C33v90Ev,
  (VTBL_ENTRY)&_ZN6S596C33v91Ev,
  (VTBL_ENTRY)&_ZN6S596C33v92Ev,
  (VTBL_ENTRY)&_ZN6S596C33v93Ev,
  (VTBL_ENTRY)&_ZN6S596C33v94Ev,
  (VTBL_ENTRY)&_ZN6S596C33v95Ev,
  (VTBL_ENTRY)&_ZN6S596C33v96Ev,
  (VTBL_ENTRY)&_ZN6S596C33v97Ev,
  (VTBL_ENTRY)&_ZN6S596C33v98Ev,
  (VTBL_ENTRY)&_ZN6S596C33v99Ev,
  (VTBL_ENTRY)&_ZN6S596C34v100Ev,
  (VTBL_ENTRY)&_ZN6S596C34v101Ev,
  (VTBL_ENTRY)&_ZN6S596C34v102Ev,
  (VTBL_ENTRY)&_ZN6S596C34v103Ev,
  (VTBL_ENTRY)&_ZN6S596C34v104Ev,
  (VTBL_ENTRY)&_ZN6S596C34v105Ev,
  (VTBL_ENTRY)&_ZN6S596C34v106Ev,
  (VTBL_ENTRY)&_ZN6S596C34v107Ev,
  (VTBL_ENTRY)&_ZN6S596C34v108Ev,
  (VTBL_ENTRY)&_ZN6S596C34v109Ev,
  (VTBL_ENTRY)&_ZN6S596C24v110Ev,
  (VTBL_ENTRY)&_ZN6S596C24v111Ev,
};
extern VTBL_ENTRY _ZTI6S596C2[];
extern  VTBL_ENTRY _ZTV6S596C2[];
Class_Descriptor cd_S596C2 = {  "S596C2", // class name
  bases_S596C2, 3,
  &(vtc_S596C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S596C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S596C2),112, //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  S596C1  : S596C2 {
  virtual  ~S596C1(); // _ZN6S596C1D1Ev
  virtual void  v1(); // _ZN6S596C12v1Ev
  virtual void  v2(); // _ZN6S596C12v2Ev
  virtual void  v3(); // _ZN6S596C12v3Ev
  S596C1(); // tgen
};
//SIG(1 S596C1) 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]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v110 v111} vd v1 v2 v3}


 S596C1 ::~S596C1(){ note_dtor("S596C1", this);}
void  S596C1 ::v1(){vfunc_called(this, "_ZN6S596C12v1Ev");}
void  S596C1 ::v2(){vfunc_called(this, "_ZN6S596C12v2Ev");}
void  S596C1 ::v3(){vfunc_called(this, "_ZN6S596C12v3Ev");}
S596C1 ::S596C1(){ note_ctor("S596C1", this);} // tgen

static void Test_S596C1()
{
  extern Class_Descriptor cd_S596C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S596C1, buf);
    S596C1 *dp, &lv = *(dp=new (buf) S596C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S596C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S596C1)");
    check_base_class_offset(lv, (S596C5*)(S596C4*)(S596C3*)(S596C2*), 0, "S596C1");
    check_base_class_offset(lv, (S596C4*)(S596C3*)(S596C2*), 0, "S596C1");
    check_base_class_offset(lv, (S596C3*)(S596C2*), 0, "S596C1");
    check_base_class_offset(lv, (S596C2*), 0, "S596C1");
    test_class_info(&lv, &cd_S596C1);
    dp->~S596C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS596C1(Test_S596C1, "S596C1", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S596C1C1Ev();
extern void _ZN6S596C1D1Ev();
Name_Map name_map_S596C1[] = {
  NSPAIR(_ZN6S596C1C1Ev),
  NSPAIR(_ZN6S596C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S596C5;
extern VTBL_ENTRY _ZTI6S596C5[];
extern  VTBL_ENTRY _ZTV6S596C5[];
extern Class_Descriptor cd_S596C4;
extern VTBL_ENTRY _ZTI6S596C4[];
extern  VTBL_ENTRY _ZTV6S596C4[];
extern Class_Descriptor cd_S596C3;
extern VTBL_ENTRY _ZTI6S596C3[];
extern  VTBL_ENTRY _ZTV6S596C3[];
extern Class_Descriptor cd_S596C2;
extern VTBL_ENTRY _ZTI6S596C2[];
extern  VTBL_ENTRY _ZTV6S596C2[];
static Base_Class bases_S596C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S596C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S596C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S596C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S596C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S596C1[];
extern void _ZN6S596C1D1Ev();
extern void _ZN6S596C1D0Ev();
extern void _ZN6S596C52v4Ev();
extern void _ZN6S596C52v5Ev();
extern void _ZN6S596C52v6Ev();
extern void _ZN6S596C52v7Ev();
extern void _ZN6S596C52v8Ev();
extern void _ZN6S596C52v9Ev();
extern void _ZN6S596C53v10Ev();
extern void _ZN6S596C53v11Ev();
extern void _ZN6S596C53v12Ev();
extern void _ZN6S596C53v13Ev();
extern void _ZN6S596C53v14Ev();
extern void _ZN6S596C53v15Ev();
extern void _ZN6S596C53v16Ev();
extern void _ZN6S596C53v17Ev();
extern void _ZN6S596C53v18Ev();
extern void _ZN6S596C53v19Ev();
extern void _ZN6S596C53v20Ev();
extern void _ZN6S596C53v21Ev();
extern void _ZN6S596C53v22Ev();
extern void _ZN6S596C53v23Ev();
extern void _ZN6S596C53v24Ev();
extern void _ZN6S596C53v25Ev();
extern void _ZN6S596C53v26Ev();
extern void _ZN6S596C53v27Ev();
extern void _ZN6S596C53v28Ev();
extern void _ZN6S596C53v29Ev();
extern void _ZN6S596C53v30Ev();
extern void _ZN6S596C53v31Ev();
extern void _ZN6S596C53v32Ev();
extern void _ZN6S596C53v33Ev();
extern void _ZN6S596C53v34Ev();
extern void _ZN6S596C53v35Ev();
extern void _ZN6S596C53v36Ev();
extern void _ZN6S596C53v37Ev();
extern void _ZN6S596C53v38Ev();
extern void _ZN6S596C53v39Ev();
extern void _ZN6S596C53v40Ev();
extern void _ZN6S596C53v41Ev();
extern void _ZN6S596C53v42Ev();
extern void _ZN6S596C53v43Ev();
extern void _ZN6S596C53v44Ev();
extern void _ZN6S596C53v45Ev();
extern void _ZN6S596C53v46Ev();
extern void _ZN6S596C53v47Ev();
extern void _ZN6S596C53v48Ev();
extern void _ZN6S596C53v49Ev();
extern void _ZN6S596C53v50Ev();
extern void _ZN6S596C53v51Ev();
extern void _ZN6S596C53v52Ev();
extern void _ZN6S596C53v53Ev();
extern void _ZN6S596C53v54Ev();
extern void _ZN6S596C53v55Ev();
extern void _ZN6S596C53v56Ev();
extern void _ZN6S596C53v57Ev();
extern void _ZN6S596C53v58Ev();
extern void _ZN6S596C53v59Ev();
extern void _ZN6S596C53v60Ev();
extern void _ZN6S596C53v61Ev();
extern void _ZN6S596C53v62Ev();
extern void _ZN6S596C53v63Ev();
extern void _ZN6S596C53v64Ev();
extern void _ZN6S596C53v65Ev();
extern void _ZN6S596C53v66Ev();
extern void _ZN6S596C53v67Ev();
extern void _ZN6S596C43v68Ev();
extern void _ZN6S596C43v69Ev();
extern void _ZN6S596C43v70Ev();
extern void _ZN6S596C43v71Ev();
extern void _ZN6S596C43v72Ev();
extern void _ZN6S596C43v73Ev();
extern void _ZN6S596C43v74Ev();
extern void _ZN6S596C43v75Ev();
extern void _ZN6S596C43v76Ev();
extern void _ZN6S596C43v77Ev();
extern void _ZN6S596C43v78Ev();
extern void _ZN6S596C43v79Ev();
extern void _ZN6S596C43v80Ev();
extern void _ZN6S596C43v81Ev();
extern void _ZN6S596C43v82Ev();
extern void _ZN6S596C43v83Ev();
extern void _ZN6S596C43v84Ev();
extern void _ZN6S596C43v85Ev();
extern void _ZN6S596C43v86Ev();
extern void _ZN6S596C43v87Ev();
extern void _ZN6S596C43v88Ev();
extern void _ZN6S596C43v89Ev();
extern void _ZN6S596C33v90Ev();
extern void _ZN6S596C33v91Ev();
extern void _ZN6S596C33v92Ev();
extern void _ZN6S596C33v93Ev();
extern void _ZN6S596C33v94Ev();
extern void _ZN6S596C33v95Ev();
extern void _ZN6S596C33v96Ev();
extern void _ZN6S596C33v97Ev();
extern void _ZN6S596C33v98Ev();
extern void _ZN6S596C33v99Ev();
extern void _ZN6S596C34v100Ev();
extern void _ZN6S596C34v101Ev();
extern void _ZN6S596C34v102Ev();
extern void _ZN6S596C34v103Ev();
extern void _ZN6S596C34v104Ev();
extern void _ZN6S596C34v105Ev();
extern void _ZN6S596C34v106Ev();
extern void _ZN6S596C34v107Ev();
extern void _ZN6S596C34v108Ev();
extern void _ZN6S596C34v109Ev();
extern void _ZN6S596C24v110Ev();
extern void _ZN6S596C24v111Ev();
extern void _ZN6S596C12v1Ev();
extern void _ZN6S596C12v2Ev();
extern void _ZN6S596C12v3Ev();
static  VTBL_ENTRY vtc_S596C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S596C1[0]),
  (VTBL_ENTRY)&_ZN6S596C1D1Ev,
  (VTBL_ENTRY)&_ZN6S596C1D0Ev,
  (VTBL_ENTRY)&_ZN6S596C52v4Ev,
  (VTBL_ENTRY)&_ZN6S596C52v5Ev,
  (VTBL_ENTRY)&_ZN6S596C52v6Ev,
  (VTBL_ENTRY)&_ZN6S596C52v7Ev,
  (VTBL_ENTRY)&_ZN6S596C52v8Ev,
  (VTBL_ENTRY)&_ZN6S596C52v9Ev,
  (VTBL_ENTRY)&_ZN6S596C53v10Ev,
  (VTBL_ENTRY)&_ZN6S596C53v11Ev,
  (VTBL_ENTRY)&_ZN6S596C53v12Ev,
  (VTBL_ENTRY)&_ZN6S596C53v13Ev,
  (VTBL_ENTRY)&_ZN6S596C53v14Ev,
  (VTBL_ENTRY)&_ZN6S596C53v15Ev,
  (VTBL_ENTRY)&_ZN6S596C53v16Ev,
  (VTBL_ENTRY)&_ZN6S596C53v17Ev,
  (VTBL_ENTRY)&_ZN6S596C53v18Ev,
  (VTBL_ENTRY)&_ZN6S596C53v19Ev,
  (VTBL_ENTRY)&_ZN6S596C53v20Ev,
  (VTBL_ENTRY)&_ZN6S596C53v21Ev,
  (VTBL_ENTRY)&_ZN6S596C53v22Ev,
  (VTBL_ENTRY)&_ZN6S596C53v23Ev,
  (VTBL_ENTRY)&_ZN6S596C53v24Ev,
  (VTBL_ENTRY)&_ZN6S596C53v25Ev,
  (VTBL_ENTRY)&_ZN6S596C53v26Ev,
  (VTBL_ENTRY)&_ZN6S596C53v27Ev,
  (VTBL_ENTRY)&_ZN6S596C53v28Ev,
  (VTBL_ENTRY)&_ZN6S596C53v29Ev,
  (VTBL_ENTRY)&_ZN6S596C53v30Ev,
  (VTBL_ENTRY)&_ZN6S596C53v31Ev,
  (VTBL_ENTRY)&_ZN6S596C53v32Ev,
  (VTBL_ENTRY)&_ZN6S596C53v33Ev,
  (VTBL_ENTRY)&_ZN6S596C53v34Ev,
  (VTBL_ENTRY)&_ZN6S596C53v35Ev,
  (VTBL_ENTRY)&_ZN6S596C53v36Ev,
  (VTBL_ENTRY)&_ZN6S596C53v37Ev,
  (VTBL_ENTRY)&_ZN6S596C53v38Ev,
  (VTBL_ENTRY)&_ZN6S596C53v39Ev,
  (VTBL_ENTRY)&_ZN6S596C53v40Ev,
  (VTBL_ENTRY)&_ZN6S596C53v41Ev,
  (VTBL_ENTRY)&_ZN6S596C53v42Ev,
  (VTBL_ENTRY)&_ZN6S596C53v43Ev,
  (VTBL_ENTRY)&_ZN6S596C53v44Ev,
  (VTBL_ENTRY)&_ZN6S596C53v45Ev,
  (VTBL_ENTRY)&_ZN6S596C53v46Ev,
  (VTBL_ENTRY)&_ZN6S596C53v47Ev,
  (VTBL_ENTRY)&_ZN6S596C53v48Ev,
  (VTBL_ENTRY)&_ZN6S596C53v49Ev,
  (VTBL_ENTRY)&_ZN6S596C53v50Ev,
  (VTBL_ENTRY)&_ZN6S596C53v51Ev,
  (VTBL_ENTRY)&_ZN6S596C53v52Ev,
  (VTBL_ENTRY)&_ZN6S596C53v53Ev,
  (VTBL_ENTRY)&_ZN6S596C53v54Ev,
  (VTBL_ENTRY)&_ZN6S596C53v55Ev,
  (VTBL_ENTRY)&_ZN6S596C53v56Ev,
  (VTBL_ENTRY)&_ZN6S596C53v57Ev,
  (VTBL_ENTRY)&_ZN6S596C53v58Ev,
  (VTBL_ENTRY)&_ZN6S596C53v59Ev,
  (VTBL_ENTRY)&_ZN6S596C53v60Ev,
  (VTBL_ENTRY)&_ZN6S596C53v61Ev,
  (VTBL_ENTRY)&_ZN6S596C53v62Ev,
  (VTBL_ENTRY)&_ZN6S596C53v63Ev,
  (VTBL_ENTRY)&_ZN6S596C53v64Ev,
  (VTBL_ENTRY)&_ZN6S596C53v65Ev,
  (VTBL_ENTRY)&_ZN6S596C53v66Ev,
  (VTBL_ENTRY)&_ZN6S596C53v67Ev,
  (VTBL_ENTRY)&_ZN6S596C43v68Ev,
  (VTBL_ENTRY)&_ZN6S596C43v69Ev,
  (VTBL_ENTRY)&_ZN6S596C43v70Ev,
  (VTBL_ENTRY)&_ZN6S596C43v71Ev,
  (VTBL_ENTRY)&_ZN6S596C43v72Ev,
  (VTBL_ENTRY)&_ZN6S596C43v73Ev,
  (VTBL_ENTRY)&_ZN6S596C43v74Ev,
  (VTBL_ENTRY)&_ZN6S596C43v75Ev,
  (VTBL_ENTRY)&_ZN6S596C43v76Ev,
  (VTBL_ENTRY)&_ZN6S596C43v77Ev,
  (VTBL_ENTRY)&_ZN6S596C43v78Ev,
  (VTBL_ENTRY)&_ZN6S596C43v79Ev,
  (VTBL_ENTRY)&_ZN6S596C43v80Ev,
  (VTBL_ENTRY)&_ZN6S596C43v81Ev,
  (VTBL_ENTRY)&_ZN6S596C43v82Ev,
  (VTBL_ENTRY)&_ZN6S596C43v83Ev,
  (VTBL_ENTRY)&_ZN6S596C43v84Ev,
  (VTBL_ENTRY)&_ZN6S596C43v85Ev,
  (VTBL_ENTRY)&_ZN6S596C43v86Ev,
  (VTBL_ENTRY)&_ZN6S596C43v87Ev,
  (VTBL_ENTRY)&_ZN6S596C43v88Ev,
  (VTBL_ENTRY)&_ZN6S596C43v89Ev,
  (VTBL_ENTRY)&_ZN6S596C33v90Ev,
  (VTBL_ENTRY)&_ZN6S596C33v91Ev,
  (VTBL_ENTRY)&_ZN6S596C33v92Ev,
  (VTBL_ENTRY)&_ZN6S596C33v93Ev,
  (VTBL_ENTRY)&_ZN6S596C33v94Ev,
  (VTBL_ENTRY)&_ZN6S596C33v95Ev,
  (VTBL_ENTRY)&_ZN6S596C33v96Ev,
  (VTBL_ENTRY)&_ZN6S596C33v97Ev,
  (VTBL_ENTRY)&_ZN6S596C33v98Ev,
  (VTBL_ENTRY)&_ZN6S596C33v99Ev,
  (VTBL_ENTRY)&_ZN6S596C34v100Ev,
  (VTBL_ENTRY)&_ZN6S596C34v101Ev,
  (VTBL_ENTRY)&_ZN6S596C34v102Ev,
  (VTBL_ENTRY)&_ZN6S596C34v103Ev,
  (VTBL_ENTRY)&_ZN6S596C34v104Ev,
  (VTBL_ENTRY)&_ZN6S596C34v105Ev,
  (VTBL_ENTRY)&_ZN6S596C34v106Ev,
  (VTBL_ENTRY)&_ZN6S596C34v107Ev,
  (VTBL_ENTRY)&_ZN6S596C34v108Ev,
  (VTBL_ENTRY)&_ZN6S596C34v109Ev,
  (VTBL_ENTRY)&_ZN6S596C24v110Ev,
  (VTBL_ENTRY)&_ZN6S596C24v111Ev,
  (VTBL_ENTRY)&_ZN6S596C12v1Ev,
  (VTBL_ENTRY)&_ZN6S596C12v2Ev,
  (VTBL_ENTRY)&_ZN6S596C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S596C1[];
extern  VTBL_ENTRY _ZTV6S596C1[];
Class_Descriptor cd_S596C1 = {  "S596C1", // class name
  bases_S596C1, 4,
  &(vtc_S596C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S596C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S596C1),115, //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  S1574C4  {
  int s1574c4f0;
  __tsi64 s1574c4f1;
  void *s1574c4f2[4];
  int s1574c4f3[2];
  void *s1574c4f4;
  ::S3221C4_nt s1574c4f5;
  void *s1574c4f6[2];
  virtual  ~S1574C4(); // _ZN7S1574C4D1Ev
  virtual void  v8(); // _ZN7S1574C42v8Ev
  virtual void  v9(); // _ZN7S1574C42v9Ev
  virtual void  v10(); // _ZN7S1574C43v10Ev
  virtual void  v11(); // _ZN7S1574C43v11Ev
  virtual void  v12(); // _ZN7S1574C43v12Ev
  virtual void  v13(); // _ZN7S1574C43v13Ev
  virtual void  v14(); // _ZN7S1574C43v14Ev
  virtual void  v15(); // _ZN7S1574C43v15Ev
  virtual void  v16(); // _ZN7S1574C43v16Ev
  virtual void  v17(); // _ZN7S1574C43v17Ev
  virtual void  v18(); // _ZN7S1574C43v18Ev
  virtual void  v19(); // _ZN7S1574C43v19Ev
  virtual void  v20(); // _ZN7S1574C43v20Ev
  virtual void  v21(); // _ZN7S1574C43v21Ev
  virtual void  v22(); // _ZN7S1574C43v22Ev
  virtual void  v23(); // _ZN7S1574C43v23Ev
  virtual void  v24(); // _ZN7S1574C43v24Ev
  virtual void  v25(); // _ZN7S1574C43v25Ev
  virtual void  v26(); // _ZN7S1574C43v26Ev
  virtual void  v27(); // _ZN7S1574C43v27Ev
  virtual void  v28(); // _ZN7S1574C43v28Ev
  virtual void  v29(); // _ZN7S1574C43v29Ev
  virtual void  v30(); // _ZN7S1574C43v30Ev
  virtual void  v31(); // _ZN7S1574C43v31Ev
  virtual void  v32(); // _ZN7S1574C43v32Ev
  virtual void  v33(); // _ZN7S1574C43v33Ev
  virtual void  v34(); // _ZN7S1574C43v34Ev
  virtual void  v35(); // _ZN7S1574C43v35Ev
  virtual void  v36(); // _ZN7S1574C43v36Ev
  virtual void  v37(); // _ZN7S1574C43v37Ev
  virtual void  v38(); // _ZN7S1574C43v38Ev
  virtual void  v39(); // _ZN7S1574C43v39Ev
  virtual void  v40(); // _ZN7S1574C43v40Ev
  virtual void  v41(); // _ZN7S1574C43v41Ev
  virtual void  v42(); // _ZN7S1574C43v42Ev
  virtual void  v43(); // _ZN7S1574C43v43Ev
  virtual void  v44(); // _ZN7S1574C43v44Ev
  virtual void  v45(); // _ZN7S1574C43v45Ev
  virtual void  v46(); // _ZN7S1574C43v46Ev
  virtual void  v47(); // _ZN7S1574C43v47Ev
  virtual void  v48(); // _ZN7S1574C43v48Ev
  virtual void  v49(); // _ZN7S1574C43v49Ev
  virtual void  v50(); // _ZN7S1574C43v50Ev
  virtual void  v51(); // _ZN7S1574C43v51Ev
  virtual void  v52(); // _ZN7S1574C43v52Ev
  virtual void  v53(); // _ZN7S1574C43v53Ev
  virtual void  v54(); // _ZN7S1574C43v54Ev
  virtual void  v55(); // _ZN7S1574C43v55Ev
  virtual void  v56(); // _ZN7S1574C43v56Ev
  virtual void  v57(); // _ZN7S1574C43v57Ev
  virtual void  v58(); // _ZN7S1574C43v58Ev
  virtual void  v59(); // _ZN7S1574C43v59Ev
  virtual void  v60(); // _ZN7S1574C43v60Ev
  virtual void  v61(); // _ZN7S1574C43v61Ev
  virtual void  v62(); // _ZN7S1574C43v62Ev
  virtual void  v63(); // _ZN7S1574C43v63Ev
  virtual void  v64(); // _ZN7S1574C43v64Ev
  virtual void  v65(); // _ZN7S1574C43v65Ev
  virtual void  v66(); // _ZN7S1574C43v66Ev
  virtual void  v67(); // _ZN7S1574C43v67Ev
  virtual void  v68(); // _ZN7S1574C43v68Ev
  virtual void  v69(); // _ZN7S1574C43v69Ev
  virtual void  v70(); // _ZN7S1574C43v70Ev
  virtual void  v71(); // _ZN7S1574C43v71Ev
  S1574C4(); // tgen
};
//SIG(-1 S1574C4) 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]}


 S1574C4 ::~S1574C4(){ note_dtor("S1574C4", this);}
void  S1574C4 ::v8(){vfunc_called(this, "_ZN7S1574C42v8Ev");}
void  S1574C4 ::v9(){vfunc_called(this, "_ZN7S1574C42v9Ev");}
void  S1574C4 ::v10(){vfunc_called(this, "_ZN7S1574C43v10Ev");}
void  S1574C4 ::v11(){vfunc_called(this, "_ZN7S1574C43v11Ev");}
void  S1574C4 ::v12(){vfunc_called(this, "_ZN7S1574C43v12Ev");}
void  S1574C4 ::v13(){vfunc_called(this, "_ZN7S1574C43v13Ev");}
void  S1574C4 ::v14(){vfunc_called(this, "_ZN7S1574C43v14Ev");}
void  S1574C4 ::v15(){vfunc_called(this, "_ZN7S1574C43v15Ev");}
void  S1574C4 ::v16(){vfunc_called(this, "_ZN7S1574C43v16Ev");}
void  S1574C4 ::v17(){vfunc_called(this, "_ZN7S1574C43v17Ev");}
void  S1574C4 ::v18(){vfunc_called(this, "_ZN7S1574C43v18Ev");}
void  S1574C4 ::v19(){vfunc_called(this, "_ZN7S1574C43v19Ev");}
void  S1574C4 ::v20(){vfunc_called(this, "_ZN7S1574C43v20Ev");}
void  S1574C4 ::v21(){vfunc_called(this, "_ZN7S1574C43v21Ev");}
void  S1574C4 ::v22(){vfunc_called(this, "_ZN7S1574C43v22Ev");}
void  S1574C4 ::v23(){vfunc_called(this, "_ZN7S1574C43v23Ev");}
void  S1574C4 ::v24(){vfunc_called(this, "_ZN7S1574C43v24Ev");}
void  S1574C4 ::v25(){vfunc_called(this, "_ZN7S1574C43v25Ev");}
void  S1574C4 ::v26(){vfunc_called(this, "_ZN7S1574C43v26Ev");}
void  S1574C4 ::v27(){vfunc_called(this, "_ZN7S1574C43v27Ev");}
void  S1574C4 ::v28(){vfunc_called(this, "_ZN7S1574C43v28Ev");}
void  S1574C4 ::v29(){vfunc_called(this, "_ZN7S1574C43v29Ev");}
void  S1574C4 ::v30(){vfunc_called(this, "_ZN7S1574C43v30Ev");}
void  S1574C4 ::v31(){vfunc_called(this, "_ZN7S1574C43v31Ev");}
void  S1574C4 ::v32(){vfunc_called(this, "_ZN7S1574C43v32Ev");}
void  S1574C4 ::v33(){vfunc_called(this, "_ZN7S1574C43v33Ev");}
void  S1574C4 ::v34(){vfunc_called(this, "_ZN7S1574C43v34Ev");}
void  S1574C4 ::v35(){vfunc_called(this, "_ZN7S1574C43v35Ev");}
void  S1574C4 ::v36(){vfunc_called(this, "_ZN7S1574C43v36Ev");}
void  S1574C4 ::v37(){vfunc_called(this, "_ZN7S1574C43v37Ev");}
void  S1574C4 ::v38(){vfunc_called(this, "_ZN7S1574C43v38Ev");}
void  S1574C4 ::v39(){vfunc_called(this, "_ZN7S1574C43v39Ev");}
void  S1574C4 ::v40(){vfunc_called(this, "_ZN7S1574C43v40Ev");}
void  S1574C4 ::v41(){vfunc_called(this, "_ZN7S1574C43v41Ev");}
void  S1574C4 ::v42(){vfunc_called(this, "_ZN7S1574C43v42Ev");}
void  S1574C4 ::v43(){vfunc_called(this, "_ZN7S1574C43v43Ev");}
void  S1574C4 ::v44(){vfunc_called(this, "_ZN7S1574C43v44Ev");}
void  S1574C4 ::v45(){vfunc_called(this, "_ZN7S1574C43v45Ev");}
void  S1574C4 ::v46(){vfunc_called(this, "_ZN7S1574C43v46Ev");}
void  S1574C4 ::v47(){vfunc_called(this, "_ZN7S1574C43v47Ev");}
void  S1574C4 ::v48(){vfunc_called(this, "_ZN7S1574C43v48Ev");}
void  S1574C4 ::v49(){vfunc_called(this, "_ZN7S1574C43v49Ev");}
void  S1574C4 ::v50(){vfunc_called(this, "_ZN7S1574C43v50Ev");}
void  S1574C4 ::v51(){vfunc_called(this, "_ZN7S1574C43v51Ev");}
void  S1574C4 ::v52(){vfunc_called(this, "_ZN7S1574C43v52Ev");}
void  S1574C4 ::v53(){vfunc_called(this, "_ZN7S1574C43v53Ev");}
void  S1574C4 ::v54(){vfunc_called(this, "_ZN7S1574C43v54Ev");}
void  S1574C4 ::v55(){vfunc_called(this, "_ZN7S1574C43v55Ev");}
void  S1574C4 ::v56(){vfunc_called(this, "_ZN7S1574C43v56Ev");}
void  S1574C4 ::v57(){vfunc_called(this, "_ZN7S1574C43v57Ev");}
void  S1574C4 ::v58(){vfunc_called(this, "_ZN7S1574C43v58Ev");}
void  S1574C4 ::v59(){vfunc_called(this, "_ZN7S1574C43v59Ev");}
void  S1574C4 ::v60(){vfunc_called(this, "_ZN7S1574C43v60Ev");}
void  S1574C4 ::v61(){vfunc_called(this, "_ZN7S1574C43v61Ev");}
void  S1574C4 ::v62(){vfunc_called(this, "_ZN7S1574C43v62Ev");}
void  S1574C4 ::v63(){vfunc_called(this, "_ZN7S1574C43v63Ev");}
void  S1574C4 ::v64(){vfunc_called(this, "_ZN7S1574C43v64Ev");}
void  S1574C4 ::v65(){vfunc_called(this, "_ZN7S1574C43v65Ev");}
void  S1574C4 ::v66(){vfunc_called(this, "_ZN7S1574C43v66Ev");}
void  S1574C4 ::v67(){vfunc_called(this, "_ZN7S1574C43v67Ev");}
void  S1574C4 ::v68(){vfunc_called(this, "_ZN7S1574C43v68Ev");}
void  S1574C4 ::v69(){vfunc_called(this, "_ZN7S1574C43v69Ev");}
void  S1574C4 ::v70(){vfunc_called(this, "_ZN7S1574C43v70Ev");}
void  S1574C4 ::v71(){vfunc_called(this, "_ZN7S1574C43v71Ev");}
S1574C4 ::S1574C4(){ note_ctor("S1574C4", this);} // tgen

static void Test_S1574C4()
{
  extern Class_Descriptor cd_S1574C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1574C4, buf);
    S1574C4 *dp, &lv = *(dp=new (buf) S1574C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1574C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1574C4)");
    check_field_offset(lv, s1574c4f0, ABISELECT(8,4), "S1574C4.s1574c4f0");
    check_field_offset(lv, s1574c4f1, ABISELECT(16,8), "S1574C4.s1574c4f1");
    check_field_offset(lv, s1574c4f2, ABISELECT(24,16), "S1574C4.s1574c4f2");
    check_field_offset(lv, s1574c4f3, ABISELECT(56,32), "S1574C4.s1574c4f3");
    check_field_offset(lv, s1574c4f4, ABISELECT(64,40), "S1574C4.s1574c4f4");
    check_field_offset(lv, s1574c4f5, ABISELECT(72,44), "S1574C4.s1574c4f5");
    check_field_offset(lv, s1574c4f6, ABISELECT(80,52), "S1574C4.s1574c4f6");
    test_class_info(&lv, &cd_S1574C4);
    dp->~S1574C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1574C4(Test_S1574C4, "S1574C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1574C4C1Ev();
extern void _ZN7S1574C4D1Ev();
Name_Map name_map_S1574C4[] = {
  NSPAIR(_ZN7S1574C4C1Ev),
  NSPAIR(_ZN7S1574C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1574C4[];
extern void _ZN7S1574C4D1Ev();
extern void _ZN7S1574C4D0Ev();
extern void _ZN7S1574C42v8Ev();
extern void _ZN7S1574C42v9Ev();
extern void _ZN7S1574C43v10Ev();
extern void _ZN7S1574C43v11Ev();
extern void _ZN7S1574C43v12Ev();
extern void _ZN7S1574C43v13Ev();
extern void _ZN7S1574C43v14Ev();
extern void _ZN7S1574C43v15Ev();
extern void _ZN7S1574C43v16Ev();
extern void _ZN7S1574C43v17Ev();
extern void _ZN7S1574C43v18Ev();
extern void _ZN7S1574C43v19Ev();
extern void _ZN7S1574C43v20Ev();
extern void _ZN7S1574C43v21Ev();
extern void _ZN7S1574C43v22Ev();
extern void _ZN7S1574C43v23Ev();
extern void _ZN7S1574C43v24Ev();
extern void _ZN7S1574C43v25Ev();
extern void _ZN7S1574C43v26Ev();
extern void _ZN7S1574C43v27Ev();
extern void _ZN7S1574C43v28Ev();
extern void _ZN7S1574C43v29Ev();
extern void _ZN7S1574C43v30Ev();
extern void _ZN7S1574C43v31Ev();
extern void _ZN7S1574C43v32Ev();
extern void _ZN7S1574C43v33Ev();
extern void _ZN7S1574C43v34Ev();
extern void _ZN7S1574C43v35Ev();
extern void _ZN7S1574C43v36Ev();
extern void _ZN7S1574C43v37Ev();
extern void _ZN7S1574C43v38Ev();
extern void _ZN7S1574C43v39Ev();
extern void _ZN7S1574C43v40Ev();
extern void _ZN7S1574C43v41Ev();
extern void _ZN7S1574C43v42Ev();
extern void _ZN7S1574C43v43Ev();
extern void _ZN7S1574C43v44Ev();
extern void _ZN7S1574C43v45Ev();
extern void _ZN7S1574C43v46Ev();
extern void _ZN7S1574C43v47Ev();
extern void _ZN7S1574C43v48Ev();
extern void _ZN7S1574C43v49Ev();
extern void _ZN7S1574C43v50Ev();
extern void _ZN7S1574C43v51Ev();
extern void _ZN7S1574C43v52Ev();
extern void _ZN7S1574C43v53Ev();
extern void _ZN7S1574C43v54Ev();
extern void _ZN7S1574C43v55Ev();
extern void _ZN7S1574C43v56Ev();
extern void _ZN7S1574C43v57Ev();
extern void _ZN7S1574C43v58Ev();
extern void _ZN7S1574C43v59Ev();
extern void _ZN7S1574C43v60Ev();
extern void _ZN7S1574C43v61Ev();
extern void _ZN7S1574C43v62Ev();
extern void _ZN7S1574C43v63Ev();
extern void _ZN7S1574C43v64Ev();
extern void _ZN7S1574C43v65Ev();
extern void _ZN7S1574C43v66Ev();
extern void _ZN7S1574C43v67Ev();
extern void _ZN7S1574C43v68Ev();
extern void _ZN7S1574C43v69Ev();
extern void _ZN7S1574C43v70Ev();
extern void _ZN7S1574C43v71Ev();
static  VTBL_ENTRY vtc_S1574C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1574C4[0]),
  (VTBL_ENTRY)&_ZN7S1574C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1574C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1574C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1574C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v71Ev,
};
extern VTBL_ENTRY _ZTI7S1574C4[];
extern  VTBL_ENTRY _ZTV7S1574C4[];
Class_Descriptor cd_S1574C4 = {  "S1574C4", // class name
  0,0,//no base classes
  &(vtc_S1574C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1574C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1574C4),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  S1574C3_nt  : S1574C4 {
  unsigned int s1574c3f0:1;
  unsigned int s1574c3f1:1;
  unsigned int s1574c3f2:1;
  unsigned int s1574c3f3:1;
  unsigned int s1574c3f4:1;
  unsigned int s1574c3f5:1;
  unsigned int s1574c3f6:1;
  ::S239C12_nt s1574c3f7;
  virtual  ~S1574C3_nt(); // _ZN10S1574C3_ntD1Ev
  virtual void  v72(); // _ZN10S1574C3_nt3v72Ev
  virtual void  v73(); // _ZN10S1574C3_nt3v73Ev
  virtual void  v74(); // _ZN10S1574C3_nt3v74Ev
  virtual void  v75(); // _ZN10S1574C3_nt3v75Ev
  virtual void  v76(); // _ZN10S1574C3_nt3v76Ev
  virtual void  v77(); // _ZN10S1574C3_nt3v77Ev
  virtual void  v78(); // _ZN10S1574C3_nt3v78Ev
  virtual void  v79(); // _ZN10S1574C3_nt3v79Ev
  virtual void  v80(); // _ZN10S1574C3_nt3v80Ev
  virtual void  v81(); // _ZN10S1574C3_nt3v81Ev
  virtual void  v82(); // _ZN10S1574C3_nt3v82Ev
  virtual void  v83(); // _ZN10S1574C3_nt3v83Ev
  virtual void  v84(); // _ZN10S1574C3_nt3v84Ev
  virtual void  v85(); // _ZN10S1574C3_nt3v85Ev
  virtual void  v86(); // _ZN10S1574C3_nt3v86Ev
  virtual void  v87(); // _ZN10S1574C3_nt3v87Ev
  virtual void  v88(); // _ZN10S1574C3_nt3v88Ev
  virtual void  v89(); // _ZN10S1574C3_nt3v89Ev
  virtual void  v90(); // _ZN10S1574C3_nt3v90Ev
  virtual void  v91(); // _ZN10S1574C3_nt3v91Ev
  S1574C3_nt(); // tgen
};
//SIG(-1 S1574C3_nt) C1{ BC2{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp 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 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1574C3_nt ::~S1574C3_nt(){ note_dtor("S1574C3_nt", this);}
void  S1574C3_nt ::v72(){vfunc_called(this, "_ZN10S1574C3_nt3v72Ev");}
void  S1574C3_nt ::v73(){vfunc_called(this, "_ZN10S1574C3_nt3v73Ev");}
void  S1574C3_nt ::v74(){vfunc_called(this, "_ZN10S1574C3_nt3v74Ev");}
void  S1574C3_nt ::v75(){vfunc_called(this, "_ZN10S1574C3_nt3v75Ev");}
void  S1574C3_nt ::v76(){vfunc_called(this, "_ZN10S1574C3_nt3v76Ev");}
void  S1574C3_nt ::v77(){vfunc_called(this, "_ZN10S1574C3_nt3v77Ev");}
void  S1574C3_nt ::v78(){vfunc_called(this, "_ZN10S1574C3_nt3v78Ev");}
void  S1574C3_nt ::v79(){vfunc_called(this, "_ZN10S1574C3_nt3v79Ev");}
void  S1574C3_nt ::v80(){vfunc_called(this, "_ZN10S1574C3_nt3v80Ev");}
void  S1574C3_nt ::v81(){vfunc_called(this, "_ZN10S1574C3_nt3v81Ev");}
void  S1574C3_nt ::v82(){vfunc_called(this, "_ZN10S1574C3_nt3v82Ev");}
void  S1574C3_nt ::v83(){vfunc_called(this, "_ZN10S1574C3_nt3v83Ev");}
void  S1574C3_nt ::v84(){vfunc_called(this, "_ZN10S1574C3_nt3v84Ev");}
void  S1574C3_nt ::v85(){vfunc_called(this, "_ZN10S1574C3_nt3v85Ev");}
void  S1574C3_nt ::v86(){vfunc_called(this, "_ZN10S1574C3_nt3v86Ev");}
void  S1574C3_nt ::v87(){vfunc_called(this, "_ZN10S1574C3_nt3v87Ev");}
void  S1574C3_nt ::v88(){vfunc_called(this, "_ZN10S1574C3_nt3v88Ev");}
void  S1574C3_nt ::v89(){vfunc_called(this, "_ZN10S1574C3_nt3v89Ev");}
void  S1574C3_nt ::v90(){vfunc_called(this, "_ZN10S1574C3_nt3v90Ev");}
void  S1574C3_nt ::v91(){vfunc_called(this, "_ZN10S1574C3_nt3v91Ev");}
S1574C3_nt ::S1574C3_nt(){ note_ctor("S1574C3_nt", this);} // tgen

//skip512 S1574C3_nt

#else // __cplusplus

extern void _ZN10S1574C3_ntC1Ev();
extern void _ZN10S1574C3_ntD1Ev();
Name_Map name_map_S1574C3_nt[] = {
  NSPAIR(_ZN10S1574C3_ntC1Ev),
  NSPAIR(_ZN10S1574C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1574C4;
extern VTBL_ENTRY _ZTI7S1574C4[];
extern  VTBL_ENTRY _ZTV7S1574C4[];
static Base_Class bases_S1574C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1574C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1574C3_nt[];
extern void _ZN10S1574C3_ntD1Ev();
extern void _ZN10S1574C3_ntD0Ev();
extern void _ZN7S1574C42v8Ev();
extern void _ZN7S1574C42v9Ev();
extern void _ZN7S1574C43v10Ev();
extern void _ZN7S1574C43v11Ev();
extern void _ZN7S1574C43v12Ev();
extern void _ZN7S1574C43v13Ev();
extern void _ZN7S1574C43v14Ev();
extern void _ZN7S1574C43v15Ev();
extern void _ZN7S1574C43v16Ev();
extern void _ZN7S1574C43v17Ev();
extern void _ZN7S1574C43v18Ev();
extern void _ZN7S1574C43v19Ev();
extern void _ZN7S1574C43v20Ev();
extern void _ZN7S1574C43v21Ev();
extern void _ZN7S1574C43v22Ev();
extern void _ZN7S1574C43v23Ev();
extern void _ZN7S1574C43v24Ev();
extern void _ZN7S1574C43v25Ev();
extern void _ZN7S1574C43v26Ev();
extern void _ZN7S1574C43v27Ev();
extern void _ZN7S1574C43v28Ev();
extern void _ZN7S1574C43v29Ev();
extern void _ZN7S1574C43v30Ev();
extern void _ZN7S1574C43v31Ev();
extern void _ZN7S1574C43v32Ev();
extern void _ZN7S1574C43v33Ev();
extern void _ZN7S1574C43v34Ev();
extern void _ZN7S1574C43v35Ev();
extern void _ZN7S1574C43v36Ev();
extern void _ZN7S1574C43v37Ev();
extern void _ZN7S1574C43v38Ev();
extern void _ZN7S1574C43v39Ev();
extern void _ZN7S1574C43v40Ev();
extern void _ZN7S1574C43v41Ev();
extern void _ZN7S1574C43v42Ev();
extern void _ZN7S1574C43v43Ev();
extern void _ZN7S1574C43v44Ev();
extern void _ZN7S1574C43v45Ev();
extern void _ZN7S1574C43v46Ev();
extern void _ZN7S1574C43v47Ev();
extern void _ZN7S1574C43v48Ev();
extern void _ZN7S1574C43v49Ev();
extern void _ZN7S1574C43v50Ev();
extern void _ZN7S1574C43v51Ev();
extern void _ZN7S1574C43v52Ev();
extern void _ZN7S1574C43v53Ev();
extern void _ZN7S1574C43v54Ev();
extern void _ZN7S1574C43v55Ev();
extern void _ZN7S1574C43v56Ev();
extern void _ZN7S1574C43v57Ev();
extern void _ZN7S1574C43v58Ev();
extern void _ZN7S1574C43v59Ev();
extern void _ZN7S1574C43v60Ev();
extern void _ZN7S1574C43v61Ev();
extern void _ZN7S1574C43v62Ev();
extern void _ZN7S1574C43v63Ev();
extern void _ZN7S1574C43v64Ev();
extern void _ZN7S1574C43v65Ev();
extern void _ZN7S1574C43v66Ev();
extern void _ZN7S1574C43v67Ev();
extern void _ZN7S1574C43v68Ev();
extern void _ZN7S1574C43v69Ev();
extern void _ZN7S1574C43v70Ev();
extern void _ZN7S1574C43v71Ev();
extern void _ZN10S1574C3_nt3v72Ev();
extern void _ZN10S1574C3_nt3v73Ev();
extern void _ZN10S1574C3_nt3v74Ev();
extern void _ZN10S1574C3_nt3v75Ev();
extern void _ZN10S1574C3_nt3v76Ev();
extern void _ZN10S1574C3_nt3v77Ev();
extern void _ZN10S1574C3_nt3v78Ev();
extern void _ZN10S1574C3_nt3v79Ev();
extern void _ZN10S1574C3_nt3v80Ev();
extern void _ZN10S1574C3_nt3v81Ev();
extern void _ZN10S1574C3_nt3v82Ev();
extern void _ZN10S1574C3_nt3v83Ev();
extern void _ZN10S1574C3_nt3v84Ev();
extern void _ZN10S1574C3_nt3v85Ev();
extern void _ZN10S1574C3_nt3v86Ev();
extern void _ZN10S1574C3_nt3v87Ev();
extern void _ZN10S1574C3_nt3v88Ev();
extern void _ZN10S1574C3_nt3v89Ev();
extern void _ZN10S1574C3_nt3v90Ev();
extern void _ZN10S1574C3_nt3v91Ev();
static  VTBL_ENTRY vtc_S1574C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1574C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1574C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1574C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1574C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v71Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v91Ev,
};
extern VTBL_ENTRY _ZTI10S1574C3_nt[];
VTBL_ENTRY *P__ZTI10S1574C3_nt = _ZTI10S1574C3_nt; 
extern  VTBL_ENTRY _ZTV10S1574C3_nt[];
Class_Descriptor cd_S1574C3_nt = {  "S1574C3_nt", // class name
  bases_S1574C3_nt, 1,
  &(vtc_S1574C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI10S1574C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1574C3_nt),88, //virtual function table var
  2, // 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  S1574C2  : S1574C3_nt {
  unsigned int s1574c2f0:1;
  virtual  ~S1574C2(); // _ZN7S1574C2D1Ev
  virtual void  v92(); // _ZN7S1574C23v92Ev
  virtual void  v93(); // _ZN7S1574C23v93Ev
  virtual void  v94(); // _ZN7S1574C23v94Ev
  virtual void  v95(); // _ZN7S1574C23v95Ev
  S1574C2(); // tgen
};
//SIG(-1 S1574C2) C1{ BC2{ BC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3 v4 Fi:1}


 S1574C2 ::~S1574C2(){ note_dtor("S1574C2", this);}
void  S1574C2 ::v92(){vfunc_called(this, "_ZN7S1574C23v92Ev");}
void  S1574C2 ::v93(){vfunc_called(this, "_ZN7S1574C23v93Ev");}
void  S1574C2 ::v94(){vfunc_called(this, "_ZN7S1574C23v94Ev");}
void  S1574C2 ::v95(){vfunc_called(this, "_ZN7S1574C23v95Ev");}
S1574C2 ::S1574C2(){ note_ctor("S1574C2", this);} // tgen

static void Test_S1574C2()
{
  extern Class_Descriptor cd_S1574C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1574C2, buf);
    S1574C2 *dp, &lv = *(dp=new (buf) S1574C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1574C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1574C2)");
    check_base_class_offset(lv, (S1574C4*)(S1574C3_nt*), 0, "S1574C2");
    check_base_class_offset(lv, (S1574C3_nt*), 0, "S1574C2");
    set_bf_and_test(lv, s1574c2f0, ABISELECT(98,62), 0, 1, 1, "S1574C2");
    test_class_info(&lv, &cd_S1574C2);
    dp->~S1574C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1574C2(Test_S1574C2, "S1574C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1574C2C1Ev();
extern void _ZN7S1574C2D1Ev();
Name_Map name_map_S1574C2[] = {
  NSPAIR(_ZN7S1574C2C1Ev),
  NSPAIR(_ZN7S1574C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1574C4;
extern VTBL_ENTRY _ZTI7S1574C4[];
extern  VTBL_ENTRY _ZTV7S1574C4[];
extern Class_Descriptor cd_S1574C3_nt;
extern VTBL_ENTRY _ZTI10S1574C3_nt[];
extern  VTBL_ENTRY _ZTV10S1574C3_nt[];
static Base_Class bases_S1574C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1574C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1574C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1574C2[];
extern void _ZN7S1574C2D1Ev();
extern void _ZN7S1574C2D0Ev();
extern void _ZN7S1574C42v8Ev();
extern void _ZN7S1574C42v9Ev();
extern void _ZN7S1574C43v10Ev();
extern void _ZN7S1574C43v11Ev();
extern void _ZN7S1574C43v12Ev();
extern void _ZN7S1574C43v13Ev();
extern void _ZN7S1574C43v14Ev();
extern void _ZN7S1574C43v15Ev();
extern void _ZN7S1574C43v16Ev();
extern void _ZN7S1574C43v17Ev();
extern void _ZN7S1574C43v18Ev();
extern void _ZN7S1574C43v19Ev();
extern void _ZN7S1574C43v20Ev();
extern void _ZN7S1574C43v21Ev();
extern void _ZN7S1574C43v22Ev();
extern void _ZN7S1574C43v23Ev();
extern void _ZN7S1574C43v24Ev();
extern void _ZN7S1574C43v25Ev();
extern void _ZN7S1574C43v26Ev();
extern void _ZN7S1574C43v27Ev();
extern void _ZN7S1574C43v28Ev();
extern void _ZN7S1574C43v29Ev();
extern void _ZN7S1574C43v30Ev();
extern void _ZN7S1574C43v31Ev();
extern void _ZN7S1574C43v32Ev();
extern void _ZN7S1574C43v33Ev();
extern void _ZN7S1574C43v34Ev();
extern void _ZN7S1574C43v35Ev();
extern void _ZN7S1574C43v36Ev();
extern void _ZN7S1574C43v37Ev();
extern void _ZN7S1574C43v38Ev();
extern void _ZN7S1574C43v39Ev();
extern void _ZN7S1574C43v40Ev();
extern void _ZN7S1574C43v41Ev();
extern void _ZN7S1574C43v42Ev();
extern void _ZN7S1574C43v43Ev();
extern void _ZN7S1574C43v44Ev();
extern void _ZN7S1574C43v45Ev();
extern void _ZN7S1574C43v46Ev();
extern void _ZN7S1574C43v47Ev();
extern void _ZN7S1574C43v48Ev();
extern void _ZN7S1574C43v49Ev();
extern void _ZN7S1574C43v50Ev();
extern void _ZN7S1574C43v51Ev();
extern void _ZN7S1574C43v52Ev();
extern void _ZN7S1574C43v53Ev();
extern void _ZN7S1574C43v54Ev();
extern void _ZN7S1574C43v55Ev();
extern void _ZN7S1574C43v56Ev();
extern void _ZN7S1574C43v57Ev();
extern void _ZN7S1574C43v58Ev();
extern void _ZN7S1574C43v59Ev();
extern void _ZN7S1574C43v60Ev();
extern void _ZN7S1574C43v61Ev();
extern void _ZN7S1574C43v62Ev();
extern void _ZN7S1574C43v63Ev();
extern void _ZN7S1574C43v64Ev();
extern void _ZN7S1574C43v65Ev();
extern void _ZN7S1574C43v66Ev();
extern void _ZN7S1574C43v67Ev();
extern void _ZN7S1574C43v68Ev();
extern void _ZN7S1574C43v69Ev();
extern void _ZN7S1574C43v70Ev();
extern void _ZN7S1574C43v71Ev();
extern void _ZN10S1574C3_nt3v72Ev();
extern void _ZN10S1574C3_nt3v73Ev();
extern void _ZN10S1574C3_nt3v74Ev();
extern void _ZN10S1574C3_nt3v75Ev();
extern void _ZN10S1574C3_nt3v76Ev();
extern void _ZN10S1574C3_nt3v77Ev();
extern void _ZN10S1574C3_nt3v78Ev();
extern void _ZN10S1574C3_nt3v79Ev();
extern void _ZN10S1574C3_nt3v80Ev();
extern void _ZN10S1574C3_nt3v81Ev();
extern void _ZN10S1574C3_nt3v82Ev();
extern void _ZN10S1574C3_nt3v83Ev();
extern void _ZN10S1574C3_nt3v84Ev();
extern void _ZN10S1574C3_nt3v85Ev();
extern void _ZN10S1574C3_nt3v86Ev();
extern void _ZN10S1574C3_nt3v87Ev();
extern void _ZN10S1574C3_nt3v88Ev();
extern void _ZN10S1574C3_nt3v89Ev();
extern void _ZN10S1574C3_nt3v90Ev();
extern void _ZN10S1574C3_nt3v91Ev();
extern void _ZN7S1574C23v92Ev();
extern void _ZN7S1574C23v93Ev();
extern void _ZN7S1574C23v94Ev();
extern void _ZN7S1574C23v95Ev();
static  VTBL_ENTRY vtc_S1574C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1574C2[0]),
  (VTBL_ENTRY)&_ZN7S1574C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1574C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1574C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1574C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v71Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN7S1574C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1574C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1574C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1574C23v95Ev,
};
extern VTBL_ENTRY _ZTI7S1574C2[];
extern  VTBL_ENTRY _ZTV7S1574C2[];
Class_Descriptor cd_S1574C2 = {  "S1574C2", // class name
  bases_S1574C2, 2,
  &(vtc_S1574C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1574C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1574C2),92, //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  S1574C8_nt  {
  char s1574c8f0[4];
  ::S3221C17 s1574c8f1;
  int s1574c8f2[2];
  void  mf1574c8(); // _ZN10S1574C8_nt8mf1574c8Ev
};
//SIG(-1 S1574C8_nt) C1{ m Fc[4] FC2{ BC3{ BC4{ m Fp Fi[2]}}} Fi[2]}


void  S1574C8_nt ::mf1574c8(){}

//skip512 S1574C8_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S1574C7_nt  : S1574C8_nt {
  void *s1574c7f0;
};
//SIG(-1 S1574C7_nt) C1{ BC2{ m Fc[4] FC3{ BC4{ BC5{ m Fp Fi[2]}}} Fi[2]} Fp}



//skip512 S1574C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S1574C8_nt;
static Base_Class bases_S1574C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1574C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S1574C1  : S1574C2 {
  int s1574c1f0;
  ::S1574C7_nt s1574c1f1;
  unsigned int s1574c1f2:1;
  int s1574c1f3;
  virtual  ~S1574C1(); // _ZN7S1574C1D1Ev
  virtual void  v1(); // _ZN7S1574C12v1Ev
  virtual void  v2(); // _ZN7S1574C12v2Ev
  virtual void  v3(); // _ZN7S1574C12v3Ev
  virtual void  v4(); // _ZN7S1574C12v4Ev
  virtual void  v5(); // _ZN7S1574C12v5Ev
  virtual void  v6(); // _ZN7S1574C12v6Ev
  virtual void  v7(); // _ZN7S1574C12v7Ev
  S1574C1(); // tgen
};
//SIG(1 S1574C1) 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]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v92 v93 v94 v95 Fi:1} vd v1 v2 v3 v4 v5 v6 v7 Fi FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} Fi:1 Fi}


 S1574C1 ::~S1574C1(){ note_dtor("S1574C1", this);}
void  S1574C1 ::v1(){vfunc_called(this, "_ZN7S1574C12v1Ev");}
void  S1574C1 ::v2(){vfunc_called(this, "_ZN7S1574C12v2Ev");}
void  S1574C1 ::v3(){vfunc_called(this, "_ZN7S1574C12v3Ev");}
void  S1574C1 ::v4(){vfunc_called(this, "_ZN7S1574C12v4Ev");}
void  S1574C1 ::v5(){vfunc_called(this, "_ZN7S1574C12v5Ev");}
void  S1574C1 ::v6(){vfunc_called(this, "_ZN7S1574C12v6Ev");}
void  S1574C1 ::v7(){vfunc_called(this, "_ZN7S1574C12v7Ev");}
S1574C1 ::S1574C1(){ note_ctor("S1574C1", this);} // tgen

static void Test_S1574C1()
{
  extern Class_Descriptor cd_S1574C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,27)];
    init_test(&cd_S1574C1, buf);
    S1574C1 *dp, &lv = *(dp=new (buf) S1574C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,104), "sizeof(S1574C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1574C1)");
    check_base_class_offset(lv, (S1574C4*)(S1574C3_nt*)(S1574C2*), 0, "S1574C1");
    check_base_class_offset(lv, (S1574C3_nt*)(S1574C2*), 0, "S1574C1");
    check_base_class_offset(lv, (S1574C2*), 0, "S1574C1");
    check_field_offset(lv, s1574c1f0, ABISELECT(100,64), "S1574C1.s1574c1f0");
    check_field_offset(lv, s1574c1f1, ABISELECT(104,68), "S1574C1.s1574c1f1");
    set_bf_and_test(lv, s1574c1f2, ABISELECT(144,96), 0, 1, 1, "S1574C1");
    check_field_offset(lv, s1574c1f3, ABISELECT(148,100), "S1574C1.s1574c1f3");
    test_class_info(&lv, &cd_S1574C1);
    dp->~S1574C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1574C1(Test_S1574C1, "S1574C1", ABISELECT(152,104));

#else // __cplusplus

extern void _ZN7S1574C1C1Ev();
extern void _ZN7S1574C1D1Ev();
Name_Map name_map_S1574C1[] = {
  NSPAIR(_ZN7S1574C1C1Ev),
  NSPAIR(_ZN7S1574C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1574C4;
extern VTBL_ENTRY _ZTI7S1574C4[];
extern  VTBL_ENTRY _ZTV7S1574C4[];
extern Class_Descriptor cd_S1574C3_nt;
extern VTBL_ENTRY _ZTI10S1574C3_nt[];
extern  VTBL_ENTRY _ZTV10S1574C3_nt[];
extern Class_Descriptor cd_S1574C2;
extern VTBL_ENTRY _ZTI7S1574C2[];
extern  VTBL_ENTRY _ZTV7S1574C2[];
static Base_Class bases_S1574C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1574C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1574C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1574C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1574C1[];
extern void _ZN7S1574C1D1Ev();
extern void _ZN7S1574C1D0Ev();
extern void _ZN7S1574C42v8Ev();
extern void _ZN7S1574C42v9Ev();
extern void _ZN7S1574C43v10Ev();
extern void _ZN7S1574C43v11Ev();
extern void _ZN7S1574C43v12Ev();
extern void _ZN7S1574C43v13Ev();
extern void _ZN7S1574C43v14Ev();
extern void _ZN7S1574C43v15Ev();
extern void _ZN7S1574C43v16Ev();
extern void _ZN7S1574C43v17Ev();
extern void _ZN7S1574C43v18Ev();
extern void _ZN7S1574C43v19Ev();
extern void _ZN7S1574C43v20Ev();
extern void _ZN7S1574C43v21Ev();
extern void _ZN7S1574C43v22Ev();
extern void _ZN7S1574C43v23Ev();
extern void _ZN7S1574C43v24Ev();
extern void _ZN7S1574C43v25Ev();
extern void _ZN7S1574C43v26Ev();
extern void _ZN7S1574C43v27Ev();
extern void _ZN7S1574C43v28Ev();
extern void _ZN7S1574C43v29Ev();
extern void _ZN7S1574C43v30Ev();
extern void _ZN7S1574C43v31Ev();
extern void _ZN7S1574C43v32Ev();
extern void _ZN7S1574C43v33Ev();
extern void _ZN7S1574C43v34Ev();
extern void _ZN7S1574C43v35Ev();
extern void _ZN7S1574C43v36Ev();
extern void _ZN7S1574C43v37Ev();
extern void _ZN7S1574C43v38Ev();
extern void _ZN7S1574C43v39Ev();
extern void _ZN7S1574C43v40Ev();
extern void _ZN7S1574C43v41Ev();
extern void _ZN7S1574C43v42Ev();
extern void _ZN7S1574C43v43Ev();
extern void _ZN7S1574C43v44Ev();
extern void _ZN7S1574C43v45Ev();
extern void _ZN7S1574C43v46Ev();
extern void _ZN7S1574C43v47Ev();
extern void _ZN7S1574C43v48Ev();
extern void _ZN7S1574C43v49Ev();
extern void _ZN7S1574C43v50Ev();
extern void _ZN7S1574C43v51Ev();
extern void _ZN7S1574C43v52Ev();
extern void _ZN7S1574C43v53Ev();
extern void _ZN7S1574C43v54Ev();
extern void _ZN7S1574C43v55Ev();
extern void _ZN7S1574C43v56Ev();
extern void _ZN7S1574C43v57Ev();
extern void _ZN7S1574C43v58Ev();
extern void _ZN7S1574C43v59Ev();
extern void _ZN7S1574C43v60Ev();
extern void _ZN7S1574C43v61Ev();
extern void _ZN7S1574C43v62Ev();
extern void _ZN7S1574C43v63Ev();
extern void _ZN7S1574C43v64Ev();
extern void _ZN7S1574C43v65Ev();
extern void _ZN7S1574C43v66Ev();
extern void _ZN7S1574C43v67Ev();
extern void _ZN7S1574C43v68Ev();
extern void _ZN7S1574C43v69Ev();
extern void _ZN7S1574C43v70Ev();
extern void _ZN7S1574C43v71Ev();
extern void _ZN10S1574C3_nt3v72Ev();
extern void _ZN10S1574C3_nt3v73Ev();
extern void _ZN10S1574C3_nt3v74Ev();
extern void _ZN10S1574C3_nt3v75Ev();
extern void _ZN10S1574C3_nt3v76Ev();
extern void _ZN10S1574C3_nt3v77Ev();
extern void _ZN10S1574C3_nt3v78Ev();
extern void _ZN10S1574C3_nt3v79Ev();
extern void _ZN10S1574C3_nt3v80Ev();
extern void _ZN10S1574C3_nt3v81Ev();
extern void _ZN10S1574C3_nt3v82Ev();
extern void _ZN10S1574C3_nt3v83Ev();
extern void _ZN10S1574C3_nt3v84Ev();
extern void _ZN10S1574C3_nt3v85Ev();
extern void _ZN10S1574C3_nt3v86Ev();
extern void _ZN10S1574C3_nt3v87Ev();
extern void _ZN10S1574C3_nt3v88Ev();
extern void _ZN10S1574C3_nt3v89Ev();
extern void _ZN10S1574C3_nt3v90Ev();
extern void _ZN10S1574C3_nt3v91Ev();
extern void _ZN7S1574C23v92Ev();
extern void _ZN7S1574C23v93Ev();
extern void _ZN7S1574C23v94Ev();
extern void _ZN7S1574C23v95Ev();
extern void _ZN7S1574C12v1Ev();
extern void _ZN7S1574C12v2Ev();
extern void _ZN7S1574C12v3Ev();
extern void _ZN7S1574C12v4Ev();
extern void _ZN7S1574C12v5Ev();
extern void _ZN7S1574C12v6Ev();
extern void _ZN7S1574C12v7Ev();
static  VTBL_ENTRY vtc_S1574C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1574C1[0]),
  (VTBL_ENTRY)&_ZN7S1574C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1574C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1574C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1574C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1574C43v71Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1574C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN7S1574C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1574C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1574C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1574C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1574C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1574C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1574C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1574C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1574C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1574C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1574C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S1574C1[];
extern  VTBL_ENTRY _ZTV7S1574C1[];
Class_Descriptor cd_S1574C1 = {  "S1574C1", // class name
  bases_S1574C1, 3,
  &(vtc_S1574C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,104), // object size
  NSPAIRA(_ZTI7S1574C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1574C1),99, //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  S3373C3  {
  int s3373c3f0;
  __tsi64 s3373c3f1;
  void *s3373c3f2[4];
  int s3373c3f3[2];
  void *s3373c3f4;
  ::S3221C4_nt s3373c3f5;
  void *s3373c3f6[2];
  virtual  ~S3373C3(); // _ZN7S3373C3D1Ev
  virtual void  v6(); // _ZN7S3373C32v6Ev
  virtual void  v7(); // _ZN7S3373C32v7Ev
  virtual void  v8(); // _ZN7S3373C32v8Ev
  virtual void  v9(); // _ZN7S3373C32v9Ev
  virtual void  v10(); // _ZN7S3373C33v10Ev
  virtual void  v11(); // _ZN7S3373C33v11Ev
  virtual void  v12(); // _ZN7S3373C33v12Ev
  virtual void  v13(); // _ZN7S3373C33v13Ev
  virtual void  v14(); // _ZN7S3373C33v14Ev
  virtual void  v15(); // _ZN7S3373C33v15Ev
  virtual void  v16(); // _ZN7S3373C33v16Ev
  virtual void  v17(); // _ZN7S3373C33v17Ev
  virtual void  v18(); // _ZN7S3373C33v18Ev
  virtual void  v19(); // _ZN7S3373C33v19Ev
  virtual void  v20(); // _ZN7S3373C33v20Ev
  virtual void  v21(); // _ZN7S3373C33v21Ev
  virtual void  v22(); // _ZN7S3373C33v22Ev
  virtual void  v23(); // _ZN7S3373C33v23Ev
  virtual void  v24(); // _ZN7S3373C33v24Ev
  virtual void  v25(); // _ZN7S3373C33v25Ev
  virtual void  v26(); // _ZN7S3373C33v26Ev
  virtual void  v27(); // _ZN7S3373C33v27Ev
  virtual void  v28(); // _ZN7S3373C33v28Ev
  virtual void  v29(); // _ZN7S3373C33v29Ev
  virtual void  v30(); // _ZN7S3373C33v30Ev
  virtual void  v31(); // _ZN7S3373C33v31Ev
  virtual void  v32(); // _ZN7S3373C33v32Ev
  virtual void  v33(); // _ZN7S3373C33v33Ev
  virtual void  v34(); // _ZN7S3373C33v34Ev
  virtual void  v35(); // _ZN7S3373C33v35Ev
  virtual void  v36(); // _ZN7S3373C33v36Ev
  virtual void  v37(); // _ZN7S3373C33v37Ev
  virtual void  v38(); // _ZN7S3373C33v38Ev
  virtual void  v39(); // _ZN7S3373C33v39Ev
  virtual void  v40(); // _ZN7S3373C33v40Ev
  virtual void  v41(); // _ZN7S3373C33v41Ev
  virtual void  v42(); // _ZN7S3373C33v42Ev
  virtual void  v43(); // _ZN7S3373C33v43Ev
  virtual void  v44(); // _ZN7S3373C33v44Ev
  virtual void  v45(); // _ZN7S3373C33v45Ev
  virtual void  v46(); // _ZN7S3373C33v46Ev
  virtual void  v47(); // _ZN7S3373C33v47Ev
  virtual void  v48(); // _ZN7S3373C33v48Ev
  virtual void  v49(); // _ZN7S3373C33v49Ev
  virtual void  v50(); // _ZN7S3373C33v50Ev
  virtual void  v51(); // _ZN7S3373C33v51Ev
  virtual void  v52(); // _ZN7S3373C33v52Ev
  virtual void  v53(); // _ZN7S3373C33v53Ev
  virtual void  v54(); // _ZN7S3373C33v54Ev
  virtual void  v55(); // _ZN7S3373C33v55Ev
  virtual void  v56(); // _ZN7S3373C33v56Ev
  virtual void  v57(); // _ZN7S3373C33v57Ev
  virtual void  v58(); // _ZN7S3373C33v58Ev
  virtual void  v59(); // _ZN7S3373C33v59Ev
  virtual void  v60(); // _ZN7S3373C33v60Ev
  virtual void  v61(); // _ZN7S3373C33v61Ev
  virtual void  v62(); // _ZN7S3373C33v62Ev
  virtual void  v63(); // _ZN7S3373C33v63Ev
  virtual void  v64(); // _ZN7S3373C33v64Ev
  virtual void  v65(); // _ZN7S3373C33v65Ev
  virtual void  v66(); // _ZN7S3373C33v66Ev
  virtual void  v67(); // _ZN7S3373C33v67Ev
  virtual void  v68(); // _ZN7S3373C33v68Ev
  virtual void  v69(); // _ZN7S3373C33v69Ev
  S3373C3(); // tgen
};
//SIG(-1 S3373C3) 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]}


 S3373C3 ::~S3373C3(){ note_dtor("S3373C3", this);}
void  S3373C3 ::v6(){vfunc_called(this, "_ZN7S3373C32v6Ev");}
void  S3373C3 ::v7(){vfunc_called(this, "_ZN7S3373C32v7Ev");}
void  S3373C3 ::v8(){vfunc_called(this, "_ZN7S3373C32v8Ev");}
void  S3373C3 ::v9(){vfunc_called(this, "_ZN7S3373C32v9Ev");}
void  S3373C3 ::v10(){vfunc_called(this, "_ZN7S3373C33v10Ev");}
void  S3373C3 ::v11(){vfunc_called(this, "_ZN7S3373C33v11Ev");}
void  S3373C3 ::v12(){vfunc_called(this, "_ZN7S3373C33v12Ev");}
void  S3373C3 ::v13(){vfunc_called(this, "_ZN7S3373C33v13Ev");}
void  S3373C3 ::v14(){vfunc_called(this, "_ZN7S3373C33v14Ev");}
void  S3373C3 ::v15(){vfunc_called(this, "_ZN7S3373C33v15Ev");}
void  S3373C3 ::v16(){vfunc_called(this, "_ZN7S3373C33v16Ev");}
void  S3373C3 ::v17(){vfunc_called(this, "_ZN7S3373C33v17Ev");}
void  S3373C3 ::v18(){vfunc_called(this, "_ZN7S3373C33v18Ev");}
void  S3373C3 ::v19(){vfunc_called(this, "_ZN7S3373C33v19Ev");}
void  S3373C3 ::v20(){vfunc_called(this, "_ZN7S3373C33v20Ev");}
void  S3373C3 ::v21(){vfunc_called(this, "_ZN7S3373C33v21Ev");}
void  S3373C3 ::v22(){vfunc_called(this, "_ZN7S3373C33v22Ev");}
void  S3373C3 ::v23(){vfunc_called(this, "_ZN7S3373C33v23Ev");}
void  S3373C3 ::v24(){vfunc_called(this, "_ZN7S3373C33v24Ev");}
void  S3373C3 ::v25(){vfunc_called(this, "_ZN7S3373C33v25Ev");}
void  S3373C3 ::v26(){vfunc_called(this, "_ZN7S3373C33v26Ev");}
void  S3373C3 ::v27(){vfunc_called(this, "_ZN7S3373C33v27Ev");}
void  S3373C3 ::v28(){vfunc_called(this, "_ZN7S3373C33v28Ev");}
void  S3373C3 ::v29(){vfunc_called(this, "_ZN7S3373C33v29Ev");}
void  S3373C3 ::v30(){vfunc_called(this, "_ZN7S3373C33v30Ev");}
void  S3373C3 ::v31(){vfunc_called(this, "_ZN7S3373C33v31Ev");}
void  S3373C3 ::v32(){vfunc_called(this, "_ZN7S3373C33v32Ev");}
void  S3373C3 ::v33(){vfunc_called(this, "_ZN7S3373C33v33Ev");}
void  S3373C3 ::v34(){vfunc_called(this, "_ZN7S3373C33v34Ev");}
void  S3373C3 ::v35(){vfunc_called(this, "_ZN7S3373C33v35Ev");}
void  S3373C3 ::v36(){vfunc_called(this, "_ZN7S3373C33v36Ev");}
void  S3373C3 ::v37(){vfunc_called(this, "_ZN7S3373C33v37Ev");}
void  S3373C3 ::v38(){vfunc_called(this, "_ZN7S3373C33v38Ev");}
void  S3373C3 ::v39(){vfunc_called(this, "_ZN7S3373C33v39Ev");}
void  S3373C3 ::v40(){vfunc_called(this, "_ZN7S3373C33v40Ev");}
void  S3373C3 ::v41(){vfunc_called(this, "_ZN7S3373C33v41Ev");}
void  S3373C3 ::v42(){vfunc_called(this, "_ZN7S3373C33v42Ev");}
void  S3373C3 ::v43(){vfunc_called(this, "_ZN7S3373C33v43Ev");}
void  S3373C3 ::v44(){vfunc_called(this, "_ZN7S3373C33v44Ev");}
void  S3373C3 ::v45(){vfunc_called(this, "_ZN7S3373C33v45Ev");}
void  S3373C3 ::v46(){vfunc_called(this, "_ZN7S3373C33v46Ev");}
void  S3373C3 ::v47(){vfunc_called(this, "_ZN7S3373C33v47Ev");}
void  S3373C3 ::v48(){vfunc_called(this, "_ZN7S3373C33v48Ev");}
void  S3373C3 ::v49(){vfunc_called(this, "_ZN7S3373C33v49Ev");}
void  S3373C3 ::v50(){vfunc_called(this, "_ZN7S3373C33v50Ev");}
void  S3373C3 ::v51(){vfunc_called(this, "_ZN7S3373C33v51Ev");}
void  S3373C3 ::v52(){vfunc_called(this, "_ZN7S3373C33v52Ev");}
void  S3373C3 ::v53(){vfunc_called(this, "_ZN7S3373C33v53Ev");}
void  S3373C3 ::v54(){vfunc_called(this, "_ZN7S3373C33v54Ev");}
void  S3373C3 ::v55(){vfunc_called(this, "_ZN7S3373C33v55Ev");}
void  S3373C3 ::v56(){vfunc_called(this, "_ZN7S3373C33v56Ev");}
void  S3373C3 ::v57(){vfunc_called(this, "_ZN7S3373C33v57Ev");}
void  S3373C3 ::v58(){vfunc_called(this, "_ZN7S3373C33v58Ev");}
void  S3373C3 ::v59(){vfunc_called(this, "_ZN7S3373C33v59Ev");}
void  S3373C3 ::v60(){vfunc_called(this, "_ZN7S3373C33v60Ev");}
void  S3373C3 ::v61(){vfunc_called(this, "_ZN7S3373C33v61Ev");}
void  S3373C3 ::v62(){vfunc_called(this, "_ZN7S3373C33v62Ev");}
void  S3373C3 ::v63(){vfunc_called(this, "_ZN7S3373C33v63Ev");}
void  S3373C3 ::v64(){vfunc_called(this, "_ZN7S3373C33v64Ev");}
void  S3373C3 ::v65(){vfunc_called(this, "_ZN7S3373C33v65Ev");}
void  S3373C3 ::v66(){vfunc_called(this, "_ZN7S3373C33v66Ev");}
void  S3373C3 ::v67(){vfunc_called(this, "_ZN7S3373C33v67Ev");}
void  S3373C3 ::v68(){vfunc_called(this, "_ZN7S3373C33v68Ev");}
void  S3373C3 ::v69(){vfunc_called(this, "_ZN7S3373C33v69Ev");}
S3373C3 ::S3373C3(){ note_ctor("S3373C3", this);} // tgen

static void Test_S3373C3()
{
  extern Class_Descriptor cd_S3373C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3373C3, buf);
    S3373C3 *dp, &lv = *(dp=new (buf) S3373C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3373C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3373C3)");
    check_field_offset(lv, s3373c3f0, ABISELECT(8,4), "S3373C3.s3373c3f0");
    check_field_offset(lv, s3373c3f1, ABISELECT(16,8), "S3373C3.s3373c3f1");
    check_field_offset(lv, s3373c3f2, ABISELECT(24,16), "S3373C3.s3373c3f2");
    check_field_offset(lv, s3373c3f3, ABISELECT(56,32), "S3373C3.s3373c3f3");
    check_field_offset(lv, s3373c3f4, ABISELECT(64,40), "S3373C3.s3373c3f4");
    check_field_offset(lv, s3373c3f5, ABISELECT(72,44), "S3373C3.s3373c3f5");
    check_field_offset(lv, s3373c3f6, ABISELECT(80,52), "S3373C3.s3373c3f6");
    test_class_info(&lv, &cd_S3373C3);
    dp->~S3373C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3373C3(Test_S3373C3, "S3373C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3373C3C1Ev();
extern void _ZN7S3373C3D1Ev();
Name_Map name_map_S3373C3[] = {
  NSPAIR(_ZN7S3373C3C1Ev),
  NSPAIR(_ZN7S3373C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3373C3[];
extern void _ZN7S3373C3D1Ev();
extern void _ZN7S3373C3D0Ev();
extern void _ZN7S3373C32v6Ev();
extern void _ZN7S3373C32v7Ev();
extern void _ZN7S3373C32v8Ev();
extern void _ZN7S3373C32v9Ev();
extern void _ZN7S3373C33v10Ev();
extern void _ZN7S3373C33v11Ev();
extern void _ZN7S3373C33v12Ev();
extern void _ZN7S3373C33v13Ev();
extern void _ZN7S3373C33v14Ev();
extern void _ZN7S3373C33v15Ev();
extern void _ZN7S3373C33v16Ev();
extern void _ZN7S3373C33v17Ev();
extern void _ZN7S3373C33v18Ev();
extern void _ZN7S3373C33v19Ev();
extern void _ZN7S3373C33v20Ev();
extern void _ZN7S3373C33v21Ev();
extern void _ZN7S3373C33v22Ev();
extern void _ZN7S3373C33v23Ev();
extern void _ZN7S3373C33v24Ev();
extern void _ZN7S3373C33v25Ev();
extern void _ZN7S3373C33v26Ev();
extern void _ZN7S3373C33v27Ev();
extern void _ZN7S3373C33v28Ev();
extern void _ZN7S3373C33v29Ev();
extern void _ZN7S3373C33v30Ev();
extern void _ZN7S3373C33v31Ev();
extern void _ZN7S3373C33v32Ev();
extern void _ZN7S3373C33v33Ev();
extern void _ZN7S3373C33v34Ev();
extern void _ZN7S3373C33v35Ev();
extern void _ZN7S3373C33v36Ev();
extern void _ZN7S3373C33v37Ev();
extern void _ZN7S3373C33v38Ev();
extern void _ZN7S3373C33v39Ev();
extern void _ZN7S3373C33v40Ev();
extern void _ZN7S3373C33v41Ev();
extern void _ZN7S3373C33v42Ev();
extern void _ZN7S3373C33v43Ev();
extern void _ZN7S3373C33v44Ev();
extern void _ZN7S3373C33v45Ev();
extern void _ZN7S3373C33v46Ev();
extern void _ZN7S3373C33v47Ev();
extern void _ZN7S3373C33v48Ev();
extern void _ZN7S3373C33v49Ev();
extern void _ZN7S3373C33v50Ev();
extern void _ZN7S3373C33v51Ev();
extern void _ZN7S3373C33v52Ev();
extern void _ZN7S3373C33v53Ev();
extern void _ZN7S3373C33v54Ev();
extern void _ZN7S3373C33v55Ev();
extern void _ZN7S3373C33v56Ev();
extern void _ZN7S3373C33v57Ev();
extern void _ZN7S3373C33v58Ev();
extern void _ZN7S3373C33v59Ev();
extern void _ZN7S3373C33v60Ev();
extern void _ZN7S3373C33v61Ev();
extern void _ZN7S3373C33v62Ev();
extern void _ZN7S3373C33v63Ev();
extern void _ZN7S3373C33v64Ev();
extern void _ZN7S3373C33v65Ev();
extern void _ZN7S3373C33v66Ev();
extern void _ZN7S3373C33v67Ev();
extern void _ZN7S3373C33v68Ev();
extern void _ZN7S3373C33v69Ev();
static  VTBL_ENTRY vtc_S3373C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3373C3[0]),
  (VTBL_ENTRY)&_ZN7S3373C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3373C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3373C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3373C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3373C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3373C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v69Ev,
};
extern VTBL_ENTRY _ZTI7S3373C3[];
extern  VTBL_ENTRY _ZTV7S3373C3[];
Class_Descriptor cd_S3373C3 = {  "S3373C3", // class name
  0,0,//no base classes
  &(vtc_S3373C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3373C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3373C3),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  S3373C2_nt  : S3373C3 {
  void *s3373c2f0;
  ::S3221C4_nt s3373c2f1;
  int s3373c2f2[5];
  unsigned int s3373c2f3:1;
  unsigned int s3373c2f4:1;
  unsigned int s3373c2f5:1;
  unsigned int s3373c2f6:1;
  unsigned int s3373c2f7:1;
  ::S3221C17 s3373c2f8;
  ::S3221C11 s3373c2f9;
  unsigned int s3373c2f10:1;
  int s3373c2f11[2];
  void *s3373c2f12;
  int s3373c2f13[3];
  virtual  ~S3373C2_nt(); // _ZN10S3373C2_ntD1Ev
  virtual void  v70(); // _ZN10S3373C2_nt3v70Ev
  virtual void  v71(); // _ZN10S3373C2_nt3v71Ev
  virtual void  v72(); // _ZN10S3373C2_nt3v72Ev
  virtual void  v73(); // _ZN10S3373C2_nt3v73Ev
  virtual void  v74(); // _ZN10S3373C2_nt3v74Ev
  virtual void  v75(); // _ZN10S3373C2_nt3v75Ev
  virtual void  v76(); // _ZN10S3373C2_nt3v76Ev
  virtual void  v77(); // _ZN10S3373C2_nt3v77Ev
  virtual void  v78(); // _ZN10S3373C2_nt3v78Ev
  virtual void  v79(); // _ZN10S3373C2_nt3v79Ev
  virtual void  v80(); // _ZN10S3373C2_nt3v80Ev
  virtual void  v81(); // _ZN10S3373C2_nt3v81Ev
  virtual void  v82(); // _ZN10S3373C2_nt3v82Ev
  S3373C2_nt(); // tgen
};
//SIG(-1 S3373C2_nt) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S3373C2_nt ::~S3373C2_nt(){ note_dtor("S3373C2_nt", this);}
void  S3373C2_nt ::v70(){vfunc_called(this, "_ZN10S3373C2_nt3v70Ev");}
void  S3373C2_nt ::v71(){vfunc_called(this, "_ZN10S3373C2_nt3v71Ev");}
void  S3373C2_nt ::v72(){vfunc_called(this, "_ZN10S3373C2_nt3v72Ev");}
void  S3373C2_nt ::v73(){vfunc_called(this, "_ZN10S3373C2_nt3v73Ev");}
void  S3373C2_nt ::v74(){vfunc_called(this, "_ZN10S3373C2_nt3v74Ev");}
void  S3373C2_nt ::v75(){vfunc_called(this, "_ZN10S3373C2_nt3v75Ev");}
void  S3373C2_nt ::v76(){vfunc_called(this, "_ZN10S3373C2_nt3v76Ev");}
void  S3373C2_nt ::v77(){vfunc_called(this, "_ZN10S3373C2_nt3v77Ev");}
void  S3373C2_nt ::v78(){vfunc_called(this, "_ZN10S3373C2_nt3v78Ev");}
void  S3373C2_nt ::v79(){vfunc_called(this, "_ZN10S3373C2_nt3v79Ev");}
void  S3373C2_nt ::v80(){vfunc_called(this, "_ZN10S3373C2_nt3v80Ev");}
void  S3373C2_nt ::v81(){vfunc_called(this, "_ZN10S3373C2_nt3v81Ev");}
void  S3373C2_nt ::v82(){vfunc_called(this, "_ZN10S3373C2_nt3v82Ev");}
S3373C2_nt ::S3373C2_nt(){ note_ctor("S3373C2_nt", this);} // tgen

//skip512 S3373C2_nt

#else // __cplusplus

extern void _ZN10S3373C2_ntC1Ev();
extern void _ZN10S3373C2_ntD1Ev();
Name_Map name_map_S3373C2_nt[] = {
  NSPAIR(_ZN10S3373C2_ntC1Ev),
  NSPAIR(_ZN10S3373C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3373C3;
extern VTBL_ENTRY _ZTI7S3373C3[];
extern  VTBL_ENTRY _ZTV7S3373C3[];
static Base_Class bases_S3373C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3373C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3373C2_nt[];
extern void _ZN10S3373C2_ntD1Ev();
extern void _ZN10S3373C2_ntD0Ev();
extern void _ZN7S3373C32v6Ev();
extern void _ZN7S3373C32v7Ev();
extern void _ZN7S3373C32v8Ev();
extern void _ZN7S3373C32v9Ev();
extern void _ZN7S3373C33v10Ev();
extern void _ZN7S3373C33v11Ev();
extern void _ZN7S3373C33v12Ev();
extern void _ZN7S3373C33v13Ev();
extern void _ZN7S3373C33v14Ev();
extern void _ZN7S3373C33v15Ev();
extern void _ZN7S3373C33v16Ev();
extern void _ZN7S3373C33v17Ev();
extern void _ZN7S3373C33v18Ev();
extern void _ZN7S3373C33v19Ev();
extern void _ZN7S3373C33v20Ev();
extern void _ZN7S3373C33v21Ev();
extern void _ZN7S3373C33v22Ev();
extern void _ZN7S3373C33v23Ev();
extern void _ZN7S3373C33v24Ev();
extern void _ZN7S3373C33v25Ev();
extern void _ZN7S3373C33v26Ev();
extern void _ZN7S3373C33v27Ev();
extern void _ZN7S3373C33v28Ev();
extern void _ZN7S3373C33v29Ev();
extern void _ZN7S3373C33v30Ev();
extern void _ZN7S3373C33v31Ev();
extern void _ZN7S3373C33v32Ev();
extern void _ZN7S3373C33v33Ev();
extern void _ZN7S3373C33v34Ev();
extern void _ZN7S3373C33v35Ev();
extern void _ZN7S3373C33v36Ev();
extern void _ZN7S3373C33v37Ev();
extern void _ZN7S3373C33v38Ev();
extern void _ZN7S3373C33v39Ev();
extern void _ZN7S3373C33v40Ev();
extern void _ZN7S3373C33v41Ev();
extern void _ZN7S3373C33v42Ev();
extern void _ZN7S3373C33v43Ev();
extern void _ZN7S3373C33v44Ev();
extern void _ZN7S3373C33v45Ev();
extern void _ZN7S3373C33v46Ev();
extern void _ZN7S3373C33v47Ev();
extern void _ZN7S3373C33v48Ev();
extern void _ZN7S3373C33v49Ev();
extern void _ZN7S3373C33v50Ev();
extern void _ZN7S3373C33v51Ev();
extern void _ZN7S3373C33v52Ev();
extern void _ZN7S3373C33v53Ev();
extern void _ZN7S3373C33v54Ev();
extern void _ZN7S3373C33v55Ev();
extern void _ZN7S3373C33v56Ev();
extern void _ZN7S3373C33v57Ev();
extern void _ZN7S3373C33v58Ev();
extern void _ZN7S3373C33v59Ev();
extern void _ZN7S3373C33v60Ev();
extern void _ZN7S3373C33v61Ev();
extern void _ZN7S3373C33v62Ev();
extern void _ZN7S3373C33v63Ev();
extern void _ZN7S3373C33v64Ev();
extern void _ZN7S3373C33v65Ev();
extern void _ZN7S3373C33v66Ev();
extern void _ZN7S3373C33v67Ev();
extern void _ZN7S3373C33v68Ev();
extern void _ZN7S3373C33v69Ev();
extern void _ZN10S3373C2_nt3v70Ev();
extern void _ZN10S3373C2_nt3v71Ev();
extern void _ZN10S3373C2_nt3v72Ev();
extern void _ZN10S3373C2_nt3v73Ev();
extern void _ZN10S3373C2_nt3v74Ev();
extern void _ZN10S3373C2_nt3v75Ev();
extern void _ZN10S3373C2_nt3v76Ev();
extern void _ZN10S3373C2_nt3v77Ev();
extern void _ZN10S3373C2_nt3v78Ev();
extern void _ZN10S3373C2_nt3v79Ev();
extern void _ZN10S3373C2_nt3v80Ev();
extern void _ZN10S3373C2_nt3v81Ev();
extern void _ZN10S3373C2_nt3v82Ev();
static  VTBL_ENTRY vtc_S3373C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3373C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3373C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S3373C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3373C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3373C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3373C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v69Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v82Ev,
};
extern VTBL_ENTRY _ZTI10S3373C2_nt[];
VTBL_ENTRY *P__ZTI10S3373C2_nt = _ZTI10S3373C2_nt; 
extern  VTBL_ENTRY _ZTV10S3373C2_nt[];
Class_Descriptor cd_S3373C2_nt = {  "S3373C2_nt", // class name
  bases_S3373C2_nt, 1,
  &(vtc_S3373C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI10S3373C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3373C2_nt),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3373C1  : S3373C2_nt {
  int s3373c1f0[3];
  ::S3221C4_nt s3373c1f1;
  int s3373c1f2[2];
  ::S3221C5_nt s3373c1f3;
  unsigned int s3373c1f4:1;
  int s3373c1f5[2];
  unsigned int s3373c1f6:1;
  unsigned int s3373c1f7:1;
  unsigned int s3373c1f8:1;
  virtual  ~S3373C1(); // _ZN7S3373C1D1Ev
  virtual void  v1(); // _ZN7S3373C12v1Ev
  virtual void  v2(); // _ZN7S3373C12v2Ev
  virtual void  v3(); // _ZN7S3373C12v3Ev
  virtual void  v4(); // _ZN7S3373C12v4Ev
  virtual void  v5(); // _ZN7S3373C12v5Ev
  S3373C1(); // tgen
};
//SIG(1 S3373C1) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 Fi[3] FC4 Fi[2] FC10{ BC11{ BC7}} Fi:1 Fi[2] Fi:1 Fi:1 Fi:1}


 S3373C1 ::~S3373C1(){ note_dtor("S3373C1", this);}
void  S3373C1 ::v1(){vfunc_called(this, "_ZN7S3373C12v1Ev");}
void  S3373C1 ::v2(){vfunc_called(this, "_ZN7S3373C12v2Ev");}
void  S3373C1 ::v3(){vfunc_called(this, "_ZN7S3373C12v3Ev");}
void  S3373C1 ::v4(){vfunc_called(this, "_ZN7S3373C12v4Ev");}
void  S3373C1 ::v5(){vfunc_called(this, "_ZN7S3373C12v5Ev");}
S3373C1 ::S3373C1(){ note_ctor("S3373C1", this);} // tgen

static void Test_S3373C1()
{
  extern Class_Descriptor cd_S3373C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,52)];
    init_test(&cd_S3373C1, buf);
    S3373C1 *dp, &lv = *(dp=new (buf) S3373C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,204), "sizeof(S3373C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3373C1)");
    check_base_class_offset(lv, (S3373C3*)(S3373C2_nt*), 0, "S3373C1");
    check_base_class_offset(lv, (S3373C2_nt*), 0, "S3373C1");
    check_field_offset(lv, s3373c1f0, ABISELECT(204,148), "S3373C1.s3373c1f0");
    check_field_offset(lv, s3373c1f1, ABISELECT(216,160), "S3373C1.s3373c1f1");
    check_field_offset(lv, s3373c1f2, ABISELECT(224,168), "S3373C1.s3373c1f2");
    check_field_offset(lv, s3373c1f3, ABISELECT(232,176), "S3373C1.s3373c1f3");
    set_bf_and_test(lv, s3373c1f4, ABISELECT(248,188), 0, 1, 1, "S3373C1");
    check_field_offset(lv, s3373c1f5, ABISELECT(252,192), "S3373C1.s3373c1f5");
    set_bf_and_test(lv, s3373c1f6, ABISELECT(260,200), 0, 1, 1, "S3373C1");
    set_bf_and_test(lv, s3373c1f7, ABISELECT(260,200), 1, 1, 1, "S3373C1");
    set_bf_and_test(lv, s3373c1f8, ABISELECT(260,200), 2, 1, 1, "S3373C1");
    test_class_info(&lv, &cd_S3373C1);
    dp->~S3373C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3373C1(Test_S3373C1, "S3373C1", ABISELECT(264,204));

#else // __cplusplus

extern void _ZN7S3373C1C1Ev();
extern void _ZN7S3373C1D1Ev();
Name_Map name_map_S3373C1[] = {
  NSPAIR(_ZN7S3373C1C1Ev),
  NSPAIR(_ZN7S3373C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3373C3;
extern VTBL_ENTRY _ZTI7S3373C3[];
extern  VTBL_ENTRY _ZTV7S3373C3[];
extern Class_Descriptor cd_S3373C2_nt;
extern VTBL_ENTRY _ZTI10S3373C2_nt[];
extern  VTBL_ENTRY _ZTV10S3373C2_nt[];
static Base_Class bases_S3373C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3373C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3373C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3373C1[];
extern void _ZN7S3373C1D1Ev();
extern void _ZN7S3373C1D0Ev();
extern void _ZN7S3373C32v6Ev();
extern void _ZN7S3373C32v7Ev();
extern void _ZN7S3373C32v8Ev();
extern void _ZN7S3373C32v9Ev();
extern void _ZN7S3373C33v10Ev();
extern void _ZN7S3373C33v11Ev();
extern void _ZN7S3373C33v12Ev();
extern void _ZN7S3373C33v13Ev();
extern void _ZN7S3373C33v14Ev();
extern void _ZN7S3373C33v15Ev();
extern void _ZN7S3373C33v16Ev();
extern void _ZN7S3373C33v17Ev();
extern void _ZN7S3373C33v18Ev();
extern void _ZN7S3373C33v19Ev();
extern void _ZN7S3373C33v20Ev();
extern void _ZN7S3373C33v21Ev();
extern void _ZN7S3373C33v22Ev();
extern void _ZN7S3373C33v23Ev();
extern void _ZN7S3373C33v24Ev();
extern void _ZN7S3373C33v25Ev();
extern void _ZN7S3373C33v26Ev();
extern void _ZN7S3373C33v27Ev();
extern void _ZN7S3373C33v28Ev();
extern void _ZN7S3373C33v29Ev();
extern void _ZN7S3373C33v30Ev();
extern void _ZN7S3373C33v31Ev();
extern void _ZN7S3373C33v32Ev();
extern void _ZN7S3373C33v33Ev();
extern void _ZN7S3373C33v34Ev();
extern void _ZN7S3373C33v35Ev();
extern void _ZN7S3373C33v36Ev();
extern void _ZN7S3373C33v37Ev();
extern void _ZN7S3373C33v38Ev();
extern void _ZN7S3373C33v39Ev();
extern void _ZN7S3373C33v40Ev();
extern void _ZN7S3373C33v41Ev();
extern void _ZN7S3373C33v42Ev();
extern void _ZN7S3373C33v43Ev();
extern void _ZN7S3373C33v44Ev();
extern void _ZN7S3373C33v45Ev();
extern void _ZN7S3373C33v46Ev();
extern void _ZN7S3373C33v47Ev();
extern void _ZN7S3373C33v48Ev();
extern void _ZN7S3373C33v49Ev();
extern void _ZN7S3373C33v50Ev();
extern void _ZN7S3373C33v51Ev();
extern void _ZN7S3373C33v52Ev();
extern void _ZN7S3373C33v53Ev();
extern void _ZN7S3373C33v54Ev();
extern void _ZN7S3373C33v55Ev();
extern void _ZN7S3373C33v56Ev();
extern void _ZN7S3373C33v57Ev();
extern void _ZN7S3373C33v58Ev();
extern void _ZN7S3373C33v59Ev();
extern void _ZN7S3373C33v60Ev();
extern void _ZN7S3373C33v61Ev();
extern void _ZN7S3373C33v62Ev();
extern void _ZN7S3373C33v63Ev();
extern void _ZN7S3373C33v64Ev();
extern void _ZN7S3373C33v65Ev();
extern void _ZN7S3373C33v66Ev();
extern void _ZN7S3373C33v67Ev();
extern void _ZN7S3373C33v68Ev();
extern void _ZN7S3373C33v69Ev();
extern void _ZN10S3373C2_nt3v70Ev();
extern void _ZN10S3373C2_nt3v71Ev();
extern void _ZN10S3373C2_nt3v72Ev();
extern void _ZN10S3373C2_nt3v73Ev();
extern void _ZN10S3373C2_nt3v74Ev();
extern void _ZN10S3373C2_nt3v75Ev();
extern void _ZN10S3373C2_nt3v76Ev();
extern void _ZN10S3373C2_nt3v77Ev();
extern void _ZN10S3373C2_nt3v78Ev();
extern void _ZN10S3373C2_nt3v79Ev();
extern void _ZN10S3373C2_nt3v80Ev();
extern void _ZN10S3373C2_nt3v81Ev();
extern void _ZN10S3373C2_nt3v82Ev();
extern void _ZN7S3373C12v1Ev();
extern void _ZN7S3373C12v2Ev();
extern void _ZN7S3373C12v3Ev();
extern void _ZN7S3373C12v4Ev();
extern void _ZN7S3373C12v5Ev();
static  VTBL_ENTRY vtc_S3373C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3373C1[0]),
  (VTBL_ENTRY)&_ZN7S3373C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3373C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3373C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3373C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3373C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3373C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3373C33v69Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3373C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN7S3373C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3373C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3373C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3373C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3373C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3373C1[];
extern  VTBL_ENTRY _ZTV7S3373C1[];
Class_Descriptor cd_S3373C1 = {  "S3373C1", // class name
  bases_S3373C1, 2,
  &(vtc_S3373C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,204), // object size
  NSPAIRA(_ZTI7S3373C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3373C1),86, //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  S857C5_nt  {
  virtual  ~S857C5_nt(); // _ZN9S857C5_ntD1Ev
  virtual void  v13(); // _ZN9S857C5_nt3v13Ev
  virtual void  v14(); // _ZN9S857C5_nt3v14Ev
  virtual void  v15(); // _ZN9S857C5_nt3v15Ev
  S857C5_nt(); // tgen
};
//SIG(-1 S857C5_nt) C1{ vd v1 v2 v3}


 S857C5_nt ::~S857C5_nt(){ note_dtor("S857C5_nt", this);}
void  S857C5_nt ::v13(){vfunc_called(this, "_ZN9S857C5_nt3v13Ev");}
void  S857C5_nt ::v14(){vfunc_called(this, "_ZN9S857C5_nt3v14Ev");}
void  S857C5_nt ::v15(){vfunc_called(this, "_ZN9S857C5_nt3v15Ev");}
S857C5_nt ::S857C5_nt(){ note_ctor("S857C5_nt", this);} // tgen

//skip512 S857C5_nt

#else // __cplusplus

extern void _ZN9S857C5_ntC1Ev();
extern void _ZN9S857C5_ntD1Ev();
Name_Map name_map_S857C5_nt[] = {
  NSPAIR(_ZN9S857C5_ntC1Ev),
  NSPAIR(_ZN9S857C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S857C5_nt[];
extern void _ZN9S857C5_ntD1Ev();
extern void _ZN9S857C5_ntD0Ev();
extern void _ZN9S857C5_nt3v13Ev();
extern void _ZN9S857C5_nt3v14Ev();
extern void _ZN9S857C5_nt3v15Ev();
static  VTBL_ENTRY vtc_S857C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S857C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S857C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S857C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S857C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S857C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S857C5_nt3v15Ev,
};
extern VTBL_ENTRY _ZTI9S857C5_nt[];
VTBL_ENTRY *P__ZTI9S857C5_nt = _ZTI9S857C5_nt; 
extern  VTBL_ENTRY _ZTV9S857C5_nt[];
Class_Descriptor cd_S857C5_nt = {  "S857C5_nt", // class name
  0,0,//no base classes
  &(vtc_S857C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S857C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S857C5_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  S857C6_nt  {
  virtual  ~S857C6_nt(); // _ZN9S857C6_ntD1Ev
  virtual void  v16(); // _ZN9S857C6_nt3v16Ev
  S857C6_nt(); // tgen
};
//SIG(-1 S857C6_nt) C1{ vd v1}


 S857C6_nt ::~S857C6_nt(){ note_dtor("S857C6_nt", this);}
void  S857C6_nt ::v16(){vfunc_called(this, "_ZN9S857C6_nt3v16Ev");}
S857C6_nt ::S857C6_nt(){ note_ctor("S857C6_nt", this);} // tgen

//skip512 S857C6_nt

#else // __cplusplus

extern void _ZN9S857C6_ntC1Ev();
extern void _ZN9S857C6_ntD1Ev();
Name_Map name_map_S857C6_nt[] = {
  NSPAIR(_ZN9S857C6_ntC1Ev),
  NSPAIR(_ZN9S857C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S857C6_nt[];
extern void _ZN9S857C6_ntD1Ev();
extern void _ZN9S857C6_ntD0Ev();
extern void _ZN9S857C6_nt3v16Ev();
static  VTBL_ENTRY vtc_S857C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S857C6_nt[0]),
  (VTBL_ENTRY)&_ZN9S857C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S857C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S857C6_nt3v16Ev,
};
extern VTBL_ENTRY _ZTI9S857C6_nt[];
VTBL_ENTRY *P__ZTI9S857C6_nt = _ZTI9S857C6_nt; 
extern  VTBL_ENTRY _ZTV9S857C6_nt[];
Class_Descriptor cd_S857C6_nt = {  "S857C6_nt", // class name
  0,0,//no base classes
  &(vtc_S857C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S857C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S857C6_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  S857C4  : S857C5_nt , S857C6_nt {
  virtual  ~S857C4(); // _ZN6S857C4D1Ev
  virtual void  v17(); // _ZN6S857C43v17Ev
  virtual void  v18(); // _ZN6S857C43v18Ev
  virtual void  v19(); // _ZN6S857C43v19Ev
  virtual void  v20(); // _ZN6S857C43v20Ev
  virtual void  v21(); // _ZN6S857C43v21Ev
  virtual void  v22(); // _ZN6S857C43v22Ev
  virtual void  v23(); // _ZN6S857C43v23Ev
  virtual void  v24(); // _ZN6S857C43v24Ev
  virtual void  v25(); // _ZN6S857C43v25Ev
  virtual void  v26(); // _ZN6S857C43v26Ev
  virtual void  v27(); // _ZN6S857C43v27Ev
  virtual void  v28(); // _ZN6S857C43v28Ev
  virtual void  v29(); // _ZN6S857C43v29Ev
  virtual void  v30(); // _ZN6S857C43v30Ev
  virtual void  v31(); // _ZN6S857C43v31Ev
  virtual void  v32(); // _ZN6S857C43v32Ev
  virtual void  v33(); // _ZN6S857C43v33Ev
  virtual void  v34(); // _ZN6S857C43v34Ev
  virtual void  v35(); // _ZN6S857C43v35Ev
  virtual void  v36(); // _ZN6S857C43v36Ev
  virtual void  v37(); // _ZN6S857C43v37Ev
  virtual void  v38(); // _ZN6S857C43v38Ev
  S857C4(); // tgen
};
//SIG(-1 S857C4) C1{ BC2{ vd v23 v24 v25} BC3{ vd v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S857C4 ::~S857C4(){ note_dtor("S857C4", this);}
void  S857C4 ::v17(){vfunc_called(this, "_ZN6S857C43v17Ev");}
void  S857C4 ::v18(){vfunc_called(this, "_ZN6S857C43v18Ev");}
void  S857C4 ::v19(){vfunc_called(this, "_ZN6S857C43v19Ev");}
void  S857C4 ::v20(){vfunc_called(this, "_ZN6S857C43v20Ev");}
void  S857C4 ::v21(){vfunc_called(this, "_ZN6S857C43v21Ev");}
void  S857C4 ::v22(){vfunc_called(this, "_ZN6S857C43v22Ev");}
void  S857C4 ::v23(){vfunc_called(this, "_ZN6S857C43v23Ev");}
void  S857C4 ::v24(){vfunc_called(this, "_ZN6S857C43v24Ev");}
void  S857C4 ::v25(){vfunc_called(this, "_ZN6S857C43v25Ev");}
void  S857C4 ::v26(){vfunc_called(this, "_ZN6S857C43v26Ev");}
void  S857C4 ::v27(){vfunc_called(this, "_ZN6S857C43v27Ev");}
void  S857C4 ::v28(){vfunc_called(this, "_ZN6S857C43v28Ev");}
void  S857C4 ::v29(){vfunc_called(this, "_ZN6S857C43v29Ev");}
void  S857C4 ::v30(){vfunc_called(this, "_ZN6S857C43v30Ev");}
void  S857C4 ::v31(){vfunc_called(this, "_ZN6S857C43v31Ev");}
void  S857C4 ::v32(){vfunc_called(this, "_ZN6S857C43v32Ev");}
void  S857C4 ::v33(){vfunc_called(this, "_ZN6S857C43v33Ev");}
void  S857C4 ::v34(){vfunc_called(this, "_ZN6S857C43v34Ev");}
void  S857C4 ::v35(){vfunc_called(this, "_ZN6S857C43v35Ev");}
void  S857C4 ::v36(){vfunc_called(this, "_ZN6S857C43v36Ev");}
void  S857C4 ::v37(){vfunc_called(this, "_ZN6S857C43v37Ev");}
void  S857C4 ::v38(){vfunc_called(this, "_ZN6S857C43v38Ev");}
S857C4 ::S857C4(){ note_ctor("S857C4", this);} // tgen

static void Test_S857C4()
{
  extern Class_Descriptor cd_S857C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S857C4, buf);
    S857C4 *dp, &lv = *(dp=new (buf) S857C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S857C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S857C4)");
    check_base_class_offset(lv, (S857C5_nt*), 0, "S857C4");
    check_base_class_offset(lv, (S857C6_nt*), ABISELECT(8,4), "S857C4");
    test_class_info(&lv, &cd_S857C4);
    dp->~S857C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS857C4(Test_S857C4, "S857C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S857C4C1Ev();
extern void _ZN6S857C4D1Ev();
Name_Map name_map_S857C4[] = {
  NSPAIR(_ZN6S857C4C1Ev),
  NSPAIR(_ZN6S857C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S857C5_nt;
extern VTBL_ENTRY _ZTI9S857C5_nt[];
extern  VTBL_ENTRY _ZTV9S857C5_nt[];
extern Class_Descriptor cd_S857C6_nt;
extern VTBL_ENTRY _ZTI9S857C6_nt[];
extern  VTBL_ENTRY _ZTV9S857C6_nt[];
static Base_Class bases_S857C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S857C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S857C6_nt,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S857C4[];
extern void _ZN6S857C4D1Ev();
extern void _ZN6S857C4D0Ev();
extern void _ZN9S857C5_nt3v13Ev();
extern void _ZN9S857C5_nt3v14Ev();
extern void _ZN9S857C5_nt3v15Ev();
extern void _ZN6S857C43v17Ev();
extern void _ZN6S857C43v18Ev();
extern void _ZN6S857C43v19Ev();
extern void _ZN6S857C43v20Ev();
extern void _ZN6S857C43v21Ev();
extern void _ZN6S857C43v22Ev();
extern void _ZN6S857C43v23Ev();
extern void _ZN6S857C43v24Ev();
extern void _ZN6S857C43v25Ev();
extern void _ZN6S857C43v26Ev();
extern void _ZN6S857C43v27Ev();
extern void _ZN6S857C43v28Ev();
extern void _ZN6S857C43v29Ev();
extern void _ZN6S857C43v30Ev();
extern void _ZN6S857C43v31Ev();
extern void _ZN6S857C43v32Ev();
extern void _ZN6S857C43v33Ev();
extern void _ZN6S857C43v34Ev();
extern void _ZN6S857C43v35Ev();
extern void _ZN6S857C43v36Ev();
extern void _ZN6S857C43v37Ev();
extern void _ZN6S857C43v38Ev();
extern void ABISELECT(_ZThn8_N6S857C4D1Ev,_ZThn4_N6S857C4D1Ev)();
extern void ABISELECT(_ZThn8_N6S857C4D0Ev,_ZThn4_N6S857C4D0Ev)();
extern void _ZN9S857C6_nt3v16Ev();
static  VTBL_ENTRY vtc_S857C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S857C4[0]),
  (VTBL_ENTRY)&_ZN6S857C4D1Ev,
  (VTBL_ENTRY)&_ZN6S857C4D0Ev,
  (VTBL_ENTRY)&_ZN9S857C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S857C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S857C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN6S857C43v17Ev,
  (VTBL_ENTRY)&_ZN6S857C43v18Ev,
  (VTBL_ENTRY)&_ZN6S857C43v19Ev,
  (VTBL_ENTRY)&_ZN6S857C43v20Ev,
  (VTBL_ENTRY)&_ZN6S857C43v21Ev,
  (VTBL_ENTRY)&_ZN6S857C43v22Ev,
  (VTBL_ENTRY)&_ZN6S857C43v23Ev,
  (VTBL_ENTRY)&_ZN6S857C43v24Ev,
  (VTBL_ENTRY)&_ZN6S857C43v25Ev,
  (VTBL_ENTRY)&_ZN6S857C43v26Ev,
  (VTBL_ENTRY)&_ZN6S857C43v27Ev,
  (VTBL_ENTRY)&_ZN6S857C43v28Ev,
  (VTBL_ENTRY)&_ZN6S857C43v29Ev,
  (VTBL_ENTRY)&_ZN6S857C43v30Ev,
  (VTBL_ENTRY)&_ZN6S857C43v31Ev,
  (VTBL_ENTRY)&_ZN6S857C43v32Ev,
  (VTBL_ENTRY)&_ZN6S857C43v33Ev,
  (VTBL_ENTRY)&_ZN6S857C43v34Ev,
  (VTBL_ENTRY)&_ZN6S857C43v35Ev,
  (VTBL_ENTRY)&_ZN6S857C43v36Ev,
  (VTBL_ENTRY)&_ZN6S857C43v37Ev,
  (VTBL_ENTRY)&_ZN6S857C43v38Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S857C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S857C4D1Ev,_ZThn4_N6S857C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S857C4D0Ev,_ZThn4_N6S857C4D0Ev),
  (VTBL_ENTRY)&_ZN9S857C6_nt3v16Ev,
};
extern VTBL_ENTRY _ZTI6S857C4[];
extern  VTBL_ENTRY _ZTV6S857C4[];
Class_Descriptor cd_S857C4 = {  "S857C4", // class name
  bases_S857C4, 2,
  &(vtc_S857C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S857C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S857C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S857C7_nt  {
  void *s857c7f0;
  int s857c7f1[2];
  ::S239C12_nt s857c7f2;
  void  mf857c7(); // _ZN9S857C7_nt7mf857c7Ev
};
//SIG(-1 S857C7_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S857C7_nt ::mf857c7(){}

//skip512 S857C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S857C10_nt  {
  __tsi64 s857c10f0[4];
};
//SIG(-1 S857C10_nt) C1{ FL[4]}



//skip512 S857C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S857C9_nt  {
  ::S857C10_nt s857c9f0;
  void  mf857c9(); // _ZN9S857C9_nt7mf857c9Ev
};
//SIG(-1 S857C9_nt) C1{ m FC2{ FL[4]}}


void  S857C9_nt ::mf857c9(){}

//skip512 S857C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S857C3  : S857C4 {
  ::S857C7_nt s857c3f0;
  ::S857C9_nt s857c3f1;
  char s857c3f2;
  virtual  ~S857C3(); // _ZN6S857C3D1Ev
  virtual void  v39(); // _ZN6S857C33v39Ev
  virtual void  v40(); // _ZN6S857C33v40Ev
  virtual void  v41(); // _ZN6S857C33v41Ev
  S857C3(); // tgen
};
//SIG(-1 S857C3) C1{ BC2{ BC3{ vd v4 v5 v6} BC4{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ FL[4]}} Fc}


 S857C3 ::~S857C3(){ note_dtor("S857C3", this);}
void  S857C3 ::v39(){vfunc_called(this, "_ZN6S857C33v39Ev");}
void  S857C3 ::v40(){vfunc_called(this, "_ZN6S857C33v40Ev");}
void  S857C3 ::v41(){vfunc_called(this, "_ZN6S857C33v41Ev");}
S857C3 ::S857C3(){ note_ctor("S857C3", this);} // tgen

static void Test_S857C3()
{
  extern Class_Descriptor cd_S857C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S857C3, buf);
    S857C3 *dp, &lv = *(dp=new (buf) S857C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S857C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S857C3)");
    check_base_class_offset(lv, (S857C5_nt*)(S857C4*), 0, "S857C3");
    check_base_class_offset(lv, (S857C6_nt*)(S857C4*), ABISELECT(8,4), "S857C3");
    check_base_class_offset(lv, (S857C4*), 0, "S857C3");
    check_field_offset(lv, s857c3f0, ABISELECT(16,8), "S857C3.s857c3f0");
    check_field_offset(lv, s857c3f1, ABISELECT(40,24), "S857C3.s857c3f1");
    check_field_offset(lv, s857c3f2, ABISELECT(72,56), "S857C3.s857c3f2");
    test_class_info(&lv, &cd_S857C3);
    dp->~S857C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS857C3(Test_S857C3, "S857C3", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN6S857C3C1Ev();
extern void _ZN6S857C3D1Ev();
Name_Map name_map_S857C3[] = {
  NSPAIR(_ZN6S857C3C1Ev),
  NSPAIR(_ZN6S857C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S857C5_nt;
extern VTBL_ENTRY _ZTI9S857C5_nt[];
extern  VTBL_ENTRY _ZTV9S857C5_nt[];
extern Class_Descriptor cd_S857C6_nt;
extern VTBL_ENTRY _ZTI9S857C6_nt[];
extern  VTBL_ENTRY _ZTV9S857C6_nt[];
extern Class_Descriptor cd_S857C4;
extern VTBL_ENTRY _ZTI6S857C4[];
extern  VTBL_ENTRY _ZTV6S857C4[];
static Base_Class bases_S857C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S857C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S857C6_nt,    ABISELECT(8,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S857C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S857C3[];
extern void _ZN6S857C3D1Ev();
extern void _ZN6S857C3D0Ev();
extern void _ZN9S857C5_nt3v13Ev();
extern void _ZN9S857C5_nt3v14Ev();
extern void _ZN9S857C5_nt3v15Ev();
extern void _ZN6S857C43v17Ev();
extern void _ZN6S857C43v18Ev();
extern void _ZN6S857C43v19Ev();
extern void _ZN6S857C43v20Ev();
extern void _ZN6S857C43v21Ev();
extern void _ZN6S857C43v22Ev();
extern void _ZN6S857C43v23Ev();
extern void _ZN6S857C43v24Ev();
extern void _ZN6S857C43v25Ev();
extern void _ZN6S857C43v26Ev();
extern void _ZN6S857C43v27Ev();
extern void _ZN6S857C43v28Ev();
extern void _ZN6S857C43v29Ev();
extern void _ZN6S857C43v30Ev();
extern void _ZN6S857C43v31Ev();
extern void _ZN6S857C43v32Ev();
extern void _ZN6S857C43v33Ev();
extern void _ZN6S857C43v34Ev();
extern void _ZN6S857C43v35Ev();
extern void _ZN6S857C43v36Ev();
extern void _ZN6S857C43v37Ev();
extern void _ZN6S857C43v38Ev();
extern void _ZN6S857C33v39Ev();
extern void _ZN6S857C33v40Ev();
extern void _ZN6S857C33v41Ev();
extern void ABISELECT(_ZThn8_N6S857C3D1Ev,_ZThn4_N6S857C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S857C3D0Ev,_ZThn4_N6S857C3D0Ev)();
extern void _ZN9S857C6_nt3v16Ev();
static  VTBL_ENTRY vtc_S857C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S857C3[0]),
  (VTBL_ENTRY)&_ZN6S857C3D1Ev,
  (VTBL_ENTRY)&_ZN6S857C3D0Ev,
  (VTBL_ENTRY)&_ZN9S857C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S857C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S857C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN6S857C43v17Ev,
  (VTBL_ENTRY)&_ZN6S857C43v18Ev,
  (VTBL_ENTRY)&_ZN6S857C43v19Ev,
  (VTBL_ENTRY)&_ZN6S857C43v20Ev,
  (VTBL_ENTRY)&_ZN6S857C43v21Ev,
  (VTBL_ENTRY)&_ZN6S857C43v22Ev,
  (VTBL_ENTRY)&_ZN6S857C43v23Ev,
  (VTBL_ENTRY)&_ZN6S857C43v24Ev,
  (VTBL_ENTRY)&_ZN6S857C43v25Ev,
  (VTBL_ENTRY)&_ZN6S857C43v26Ev,
  (VTBL_ENTRY)&_ZN6S857C43v27Ev,
  (VTBL_ENTRY)&_ZN6S857C43v28Ev,
  (VTBL_ENTRY)&_ZN6S857C43v29Ev,
  (VTBL_ENTRY)&_ZN6S857C43v30Ev,
  (VTBL_ENTRY)&_ZN6S857C43v31Ev,
  (VTBL_ENTRY)&_ZN6S857C43v32Ev,
  (VTBL_ENTRY)&_ZN6S857C43v33Ev,
  (VTBL_ENTRY)&_ZN6S857C43v34Ev,
  (VTBL_ENTRY)&_ZN6S857C43v35Ev,
  (VTBL_ENTRY)&_ZN6S857C43v36Ev,
  (VTBL_ENTRY)&_ZN6S857C43v37Ev,
  (VTBL_ENTRY)&_ZN6S857C43v38Ev,
  (VTBL_ENTRY)&_ZN6S857C33v39Ev,
  (VTBL_ENTRY)&_ZN6S857C33v40Ev,
  (VTBL_ENTRY)&_ZN6S857C33v41Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S857C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S857C3D1Ev,_ZThn4_N6S857C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S857C3D0Ev,_ZThn4_N6S857C3D0Ev),
  (VTBL_ENTRY)&_ZN9S857C6_nt3v16Ev,
};
extern VTBL_ENTRY _ZTI6S857C3[];
extern  VTBL_ENTRY _ZTV6S857C3[];
Class_Descriptor cd_S857C3 = {  "S857C3", // class name
  bases_S857C3, 3,
  &(vtc_S857C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI6S857C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S857C3),37, //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  S857C11  {
  virtual  ~S857C11(); // _ZN7S857C11D1Ev
  virtual void  v42(); // _ZN7S857C113v42Ev
  S857C11(); // tgen
};
//SIG(-1 S857C11) C1{ vd v1}


 S857C11 ::~S857C11(){ note_dtor("S857C11", this);}
void  S857C11 ::v42(){vfunc_called(this, "_ZN7S857C113v42Ev");}
S857C11 ::S857C11(){ note_ctor("S857C11", this);} // tgen

static void Test_S857C11()
{
  extern Class_Descriptor cd_S857C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S857C11, buf);
    S857C11 *dp, &lv = *(dp=new (buf) S857C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S857C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S857C11)");
    test_class_info(&lv, &cd_S857C11);
    dp->~S857C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS857C11(Test_S857C11, "S857C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S857C11C1Ev();
extern void _ZN7S857C11D1Ev();
Name_Map name_map_S857C11[] = {
  NSPAIR(_ZN7S857C11C1Ev),
  NSPAIR(_ZN7S857C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S857C11[];
extern void _ZN7S857C11D1Ev();
extern void _ZN7S857C11D0Ev();
extern void _ZN7S857C113v42Ev();
static  VTBL_ENTRY vtc_S857C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S857C11[0]),
  (VTBL_ENTRY)&_ZN7S857C11D1Ev,
  (VTBL_ENTRY)&_ZN7S857C11D0Ev,
  (VTBL_ENTRY)&_ZN7S857C113v42Ev,
};
extern VTBL_ENTRY _ZTI7S857C11[];
extern  VTBL_ENTRY _ZTV7S857C11[];
Class_Descriptor cd_S857C11 = {  "S857C11", // class name
  0,0,//no base classes
  &(vtc_S857C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S857C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S857C11),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  S857C15_nt  {
  int s857c15f0[4];
};
//SIG(-1 S857C15_nt) C1{ Fi[4]}



//skip512 S857C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S857C14_nt  {
  void *s857c14f0;
  ::S857C15_nt s857c14f1;
  void  mf857c14(); // _ZN10S857C14_nt8mf857c14Ev
};
//SIG(-1 S857C14_nt) C1{ m Fp FC2{ Fi[4]}}


void  S857C14_nt ::mf857c14(){}

//skip512 S857C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S857C13_nt  {
  void *s857c13f0;
  ::S857C9_nt s857c13f1;
  ::S857C14_nt s857c13f2;
  int s857c13f3;
  char s857c13f4;
  void  mf857c13(); // _ZN10S857C13_nt8mf857c13Ev
};
//SIG(-1 S857C13_nt) C1{ m Fp FC2{ m FC3{ FL[4]}} FC4{ m Fp FC5{ Fi[4]}} Fi Fc}


void  S857C13_nt ::mf857c13(){}

//skip512 S857C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S857C16  : S857C6_nt , S857C11 {
  void *s857c16f0[2];
  virtual  ~S857C16(); // _ZN7S857C16D1Ev
  virtual void  v84(); // _ZN7S857C163v84Ev
  virtual void  v85(); // _ZN7S857C163v85Ev
  S857C16(); // tgen
};
//SIG(-1 S857C16) C1{ BC2{ vd v3} BC3{ vd v4} vd v1 v2 Fp[2]}


 S857C16 ::~S857C16(){ note_dtor("S857C16", this);}
void  S857C16 ::v84(){vfunc_called(this, "_ZN7S857C163v84Ev");}
void  S857C16 ::v85(){vfunc_called(this, "_ZN7S857C163v85Ev");}
S857C16 ::S857C16(){ note_ctor("S857C16", this);} // tgen

static void Test_S857C16()
{
  extern Class_Descriptor cd_S857C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S857C16, buf);
    S857C16 *dp, &lv = *(dp=new (buf) S857C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S857C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S857C16)");
    check_base_class_offset(lv, (S857C6_nt*), 0, "S857C16");
    check_base_class_offset(lv, (S857C11*), ABISELECT(8,4), "S857C16");
    check_field_offset(lv, s857c16f0, ABISELECT(16,8), "S857C16.s857c16f0");
    test_class_info(&lv, &cd_S857C16);
    dp->~S857C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS857C16(Test_S857C16, "S857C16", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S857C16C1Ev();
extern void _ZN7S857C16D1Ev();
Name_Map name_map_S857C16[] = {
  NSPAIR(_ZN7S857C16C1Ev),
  NSPAIR(_ZN7S857C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S857C6_nt;
extern VTBL_ENTRY _ZTI9S857C6_nt[];
extern  VTBL_ENTRY _ZTV9S857C6_nt[];
extern Class_Descriptor cd_S857C11;
extern VTBL_ENTRY _ZTI7S857C11[];
extern  VTBL_ENTRY _ZTV7S857C11[];
static Base_Class bases_S857C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S857C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S857C11,    ABISELECT(8,4), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S857C16[];
extern void _ZN7S857C16D1Ev();
extern void _ZN7S857C16D0Ev();
extern void _ZN9S857C6_nt3v16Ev();
extern void _ZN7S857C163v84Ev();
extern void _ZN7S857C163v85Ev();
extern void ABISELECT(_ZThn8_N7S857C16D1Ev,_ZThn4_N7S857C16D1Ev)();
extern void ABISELECT(_ZThn8_N7S857C16D0Ev,_ZThn4_N7S857C16D0Ev)();
extern void _ZN7S857C113v42Ev();
static  VTBL_ENTRY vtc_S857C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S857C16[0]),
  (VTBL_ENTRY)&_ZN7S857C16D1Ev,
  (VTBL_ENTRY)&_ZN7S857C16D0Ev,
  (VTBL_ENTRY)&_ZN9S857C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN7S857C163v84Ev,
  (VTBL_ENTRY)&_ZN7S857C163v85Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S857C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S857C16D1Ev,_ZThn4_N7S857C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S857C16D0Ev,_ZThn4_N7S857C16D0Ev),
  (VTBL_ENTRY)&_ZN7S857C113v42Ev,
};
extern VTBL_ENTRY _ZTI7S857C16[];
extern  VTBL_ENTRY _ZTV7S857C16[];
Class_Descriptor cd_S857C16 = {  "S857C16", // class name
  bases_S857C16, 2,
  &(vtc_S857C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S857C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S857C16),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S857C2  : S857C3 , S857C11 {
  ::S857C9_nt s857c2f0;
  ::S857C13_nt s857c2f1;
  char s857c2f2[2];
  void *s857c2f3;
  ::S857C16 s857c2f4;
  void *s857c2f5;
  virtual  ~S857C2(); // _ZN6S857C2D1Ev
  virtual void  v43(); // _ZN6S857C23v43Ev
  virtual void  v44(); // _ZN6S857C23v44Ev
  virtual void  v45(); // _ZN6S857C23v45Ev
  virtual void  v46(); // _ZN6S857C23v46Ev
  virtual void  v47(); // _ZN6S857C23v47Ev
  virtual void  v48(); // _ZN6S857C23v48Ev
  virtual void  v49(); // _ZN6S857C23v49Ev
  virtual void  v50(); // _ZN6S857C23v50Ev
  virtual void  v51(); // _ZN6S857C23v51Ev
  virtual void  v52(); // _ZN6S857C23v52Ev
  virtual void  v53(); // _ZN6S857C23v53Ev
  virtual void  v54(); // _ZN6S857C23v54Ev
  virtual void  v55(); // _ZN6S857C23v55Ev
  virtual void  v56(); // _ZN6S857C23v56Ev
  virtual void  v57(); // _ZN6S857C23v57Ev
  virtual void  v58(); // _ZN6S857C23v58Ev
  virtual void  v59(); // _ZN6S857C23v59Ev
  virtual void  v60(); // _ZN6S857C23v60Ev
  virtual void  v61(); // _ZN6S857C23v61Ev
  virtual void  v62(); // _ZN6S857C23v62Ev
  virtual void  v63(); // _ZN6S857C23v63Ev
  virtual void  v64(); // _ZN6S857C23v64Ev
  virtual void  v65(); // _ZN6S857C23v65Ev
  virtual void  v66(); // _ZN6S857C23v66Ev
  virtual void  v67(); // _ZN6S857C23v67Ev
  virtual void  v68(); // _ZN6S857C23v68Ev
  virtual void  v69(); // _ZN6S857C23v69Ev
  virtual void  v70(); // _ZN6S857C23v70Ev
  virtual void  v71(); // _ZN6S857C23v71Ev
  virtual void  v72(); // _ZN6S857C23v72Ev
  virtual void  v73(); // _ZN6S857C23v73Ev
  virtual void  v74(); // _ZN6S857C23v74Ev
  virtual void  v75(); // _ZN6S857C23v75Ev
  virtual void  v76(); // _ZN6S857C23v76Ev
  virtual void  v77(); // _ZN6S857C23v77Ev
  virtual void  v78(); // _ZN6S857C23v78Ev
  virtual void  v79(); // _ZN6S857C23v79Ev
  virtual void  v80(); // _ZN6S857C23v80Ev
  virtual void  v81(); // _ZN6S857C23v81Ev
  virtual void  v82(); // _ZN6S857C23v82Ev
  virtual void  v83(); // _ZN6S857C23v83Ev
  S857C2(); // tgen
};
//SIG(-1 S857C2) C1{ BC2{ BC3{ BC4{ vd v42 v43 v44} BC5{ vd v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67} vd v68 v69 v70 FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ FL[4]}} Fc} BC10{ vd v71} 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 FC8 FC11{ m Fp FC8 FC12{ m Fp FC13{ Fi[4]}} Fi Fc} Fc[2] Fp FC14{ BC5 BC10 vd v72 v73 Fp[2]} Fp}


 S857C2 ::~S857C2(){ note_dtor("S857C2", this);}
void  S857C2 ::v43(){vfunc_called(this, "_ZN6S857C23v43Ev");}
void  S857C2 ::v44(){vfunc_called(this, "_ZN6S857C23v44Ev");}
void  S857C2 ::v45(){vfunc_called(this, "_ZN6S857C23v45Ev");}
void  S857C2 ::v46(){vfunc_called(this, "_ZN6S857C23v46Ev");}
void  S857C2 ::v47(){vfunc_called(this, "_ZN6S857C23v47Ev");}
void  S857C2 ::v48(){vfunc_called(this, "_ZN6S857C23v48Ev");}
void  S857C2 ::v49(){vfunc_called(this, "_ZN6S857C23v49Ev");}
void  S857C2 ::v50(){vfunc_called(this, "_ZN6S857C23v50Ev");}
void  S857C2 ::v51(){vfunc_called(this, "_ZN6S857C23v51Ev");}
void  S857C2 ::v52(){vfunc_called(this, "_ZN6S857C23v52Ev");}
void  S857C2 ::v53(){vfunc_called(this, "_ZN6S857C23v53Ev");}
void  S857C2 ::v54(){vfunc_called(this, "_ZN6S857C23v54Ev");}
void  S857C2 ::v55(){vfunc_called(this, "_ZN6S857C23v55Ev");}
void  S857C2 ::v56(){vfunc_called(this, "_ZN6S857C23v56Ev");}
void  S857C2 ::v57(){vfunc_called(this, "_ZN6S857C23v57Ev");}
void  S857C2 ::v58(){vfunc_called(this, "_ZN6S857C23v58Ev");}
void  S857C2 ::v59(){vfunc_called(this, "_ZN6S857C23v59Ev");}
void  S857C2 ::v60(){vfunc_called(this, "_ZN6S857C23v60Ev");}
void  S857C2 ::v61(){vfunc_called(this, "_ZN6S857C23v61Ev");}
void  S857C2 ::v62(){vfunc_called(this, "_ZN6S857C23v62Ev");}
void  S857C2 ::v63(){vfunc_called(this, "_ZN6S857C23v63Ev");}
void  S857C2 ::v64(){vfunc_called(this, "_ZN6S857C23v64Ev");}
void  S857C2 ::v65(){vfunc_called(this, "_ZN6S857C23v65Ev");}
void  S857C2 ::v66(){vfunc_called(this, "_ZN6S857C23v66Ev");}
void  S857C2 ::v67(){vfunc_called(this, "_ZN6S857C23v67Ev");}
void  S857C2 ::v68(){vfunc_called(this, "_ZN6S857C23v68Ev");}
void  S857C2 ::v69(){vfunc_called(this, "_ZN6S857C23v69Ev");}
void  S857C2 ::v70(){vfunc_called(this, "_ZN6S857C23v70Ev");}
void  S857C2 ::v71(){vfunc_called(this, "_ZN6S857C23v71Ev");}
void  S857C2 ::v72(){vfunc_called(this, "_ZN6S857C23v72Ev");}
void  S857C2 ::v73(){vfunc_called(this, "_ZN6S857C23v73Ev");}
void  S857C2 ::v74(){vfunc_called(this, "_ZN6S857C23v74Ev");}
void  S857C2 ::v75(){vfunc_called(this, "_ZN6S857C23v75Ev");}
void  S857C2 ::v76(){vfunc_called(this, "_ZN6S857C23v76Ev");}
void  S857C2 ::v77(){vfunc_called(this, "_ZN6S857C23v77Ev");}
void  S857C2 ::v78(){vfunc_called(this, "_ZN6S857C23v78Ev");}
void  S857C2 ::v79(){vfunc_called(this, "_ZN6S857C23v79Ev");}
void  S857C2 ::v80(){vfunc_called(this, "_ZN6S857C23v80Ev");}
void  S857C2 ::v81(){vfunc_called(this, "_ZN6S857C23v81Ev");}
void  S857C2 ::v82(){vfunc_called(this, "_ZN6S857C23v82Ev");}
void  S857C2 ::v83(){vfunc_called(this, "_ZN6S857C23v83Ev");}
S857C2 ::S857C2(){ note_ctor("S857C2", this);} // tgen

static void Test_S857C2()
{
  extern Class_Descriptor cd_S857C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,48)];
    init_test(&cd_S857C2, buf);
    S857C2 *dp, &lv = *(dp=new (buf) S857C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,188), "sizeof(S857C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S857C2)");
    check_base_class_offset(lv, (S857C5_nt*)(S857C4*)(S857C3*), 0, "S857C2");
    check_base_class_offset(lv, (S857C6_nt*)(S857C4*)(S857C3*), ABISELECT(8,4), "S857C2");
    check_base_class_offset(lv, (S857C4*)(S857C3*), 0, "S857C2");
    check_base_class_offset(lv, (S857C3*), 0, "S857C2");
    check_base_class_offset(lv, (S857C11*), ABISELECT(80,60), "S857C2");
    check_field_offset(lv, s857c2f0, ABISELECT(88,64), "S857C2.s857c2f0");
    check_field_offset(lv, s857c2f1, ABISELECT(120,96), "S857C2.s857c2f1");
    check_field_offset(lv, s857c2f2, ABISELECT(192,160), "S857C2.s857c2f2");
    check_field_offset(lv, s857c2f3, ABISELECT(200,164), "S857C2.s857c2f3");
    check_field_offset(lv, s857c2f4, ABISELECT(208,168), "S857C2.s857c2f4");
    check_field_offset(lv, s857c2f5, ABISELECT(240,184), "S857C2.s857c2f5");
    test_class_info(&lv, &cd_S857C2);
    dp->~S857C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS857C2(Test_S857C2, "S857C2", ABISELECT(248,188));

#else // __cplusplus

extern void _ZN6S857C2C1Ev();
extern void _ZN6S857C2D1Ev();
Name_Map name_map_S857C2[] = {
  NSPAIR(_ZN6S857C2C1Ev),
  NSPAIR(_ZN6S857C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S857C5_nt;
extern VTBL_ENTRY _ZTI9S857C5_nt[];
extern  VTBL_ENTRY _ZTV9S857C5_nt[];
extern Class_Descriptor cd_S857C6_nt;
extern VTBL_ENTRY _ZTI9S857C6_nt[];
extern  VTBL_ENTRY _ZTV9S857C6_nt[];
extern Class_Descriptor cd_S857C4;
extern VTBL_ENTRY _ZTI6S857C4[];
extern  VTBL_ENTRY _ZTV6S857C4[];
extern Class_Descriptor cd_S857C3;
extern VTBL_ENTRY _ZTI6S857C3[];
extern  VTBL_ENTRY _ZTV6S857C3[];
extern Class_Descriptor cd_S857C11;
extern VTBL_ENTRY _ZTI7S857C11[];
extern  VTBL_ENTRY _ZTV7S857C11[];
static Base_Class bases_S857C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S857C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S857C6_nt,    ABISELECT(8,4), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_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_S857C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S857C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S857C11,    ABISELECT(80,60), //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},
  {0}};
extern VTBL_ENTRY _ZTI6S857C2[];
extern void _ZN6S857C2D1Ev();
extern void _ZN6S857C2D0Ev();
extern void _ZN9S857C5_nt3v13Ev();
extern void _ZN9S857C5_nt3v14Ev();
extern void _ZN9S857C5_nt3v15Ev();
extern void _ZN6S857C43v17Ev();
extern void _ZN6S857C43v18Ev();
extern void _ZN6S857C43v19Ev();
extern void _ZN6S857C43v20Ev();
extern void _ZN6S857C43v21Ev();
extern void _ZN6S857C43v22Ev();
extern void _ZN6S857C43v23Ev();
extern void _ZN6S857C43v24Ev();
extern void _ZN6S857C43v25Ev();
extern void _ZN6S857C43v26Ev();
extern void _ZN6S857C43v27Ev();
extern void _ZN6S857C43v28Ev();
extern void _ZN6S857C43v29Ev();
extern void _ZN6S857C43v30Ev();
extern void _ZN6S857C43v31Ev();
extern void _ZN6S857C43v32Ev();
extern void _ZN6S857C43v33Ev();
extern void _ZN6S857C43v34Ev();
extern void _ZN6S857C43v35Ev();
extern void _ZN6S857C43v36Ev();
extern void _ZN6S857C43v37Ev();
extern void _ZN6S857C43v38Ev();
extern void _ZN6S857C33v39Ev();
extern void _ZN6S857C33v40Ev();
extern void _ZN6S857C33v41Ev();
extern void _ZN6S857C23v43Ev();
extern void _ZN6S857C23v44Ev();
extern void _ZN6S857C23v45Ev();
extern void _ZN6S857C23v46Ev();
extern void _ZN6S857C23v47Ev();
extern void _ZN6S857C23v48Ev();
extern void _ZN6S857C23v49Ev();
extern void _ZN6S857C23v50Ev();
extern void _ZN6S857C23v51Ev();
extern void _ZN6S857C23v52Ev();
extern void _ZN6S857C23v53Ev();
extern void _ZN6S857C23v54Ev();
extern void _ZN6S857C23v55Ev();
extern void _ZN6S857C23v56Ev();
extern void _ZN6S857C23v57Ev();
extern void _ZN6S857C23v58Ev();
extern void _ZN6S857C23v59Ev();
extern void _ZN6S857C23v60Ev();
extern void _ZN6S857C23v61Ev();
extern void _ZN6S857C23v62Ev();
extern void _ZN6S857C23v63Ev();
extern void _ZN6S857C23v64Ev();
extern void _ZN6S857C23v65Ev();
extern void _ZN6S857C23v66Ev();
extern void _ZN6S857C23v67Ev();
extern void _ZN6S857C23v68Ev();
extern void _ZN6S857C23v69Ev();
extern void _ZN6S857C23v70Ev();
extern void _ZN6S857C23v71Ev();
extern void _ZN6S857C23v72Ev();
extern void _ZN6S857C23v73Ev();
extern void _ZN6S857C23v74Ev();
extern void _ZN6S857C23v75Ev();
extern void _ZN6S857C23v76Ev();
extern void _ZN6S857C23v77Ev();
extern void _ZN6S857C23v78Ev();
extern void _ZN6S857C23v79Ev();
extern void _ZN6S857C23v80Ev();
extern void _ZN6S857C23v81Ev();
extern void _ZN6S857C23v82Ev();
extern void _ZN6S857C23v83Ev();
extern void ABISELECT(_ZThn8_N6S857C2D1Ev,_ZThn4_N6S857C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S857C2D0Ev,_ZThn4_N6S857C2D0Ev)();
extern void _ZN9S857C6_nt3v16Ev();
extern void ABISELECT(_ZThn80_N6S857C2D1Ev,_ZThn60_N6S857C2D1Ev)();
extern void ABISELECT(_ZThn80_N6S857C2D0Ev,_ZThn60_N6S857C2D0Ev)();
extern void _ZN7S857C113v42Ev();
static  VTBL_ENTRY vtc_S857C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S857C2[0]),
  (VTBL_ENTRY)&_ZN6S857C2D1Ev,
  (VTBL_ENTRY)&_ZN6S857C2D0Ev,
  (VTBL_ENTRY)&_ZN9S857C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S857C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S857C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN6S857C43v17Ev,
  (VTBL_ENTRY)&_ZN6S857C43v18Ev,
  (VTBL_ENTRY)&_ZN6S857C43v19Ev,
  (VTBL_ENTRY)&_ZN6S857C43v20Ev,
  (VTBL_ENTRY)&_ZN6S857C43v21Ev,
  (VTBL_ENTRY)&_ZN6S857C43v22Ev,
  (VTBL_ENTRY)&_ZN6S857C43v23Ev,
  (VTBL_ENTRY)&_ZN6S857C43v24Ev,
  (VTBL_ENTRY)&_ZN6S857C43v25Ev,
  (VTBL_ENTRY)&_ZN6S857C43v26Ev,
  (VTBL_ENTRY)&_ZN6S857C43v27Ev,
  (VTBL_ENTRY)&_ZN6S857C43v28Ev,
  (VTBL_ENTRY)&_ZN6S857C43v29Ev,
  (VTBL_ENTRY)&_ZN6S857C43v30Ev,
  (VTBL_ENTRY)&_ZN6S857C43v31Ev,
  (VTBL_ENTRY)&_ZN6S857C43v32Ev,
  (VTBL_ENTRY)&_ZN6S857C43v33Ev,
  (VTBL_ENTRY)&_ZN6S857C43v34Ev,
  (VTBL_ENTRY)&_ZN6S857C43v35Ev,
  (VTBL_ENTRY)&_ZN6S857C43v36Ev,
  (VTBL_ENTRY)&_ZN6S857C43v37Ev,
  (VTBL_ENTRY)&_ZN6S857C43v38Ev,
  (VTBL_ENTRY)&_ZN6S857C33v39Ev,
  (VTBL_ENTRY)&_ZN6S857C33v40Ev,
  (VTBL_ENTRY)&_ZN6S857C33v41Ev,
  (VTBL_ENTRY)&_ZN6S857C23v43Ev,
  (VTBL_ENTRY)&_ZN6S857C23v44Ev,
  (VTBL_ENTRY)&_ZN6S857C23v45Ev,
  (VTBL_ENTRY)&_ZN6S857C23v46Ev,
  (VTBL_ENTRY)&_ZN6S857C23v47Ev,
  (VTBL_ENTRY)&_ZN6S857C23v48Ev,
  (VTBL_ENTRY)&_ZN6S857C23v49Ev,
  (VTBL_ENTRY)&_ZN6S857C23v50Ev,
  (VTBL_ENTRY)&_ZN6S857C23v51Ev,
  (VTBL_ENTRY)&_ZN6S857C23v52Ev,
  (VTBL_ENTRY)&_ZN6S857C23v53Ev,
  (VTBL_ENTRY)&_ZN6S857C23v54Ev,
  (VTBL_ENTRY)&_ZN6S857C23v55Ev,
  (VTBL_ENTRY)&_ZN6S857C23v56Ev,
  (VTBL_ENTRY)&_ZN6S857C23v57Ev,
  (VTBL_ENTRY)&_ZN6S857C23v58Ev,
  (VTBL_ENTRY)&_ZN6S857C23v59Ev,
  (VTBL_ENTRY)&_ZN6S857C23v60Ev,
  (VTBL_ENTRY)&_ZN6S857C23v61Ev,
  (VTBL_ENTRY)&_ZN6S857C23v62Ev,
  (VTBL_ENTRY)&_ZN6S857C23v63Ev,
  (VTBL_ENTRY)&_ZN6S857C23v64Ev,
  (VTBL_ENTRY)&_ZN6S857C23v65Ev,
  (VTBL_ENTRY)&_ZN6S857C23v66Ev,
  (VTBL_ENTRY)&_ZN6S857C23v67Ev,
  (VTBL_ENTRY)&_ZN6S857C23v68Ev,
  (VTBL_ENTRY)&_ZN6S857C23v69Ev,
  (VTBL_ENTRY)&_ZN6S857C23v70Ev,
  (VTBL_ENTRY)&_ZN6S857C23v71Ev,
  (VTBL_ENTRY)&_ZN6S857C23v72Ev,
  (VTBL_ENTRY)&_ZN6S857C23v73Ev,
  (VTBL_ENTRY)&_ZN6S857C23v74Ev,
  (VTBL_ENTRY)&_ZN6S857C23v75Ev,
  (VTBL_ENTRY)&_ZN6S857C23v76Ev,
  (VTBL_ENTRY)&_ZN6S857C23v77Ev,
  (VTBL_ENTRY)&_ZN6S857C23v78Ev,
  (VTBL_ENTRY)&_ZN6S857C23v79Ev,
  (VTBL_ENTRY)&_ZN6S857C23v80Ev,
  (VTBL_ENTRY)&_ZN6S857C23v81Ev,
  (VTBL_ENTRY)&_ZN6S857C23v82Ev,
  (VTBL_ENTRY)&_ZN6S857C23v83Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S857C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S857C2D1Ev,_ZThn4_N6S857C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S857C2D0Ev,_ZThn4_N6S857C2D0Ev),
  (VTBL_ENTRY)&_ZN9S857C6_nt3v16Ev,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI6S857C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S857C2D1Ev,_ZThn60_N6S857C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S857C2D0Ev,_ZThn60_N6S857C2D0Ev),
  (VTBL_ENTRY)&_ZN7S857C113v42Ev,
};
extern VTBL_ENTRY _ZTI6S857C2[];
extern  VTBL_ENTRY _ZTV6S857C2[];
Class_Descriptor cd_S857C2 = {  "S857C2", // class name
  bases_S857C2, 5,
  &(vtc_S857C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,188), // object size
  NSPAIRA(_ZTI6S857C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S857C2),83, //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  S857C1  : S857C2 {
  virtual  ~S857C1(); // _ZN6S857C1D1Ev
  virtual void  v1(); // _ZN6S857C12v1Ev
  virtual void  v2(); // _ZN6S857C12v2Ev
  virtual void  v3(); // _ZN6S857C12v3Ev
  virtual void  v4(); // _ZN6S857C12v4Ev
  virtual void  v5(); // _ZN6S857C12v5Ev
  virtual void  v6(); // _ZN6S857C12v6Ev
  virtual void  v7(); // _ZN6S857C12v7Ev
  virtual void  v8(); // _ZN6S857C12v8Ev
  virtual void  v9(); // _ZN6S857C12v9Ev
  virtual void  v10(); // _ZN6S857C13v10Ev
  virtual void  v11(); // _ZN6S857C13v11Ev
  virtual void  v12(); // _ZN6S857C13v12Ev
  S857C1(); // tgen
};
//SIG(1 S857C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v13 v14 v15} BC6{ vd v16} vd v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38} vd v39 v40 v41 FC7{ m Fp Fi[2] FC8{ m}} FC9{ m FC10{ FL[4]}} Fc} BC11{ vd v42} vd 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 FC9 FC12{ m Fp FC9 FC13{ m Fp FC14{ Fi[4]}} Fi Fc} Fc[2] Fp FC15{ BC6 BC11 vd v84 v85 Fp[2]} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


 S857C1 ::~S857C1(){ note_dtor("S857C1", this);}
void  S857C1 ::v1(){vfunc_called(this, "_ZN6S857C12v1Ev");}
void  S857C1 ::v2(){vfunc_called(this, "_ZN6S857C12v2Ev");}
void  S857C1 ::v3(){vfunc_called(this, "_ZN6S857C12v3Ev");}
void  S857C1 ::v4(){vfunc_called(this, "_ZN6S857C12v4Ev");}
void  S857C1 ::v5(){vfunc_called(this, "_ZN6S857C12v5Ev");}
void  S857C1 ::v6(){vfunc_called(this, "_ZN6S857C12v6Ev");}
void  S857C1 ::v7(){vfunc_called(this, "_ZN6S857C12v7Ev");}
void  S857C1 ::v8(){vfunc_called(this, "_ZN6S857C12v8Ev");}
void  S857C1 ::v9(){vfunc_called(this, "_ZN6S857C12v9Ev");}
void  S857C1 ::v10(){vfunc_called(this, "_ZN6S857C13v10Ev");}
void  S857C1 ::v11(){vfunc_called(this, "_ZN6S857C13v11Ev");}
void  S857C1 ::v12(){vfunc_called(this, "_ZN6S857C13v12Ev");}
S857C1 ::S857C1(){ note_ctor("S857C1", this);} // tgen

static void Test_S857C1()
{
  extern Class_Descriptor cd_S857C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,48)];
    init_test(&cd_S857C1, buf);
    S857C1 *dp, &lv = *(dp=new (buf) S857C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,188), "sizeof(S857C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S857C1)");
    check_base_class_offset(lv, (S857C5_nt*)(S857C4*)(S857C3*)(S857C2*), 0, "S857C1");
    check_base_class_offset(lv, (S857C6_nt*)(S857C4*)(S857C3*)(S857C2*), ABISELECT(8,4), "S857C1");
    check_base_class_offset(lv, (S857C4*)(S857C3*)(S857C2*), 0, "S857C1");
    check_base_class_offset(lv, (S857C3*)(S857C2*), 0, "S857C1");
    check_base_class_offset(lv, (S857C11*)(S857C2*), ABISELECT(80,60), "S857C1");
    check_base_class_offset(lv, (S857C2*), 0, "S857C1");
    test_class_info(&lv, &cd_S857C1);
    dp->~S857C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS857C1(Test_S857C1, "S857C1", ABISELECT(248,188));

#else // __cplusplus

extern void _ZN6S857C1C1Ev();
extern void _ZN6S857C1D1Ev();
Name_Map name_map_S857C1[] = {
  NSPAIR(_ZN6S857C1C1Ev),
  NSPAIR(_ZN6S857C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S857C5_nt;
extern VTBL_ENTRY _ZTI9S857C5_nt[];
extern  VTBL_ENTRY _ZTV9S857C5_nt[];
extern Class_Descriptor cd_S857C6_nt;
extern VTBL_ENTRY _ZTI9S857C6_nt[];
extern  VTBL_ENTRY _ZTV9S857C6_nt[];
extern Class_Descriptor cd_S857C4;
extern VTBL_ENTRY _ZTI6S857C4[];
extern  VTBL_ENTRY _ZTV6S857C4[];
extern Class_Descriptor cd_S857C3;
extern VTBL_ENTRY _ZTI6S857C3[];
extern  VTBL_ENTRY _ZTV6S857C3[];
extern Class_Descriptor cd_S857C11;
extern VTBL_ENTRY _ZTI7S857C11[];
extern  VTBL_ENTRY _ZTV7S857C11[];
extern Class_Descriptor cd_S857C2;
extern VTBL_ENTRY _ZTI6S857C2[];
extern  VTBL_ENTRY _ZTV6S857C2[];
static Base_Class bases_S857C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S857C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S857C6_nt,    ABISELECT(8,4), //bcp->offset
    85, //bcp->virtual_function_table_offset
    2, //num_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_S857C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S857C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S857C11,    ABISELECT(80,60), //bcp->offset
    90, //bcp->virtual_function_table_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_S857C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S857C1[];
extern void _ZN6S857C1D1Ev();
extern void _ZN6S857C1D0Ev();
extern void _ZN9S857C5_nt3v13Ev();
extern void _ZN9S857C5_nt3v14Ev();
extern void _ZN9S857C5_nt3v15Ev();
extern void _ZN6S857C43v17Ev();
extern void _ZN6S857C43v18Ev();
extern void _ZN6S857C43v19Ev();
extern void _ZN6S857C43v20Ev();
extern void _ZN6S857C43v21Ev();
extern void _ZN6S857C43v22Ev();
extern void _ZN6S857C43v23Ev();
extern void _ZN6S857C43v24Ev();
extern void _ZN6S857C43v25Ev();
extern void _ZN6S857C43v26Ev();
extern void _ZN6S857C43v27Ev();
extern void _ZN6S857C43v28Ev();
extern void _ZN6S857C43v29Ev();
extern void _ZN6S857C43v30Ev();
extern void _ZN6S857C43v31Ev();
extern void _ZN6S857C43v32Ev();
extern void _ZN6S857C43v33Ev();
extern void _ZN6S857C43v34Ev();
extern void _ZN6S857C43v35Ev();
extern void _ZN6S857C43v36Ev();
extern void _ZN6S857C43v37Ev();
extern void _ZN6S857C43v38Ev();
extern void _ZN6S857C33v39Ev();
extern void _ZN6S857C33v40Ev();
extern void _ZN6S857C33v41Ev();
extern void _ZN6S857C23v43Ev();
extern void _ZN6S857C23v44Ev();
extern void _ZN6S857C23v45Ev();
extern void _ZN6S857C23v46Ev();
extern void _ZN6S857C23v47Ev();
extern void _ZN6S857C23v48Ev();
extern void _ZN6S857C23v49Ev();
extern void _ZN6S857C23v50Ev();
extern void _ZN6S857C23v51Ev();
extern void _ZN6S857C23v52Ev();
extern void _ZN6S857C23v53Ev();
extern void _ZN6S857C23v54Ev();
extern void _ZN6S857C23v55Ev();
extern void _ZN6S857C23v56Ev();
extern void _ZN6S857C23v57Ev();
extern void _ZN6S857C23v58Ev();
extern void _ZN6S857C23v59Ev();
extern void _ZN6S857C23v60Ev();
extern void _ZN6S857C23v61Ev();
extern void _ZN6S857C23v62Ev();
extern void _ZN6S857C23v63Ev();
extern void _ZN6S857C23v64Ev();
extern void _ZN6S857C23v65Ev();
extern void _ZN6S857C23v66Ev();
extern void _ZN6S857C23v67Ev();
extern void _ZN6S857C23v68Ev();
extern void _ZN6S857C23v69Ev();
extern void _ZN6S857C23v70Ev();
extern void _ZN6S857C23v71Ev();
extern void _ZN6S857C23v72Ev();
extern void _ZN6S857C23v73Ev();
extern void _ZN6S857C23v74Ev();
extern void _ZN6S857C23v75Ev();
extern void _ZN6S857C23v76Ev();
extern void _ZN6S857C23v77Ev();
extern void _ZN6S857C23v78Ev();
extern void _ZN6S857C23v79Ev();
extern void _ZN6S857C23v80Ev();
extern void _ZN6S857C23v81Ev();
extern void _ZN6S857C23v82Ev();
extern void _ZN6S857C23v83Ev();
extern void _ZN6S857C12v1Ev();
extern void _ZN6S857C12v2Ev();
extern void _ZN6S857C12v3Ev();
extern void _ZN6S857C12v4Ev();
extern void _ZN6S857C12v5Ev();
extern void _ZN6S857C12v6Ev();
extern void _ZN6S857C12v7Ev();
extern void _ZN6S857C12v8Ev();
extern void _ZN6S857C12v9Ev();
extern void _ZN6S857C13v10Ev();
extern void _ZN6S857C13v11Ev();
extern void _ZN6S857C13v12Ev();
extern void ABISELECT(_ZThn8_N6S857C1D1Ev,_ZThn4_N6S857C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S857C1D0Ev,_ZThn4_N6S857C1D0Ev)();
extern void _ZN9S857C6_nt3v16Ev();
extern void ABISELECT(_ZThn80_N6S857C1D1Ev,_ZThn60_N6S857C1D1Ev)();
extern void ABISELECT(_ZThn80_N6S857C1D0Ev,_ZThn60_N6S857C1D0Ev)();
extern void _ZN7S857C113v42Ev();
static  VTBL_ENTRY vtc_S857C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S857C1[0]),
  (VTBL_ENTRY)&_ZN6S857C1D1Ev,
  (VTBL_ENTRY)&_ZN6S857C1D0Ev,
  (VTBL_ENTRY)&_ZN9S857C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S857C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S857C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN6S857C43v17Ev,
  (VTBL_ENTRY)&_ZN6S857C43v18Ev,
  (VTBL_ENTRY)&_ZN6S857C43v19Ev,
  (VTBL_ENTRY)&_ZN6S857C43v20Ev,
  (VTBL_ENTRY)&_ZN6S857C43v21Ev,
  (VTBL_ENTRY)&_ZN6S857C43v22Ev,
  (VTBL_ENTRY)&_ZN6S857C43v23Ev,
  (VTBL_ENTRY)&_ZN6S857C43v24Ev,
  (VTBL_ENTRY)&_ZN6S857C43v25Ev,
  (VTBL_ENTRY)&_ZN6S857C43v26Ev,
  (VTBL_ENTRY)&_ZN6S857C43v27Ev,
  (VTBL_ENTRY)&_ZN6S857C43v28Ev,
  (VTBL_ENTRY)&_ZN6S857C43v29Ev,
  (VTBL_ENTRY)&_ZN6S857C43v30Ev,
  (VTBL_ENTRY)&_ZN6S857C43v31Ev,
  (VTBL_ENTRY)&_ZN6S857C43v32Ev,
  (VTBL_ENTRY)&_ZN6S857C43v33Ev,
  (VTBL_ENTRY)&_ZN6S857C43v34Ev,
  (VTBL_ENTRY)&_ZN6S857C43v35Ev,
  (VTBL_ENTRY)&_ZN6S857C43v36Ev,
  (VTBL_ENTRY)&_ZN6S857C43v37Ev,
  (VTBL_ENTRY)&_ZN6S857C43v38Ev,
  (VTBL_ENTRY)&_ZN6S857C33v39Ev,
  (VTBL_ENTRY)&_ZN6S857C33v40Ev,
  (VTBL_ENTRY)&_ZN6S857C33v41Ev,
  (VTBL_ENTRY)&_ZN6S857C23v43Ev,
  (VTBL_ENTRY)&_ZN6S857C23v44Ev,
  (VTBL_ENTRY)&_ZN6S857C23v45Ev,
  (VTBL_ENTRY)&_ZN6S857C23v46Ev,
  (VTBL_ENTRY)&_ZN6S857C23v47Ev,
  (VTBL_ENTRY)&_ZN6S857C23v48Ev,
  (VTBL_ENTRY)&_ZN6S857C23v49Ev,
  (VTBL_ENTRY)&_ZN6S857C23v50Ev,
  (VTBL_ENTRY)&_ZN6S857C23v51Ev,
  (VTBL_ENTRY)&_ZN6S857C23v52Ev,
  (VTBL_ENTRY)&_ZN6S857C23v53Ev,
  (VTBL_ENTRY)&_ZN6S857C23v54Ev,
  (VTBL_ENTRY)&_ZN6S857C23v55Ev,
  (VTBL_ENTRY)&_ZN6S857C23v56Ev,
  (VTBL_ENTRY)&_ZN6S857C23v57Ev,
  (VTBL_ENTRY)&_ZN6S857C23v58Ev,
  (VTBL_ENTRY)&_ZN6S857C23v59Ev,
  (VTBL_ENTRY)&_ZN6S857C23v60Ev,
  (VTBL_ENTRY)&_ZN6S857C23v61Ev,
  (VTBL_ENTRY)&_ZN6S857C23v62Ev,
  (VTBL_ENTRY)&_ZN6S857C23v63Ev,
  (VTBL_ENTRY)&_ZN6S857C23v64Ev,
  (VTBL_ENTRY)&_ZN6S857C23v65Ev,
  (VTBL_ENTRY)&_ZN6S857C23v66Ev,
  (VTBL_ENTRY)&_ZN6S857C23v67Ev,
  (VTBL_ENTRY)&_ZN6S857C23v68Ev,
  (VTBL_ENTRY)&_ZN6S857C23v69Ev,
  (VTBL_ENTRY)&_ZN6S857C23v70Ev,
  (VTBL_ENTRY)&_ZN6S857C23v71Ev,
  (VTBL_ENTRY)&_ZN6S857C23v72Ev,
  (VTBL_ENTRY)&_ZN6S857C23v73Ev,
  (VTBL_ENTRY)&_ZN6S857C23v74Ev,
  (VTBL_ENTRY)&_ZN6S857C23v75Ev,
  (VTBL_ENTRY)&_ZN6S857C23v76Ev,
  (VTBL_ENTRY)&_ZN6S857C23v77Ev,
  (VTBL_ENTRY)&_ZN6S857C23v78Ev,
  (VTBL_ENTRY)&_ZN6S857C23v79Ev,
  (VTBL_ENTRY)&_ZN6S857C23v80Ev,
  (VTBL_ENTRY)&_ZN6S857C23v81Ev,
  (VTBL_ENTRY)&_ZN6S857C23v82Ev,
  (VTBL_ENTRY)&_ZN6S857C23v83Ev,
  (VTBL_ENTRY)&_ZN6S857C12v1Ev,
  (VTBL_ENTRY)&_ZN6S857C12v2Ev,
  (VTBL_ENTRY)&_ZN6S857C12v3Ev,
  (VTBL_ENTRY)&_ZN6S857C12v4Ev,
  (VTBL_ENTRY)&_ZN6S857C12v5Ev,
  (VTBL_ENTRY)&_ZN6S857C12v6Ev,
  (VTBL_ENTRY)&_ZN6S857C12v7Ev,
  (VTBL_ENTRY)&_ZN6S857C12v8Ev,
  (VTBL_ENTRY)&_ZN6S857C12v9Ev,
  (VTBL_ENTRY)&_ZN6S857C13v10Ev,
  (VTBL_ENTRY)&_ZN6S857C13v11Ev,
  (VTBL_ENTRY)&_ZN6S857C13v12Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S857C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S857C1D1Ev,_ZThn4_N6S857C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S857C1D0Ev,_ZThn4_N6S857C1D0Ev),
  (VTBL_ENTRY)&_ZN9S857C6_nt3v16Ev,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI6S857C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S857C1D1Ev,_ZThn60_N6S857C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S857C1D0Ev,_ZThn60_N6S857C1D0Ev),
  (VTBL_ENTRY)&_ZN7S857C113v42Ev,
};
extern VTBL_ENTRY _ZTI6S857C1[];
extern  VTBL_ENTRY _ZTV6S857C1[];
Class_Descriptor cd_S857C1 = {  "S857C1", // class name
  bases_S857C1, 6,
  &(vtc_S857C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,188), // object size
  NSPAIRA(_ZTI6S857C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S857C1),95, //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  S856C5  {
  virtual  ~S856C5(); // _ZN6S856C5D1Ev
  virtual void  v13(); // _ZN6S856C53v13Ev
  virtual void  v14(); // _ZN6S856C53v14Ev
  virtual void  v15(); // _ZN6S856C53v15Ev
  S856C5(); // tgen
};
//SIG(-1 S856C5) C1{ vd v1 v2 v3}


 S856C5 ::~S856C5(){ note_dtor("S856C5", this);}
void  S856C5 ::v13(){vfunc_called(this, "_ZN6S856C53v13Ev");}
void  S856C5 ::v14(){vfunc_called(this, "_ZN6S856C53v14Ev");}
void  S856C5 ::v15(){vfunc_called(this, "_ZN6S856C53v15Ev");}
S856C5 ::S856C5(){ note_ctor("S856C5", this);} // tgen

static void Test_S856C5()
{
  extern Class_Descriptor cd_S856C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S856C5, buf);
    S856C5 *dp, &lv = *(dp=new (buf) S856C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S856C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S856C5)");
    test_class_info(&lv, &cd_S856C5);
    dp->~S856C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS856C5(Test_S856C5, "S856C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S856C5C1Ev();
extern void _ZN6S856C5D1Ev();
Name_Map name_map_S856C5[] = {
  NSPAIR(_ZN6S856C5C1Ev),
  NSPAIR(_ZN6S856C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S856C5[];
extern void _ZN6S856C5D1Ev();
extern void _ZN6S856C5D0Ev();
extern void _ZN6S856C53v13Ev();
extern void _ZN6S856C53v14Ev();
extern void _ZN6S856C53v15Ev();
static  VTBL_ENTRY vtc_S856C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S856C5[0]),
  (VTBL_ENTRY)&_ZN6S856C5D1Ev,
  (VTBL_ENTRY)&_ZN6S856C5D0Ev,
  (VTBL_ENTRY)&_ZN6S856C53v13Ev,
  (VTBL_ENTRY)&_ZN6S856C53v14Ev,
  (VTBL_ENTRY)&_ZN6S856C53v15Ev,
};
extern VTBL_ENTRY _ZTI6S856C5[];
extern  VTBL_ENTRY _ZTV6S856C5[];
Class_Descriptor cd_S856C5 = {  "S856C5", // class name
  0,0,//no base classes
  &(vtc_S856C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S856C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S856C5),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  S856C6  {
  virtual  ~S856C6(); // _ZN6S856C6D1Ev
  virtual void  v16(); // _ZN6S856C63v16Ev
  S856C6(); // tgen
};
//SIG(-1 S856C6) C1{ vd v1}


 S856C6 ::~S856C6(){ note_dtor("S856C6", this);}
void  S856C6 ::v16(){vfunc_called(this, "_ZN6S856C63v16Ev");}
S856C6 ::S856C6(){ note_ctor("S856C6", this);} // tgen

static void Test_S856C6()
{
  extern Class_Descriptor cd_S856C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S856C6, buf);
    S856C6 *dp, &lv = *(dp=new (buf) S856C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S856C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S856C6)");
    test_class_info(&lv, &cd_S856C6);
    dp->~S856C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS856C6(Test_S856C6, "S856C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S856C6C1Ev();
extern void _ZN6S856C6D1Ev();
Name_Map name_map_S856C6[] = {
  NSPAIR(_ZN6S856C6C1Ev),
  NSPAIR(_ZN6S856C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S856C6[];
extern void _ZN6S856C6D1Ev();
extern void _ZN6S856C6D0Ev();
extern void _ZN6S856C63v16Ev();
static  VTBL_ENTRY vtc_S856C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S856C6[0]),
  (VTBL_ENTRY)&_ZN6S856C6D1Ev,
  (VTBL_ENTRY)&_ZN6S856C6D0Ev,
  (VTBL_ENTRY)&_ZN6S856C63v16Ev,
};
extern VTBL_ENTRY _ZTI6S856C6[];
extern  VTBL_ENTRY _ZTV6S856C6[];
Class_Descriptor cd_S856C6 = {  "S856C6", // class name
  0,0,//no base classes
  &(vtc_S856C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S856C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S856C6),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  S856C4  : S856C5 , S856C6 {
  virtual  ~S856C4(); // _ZN6S856C4D1Ev
  virtual void  v17(); // _ZN6S856C43v17Ev
  virtual void  v18(); // _ZN6S856C43v18Ev
  virtual void  v19(); // _ZN6S856C43v19Ev
  virtual void  v20(); // _ZN6S856C43v20Ev
  virtual void  v21(); // _ZN6S856C43v21Ev
  virtual void  v22(); // _ZN6S856C43v22Ev
  virtual void  v23(); // _ZN6S856C43v23Ev
  virtual void  v24(); // _ZN6S856C43v24Ev
  virtual void  v25(); // _ZN6S856C43v25Ev
  virtual void  v26(); // _ZN6S856C43v26Ev
  virtual void  v27(); // _ZN6S856C43v27Ev
  virtual void  v28(); // _ZN6S856C43v28Ev
  virtual void  v29(); // _ZN6S856C43v29Ev
  virtual void  v30(); // _ZN6S856C43v30Ev
  virtual void  v31(); // _ZN6S856C43v31Ev
  virtual void  v32(); // _ZN6S856C43v32Ev
  virtual void  v33(); // _ZN6S856C43v33Ev
  virtual void  v34(); // _ZN6S856C43v34Ev
  virtual void  v35(); // _ZN6S856C43v35Ev
  virtual void  v36(); // _ZN6S856C43v36Ev
  virtual void  v37(); // _ZN6S856C43v37Ev
  virtual void  v38(); // _ZN6S856C43v38Ev
  S856C4(); // tgen
};
//SIG(-1 S856C4) C1{ BC2{ vd v23 v24 v25} BC3{ vd v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S856C4 ::~S856C4(){ note_dtor("S856C4", this);}
void  S856C4 ::v17(){vfunc_called(this, "_ZN6S856C43v17Ev");}
void  S856C4 ::v18(){vfunc_called(this, "_ZN6S856C43v18Ev");}
void  S856C4 ::v19(){vfunc_called(this, "_ZN6S856C43v19Ev");}
void  S856C4 ::v20(){vfunc_called(this, "_ZN6S856C43v20Ev");}
void  S856C4 ::v21(){vfunc_called(this, "_ZN6S856C43v21Ev");}
void  S856C4 ::v22(){vfunc_called(this, "_ZN6S856C43v22Ev");}
void  S856C4 ::v23(){vfunc_called(this, "_ZN6S856C43v23Ev");}
void  S856C4 ::v24(){vfunc_called(this, "_ZN6S856C43v24Ev");}
void  S856C4 ::v25(){vfunc_called(this, "_ZN6S856C43v25Ev");}
void  S856C4 ::v26(){vfunc_called(this, "_ZN6S856C43v26Ev");}
void  S856C4 ::v27(){vfunc_called(this, "_ZN6S856C43v27Ev");}
void  S856C4 ::v28(){vfunc_called(this, "_ZN6S856C43v28Ev");}
void  S856C4 ::v29(){vfunc_called(this, "_ZN6S856C43v29Ev");}
void  S856C4 ::v30(){vfunc_called(this, "_ZN6S856C43v30Ev");}
void  S856C4 ::v31(){vfunc_called(this, "_ZN6S856C43v31Ev");}
void  S856C4 ::v32(){vfunc_called(this, "_ZN6S856C43v32Ev");}
void  S856C4 ::v33(){vfunc_called(this, "_ZN6S856C43v33Ev");}
void  S856C4 ::v34(){vfunc_called(this, "_ZN6S856C43v34Ev");}
void  S856C4 ::v35(){vfunc_called(this, "_ZN6S856C43v35Ev");}
void  S856C4 ::v36(){vfunc_called(this, "_ZN6S856C43v36Ev");}
void  S856C4 ::v37(){vfunc_called(this, "_ZN6S856C43v37Ev");}
void  S856C4 ::v38(){vfunc_called(this, "_ZN6S856C43v38Ev");}
S856C4 ::S856C4(){ note_ctor("S856C4", this);} // tgen

static void Test_S856C4()
{
  extern Class_Descriptor cd_S856C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S856C4, buf);
    S856C4 *dp, &lv = *(dp=new (buf) S856C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S856C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S856C4)");
    check_base_class_offset(lv, (S856C5*), 0, "S856C4");
    check_base_class_offset(lv, (S856C6*), ABISELECT(8,4), "S856C4");
    test_class_info(&lv, &cd_S856C4);
    dp->~S856C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS856C4(Test_S856C4, "S856C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S856C4C1Ev();
extern void _ZN6S856C4D1Ev();
Name_Map name_map_S856C4[] = {
  NSPAIR(_ZN6S856C4C1Ev),
  NSPAIR(_ZN6S856C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S856C5;
extern VTBL_ENTRY _ZTI6S856C5[];
extern  VTBL_ENTRY _ZTV6S856C5[];
extern Class_Descriptor cd_S856C6;
extern VTBL_ENTRY _ZTI6S856C6[];
extern  VTBL_ENTRY _ZTV6S856C6[];
static Base_Class bases_S856C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S856C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S856C6,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S856C4[];
extern void _ZN6S856C4D1Ev();
extern void _ZN6S856C4D0Ev();
extern void _ZN6S856C53v13Ev();
extern void _ZN6S856C53v14Ev();
extern void _ZN6S856C53v15Ev();
extern void _ZN6S856C43v17Ev();
extern void _ZN6S856C43v18Ev();
extern void _ZN6S856C43v19Ev();
extern void _ZN6S856C43v20Ev();
extern void _ZN6S856C43v21Ev();
extern void _ZN6S856C43v22Ev();
extern void _ZN6S856C43v23Ev();
extern void _ZN6S856C43v24Ev();
extern void _ZN6S856C43v25Ev();
extern void _ZN6S856C43v26Ev();
extern void _ZN6S856C43v27Ev();
extern void _ZN6S856C43v28Ev();
extern void _ZN6S856C43v29Ev();
extern void _ZN6S856C43v30Ev();
extern void _ZN6S856C43v31Ev();
extern void _ZN6S856C43v32Ev();
extern void _ZN6S856C43v33Ev();
extern void _ZN6S856C43v34Ev();
extern void _ZN6S856C43v35Ev();
extern void _ZN6S856C43v36Ev();
extern void _ZN6S856C43v37Ev();
extern void _ZN6S856C43v38Ev();
extern void ABISELECT(_ZThn8_N6S856C4D1Ev,_ZThn4_N6S856C4D1Ev)();
extern void ABISELECT(_ZThn8_N6S856C4D0Ev,_ZThn4_N6S856C4D0Ev)();
extern void _ZN6S856C63v16Ev();
static  VTBL_ENTRY vtc_S856C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S856C4[0]),
  (VTBL_ENTRY)&_ZN6S856C4D1Ev,
  (VTBL_ENTRY)&_ZN6S856C4D0Ev,
  (VTBL_ENTRY)&_ZN6S856C53v13Ev,
  (VTBL_ENTRY)&_ZN6S856C53v14Ev,
  (VTBL_ENTRY)&_ZN6S856C53v15Ev,
  (VTBL_ENTRY)&_ZN6S856C43v17Ev,
  (VTBL_ENTRY)&_ZN6S856C43v18Ev,
  (VTBL_ENTRY)&_ZN6S856C43v19Ev,
  (VTBL_ENTRY)&_ZN6S856C43v20Ev,
  (VTBL_ENTRY)&_ZN6S856C43v21Ev,
  (VTBL_ENTRY)&_ZN6S856C43v22Ev,
  (VTBL_ENTRY)&_ZN6S856C43v23Ev,
  (VTBL_ENTRY)&_ZN6S856C43v24Ev,
  (VTBL_ENTRY)&_ZN6S856C43v25Ev,
  (VTBL_ENTRY)&_ZN6S856C43v26Ev,
  (VTBL_ENTRY)&_ZN6S856C43v27Ev,
  (VTBL_ENTRY)&_ZN6S856C43v28Ev,
  (VTBL_ENTRY)&_ZN6S856C43v29Ev,
  (VTBL_ENTRY)&_ZN6S856C43v30Ev,
  (VTBL_ENTRY)&_ZN6S856C43v31Ev,
  (VTBL_ENTRY)&_ZN6S856C43v32Ev,
  (VTBL_ENTRY)&_ZN6S856C43v33Ev,
  (VTBL_ENTRY)&_ZN6S856C43v34Ev,
  (VTBL_ENTRY)&_ZN6S856C43v35Ev,
  (VTBL_ENTRY)&_ZN6S856C43v36Ev,
  (VTBL_ENTRY)&_ZN6S856C43v37Ev,
  (VTBL_ENTRY)&_ZN6S856C43v38Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S856C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S856C4D1Ev,_ZThn4_N6S856C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S856C4D0Ev,_ZThn4_N6S856C4D0Ev),
  (VTBL_ENTRY)&_ZN6S856C63v16Ev,
};
extern VTBL_ENTRY _ZTI6S856C4[];
extern  VTBL_ENTRY _ZTV6S856C4[];
Class_Descriptor cd_S856C4 = {  "S856C4", // class name
  bases_S856C4, 2,
  &(vtc_S856C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S856C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S856C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S856C10_nt  {
  long s856c10f0[4];
};
//SIG(-1 S856C10_nt) C1{ Fl[4]}



//skip512 S856C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S856C9_nt  {
  ::S856C10_nt s856c9f0;
  void  mf856c9(); // _ZN9S856C9_nt7mf856c9Ev
};
//SIG(-1 S856C9_nt) C1{ m FC2{ Fl[4]}}


void  S856C9_nt ::mf856c9(){}

//skip512 S856C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S856C3  : S856C4 {
  ::S857C7_nt s856c3f0;
  ::S856C9_nt s856c3f1;
  char s856c3f2;
  virtual  ~S856C3(); // _ZN6S856C3D1Ev
  virtual void  v39(); // _ZN6S856C33v39Ev
  virtual void  v40(); // _ZN6S856C33v40Ev
  virtual void  v41(); // _ZN6S856C33v41Ev
  S856C3(); // tgen
};
//SIG(-1 S856C3) C1{ BC2{ BC3{ vd v4 v5 v6} BC4{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ Fl[4]}} Fc}


 S856C3 ::~S856C3(){ note_dtor("S856C3", this);}
void  S856C3 ::v39(){vfunc_called(this, "_ZN6S856C33v39Ev");}
void  S856C3 ::v40(){vfunc_called(this, "_ZN6S856C33v40Ev");}
void  S856C3 ::v41(){vfunc_called(this, "_ZN6S856C33v41Ev");}
S856C3 ::S856C3(){ note_ctor("S856C3", this);} // tgen

static void Test_S856C3()
{
  extern Class_Descriptor cd_S856C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S856C3, buf);
    S856C3 *dp, &lv = *(dp=new (buf) S856C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S856C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S856C3)");
    check_base_class_offset(lv, (S856C5*)(S856C4*), 0, "S856C3");
    check_base_class_offset(lv, (S856C6*)(S856C4*), ABISELECT(8,4), "S856C3");
    check_base_class_offset(lv, (S856C4*), 0, "S856C3");
    check_field_offset(lv, s856c3f0, ABISELECT(16,8), "S856C3.s856c3f0");
    check_field_offset(lv, s856c3f1, ABISELECT(40,24), "S856C3.s856c3f1");
    check_field_offset(lv, s856c3f2, ABISELECT(72,40), "S856C3.s856c3f2");
    test_class_info(&lv, &cd_S856C3);
    dp->~S856C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS856C3(Test_S856C3, "S856C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S856C3C1Ev();
extern void _ZN6S856C3D1Ev();
Name_Map name_map_S856C3[] = {
  NSPAIR(_ZN6S856C3C1Ev),
  NSPAIR(_ZN6S856C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S856C5;
extern VTBL_ENTRY _ZTI6S856C5[];
extern  VTBL_ENTRY _ZTV6S856C5[];
extern Class_Descriptor cd_S856C6;
extern VTBL_ENTRY _ZTI6S856C6[];
extern  VTBL_ENTRY _ZTV6S856C6[];
extern Class_Descriptor cd_S856C4;
extern VTBL_ENTRY _ZTI6S856C4[];
extern  VTBL_ENTRY _ZTV6S856C4[];
static Base_Class bases_S856C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S856C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S856C6,    ABISELECT(8,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S856C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S856C3[];
extern void _ZN6S856C3D1Ev();
extern void _ZN6S856C3D0Ev();
extern void _ZN6S856C53v13Ev();
extern void _ZN6S856C53v14Ev();
extern void _ZN6S856C53v15Ev();
extern void _ZN6S856C43v17Ev();
extern void _ZN6S856C43v18Ev();
extern void _ZN6S856C43v19Ev();
extern void _ZN6S856C43v20Ev();
extern void _ZN6S856C43v21Ev();
extern void _ZN6S856C43v22Ev();
extern void _ZN6S856C43v23Ev();
extern void _ZN6S856C43v24Ev();
extern void _ZN6S856C43v25Ev();
extern void _ZN6S856C43v26Ev();
extern void _ZN6S856C43v27Ev();
extern void _ZN6S856C43v28Ev();
extern void _ZN6S856C43v29Ev();
extern void _ZN6S856C43v30Ev();
extern void _ZN6S856C43v31Ev();
extern void _ZN6S856C43v32Ev();
extern void _ZN6S856C43v33Ev();
extern void _ZN6S856C43v34Ev();
extern void _ZN6S856C43v35Ev();
extern void _ZN6S856C43v36Ev();
extern void _ZN6S856C43v37Ev();
extern void _ZN6S856C43v38Ev();
extern void _ZN6S856C33v39Ev();
extern void _ZN6S856C33v40Ev();
extern void _ZN6S856C33v41Ev();
extern void ABISELECT(_ZThn8_N6S856C3D1Ev,_ZThn4_N6S856C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S856C3D0Ev,_ZThn4_N6S856C3D0Ev)();
extern void _ZN6S856C63v16Ev();
static  VTBL_ENTRY vtc_S856C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S856C3[0]),
  (VTBL_ENTRY)&_ZN6S856C3D1Ev,
  (VTBL_ENTRY)&_ZN6S856C3D0Ev,
  (VTBL_ENTRY)&_ZN6S856C53v13Ev,
  (VTBL_ENTRY)&_ZN6S856C53v14Ev,
  (VTBL_ENTRY)&_ZN6S856C53v15Ev,
  (VTBL_ENTRY)&_ZN6S856C43v17Ev,
  (VTBL_ENTRY)&_ZN6S856C43v18Ev,
  (VTBL_ENTRY)&_ZN6S856C43v19Ev,
  (VTBL_ENTRY)&_ZN6S856C43v20Ev,
  (VTBL_ENTRY)&_ZN6S856C43v21Ev,
  (VTBL_ENTRY)&_ZN6S856C43v22Ev,
  (VTBL_ENTRY)&_ZN6S856C43v23Ev,
  (VTBL_ENTRY)&_ZN6S856C43v24Ev,
  (VTBL_ENTRY)&_ZN6S856C43v25Ev,
  (VTBL_ENTRY)&_ZN6S856C43v26Ev,
  (VTBL_ENTRY)&_ZN6S856C43v27Ev,
  (VTBL_ENTRY)&_ZN6S856C43v28Ev,
  (VTBL_ENTRY)&_ZN6S856C43v29Ev,
  (VTBL_ENTRY)&_ZN6S856C43v30Ev,
  (VTBL_ENTRY)&_ZN6S856C43v31Ev,
  (VTBL_ENTRY)&_ZN6S856C43v32Ev,
  (VTBL_ENTRY)&_ZN6S856C43v33Ev,
  (VTBL_ENTRY)&_ZN6S856C43v34Ev,
  (VTBL_ENTRY)&_ZN6S856C43v35Ev,
  (VTBL_ENTRY)&_ZN6S856C43v36Ev,
  (VTBL_ENTRY)&_ZN6S856C43v37Ev,
  (VTBL_ENTRY)&_ZN6S856C43v38Ev,
  (VTBL_ENTRY)&_ZN6S856C33v39Ev,
  (VTBL_ENTRY)&_ZN6S856C33v40Ev,
  (VTBL_ENTRY)&_ZN6S856C33v41Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S856C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S856C3D1Ev,_ZThn4_N6S856C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S856C3D0Ev,_ZThn4_N6S856C3D0Ev),
  (VTBL_ENTRY)&_ZN6S856C63v16Ev,
};
extern VTBL_ENTRY _ZTI6S856C3[];
extern  VTBL_ENTRY _ZTV6S856C3[];
Class_Descriptor cd_S856C3 = {  "S856C3", // class name
  bases_S856C3, 3,
  &(vtc_S856C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S856C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S856C3),37, //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  S856C11  {
  virtual  ~S856C11(); // _ZN7S856C11D1Ev
  virtual void  v42(); // _ZN7S856C113v42Ev
  S856C11(); // tgen
};
//SIG(-1 S856C11) C1{ vd v1}


 S856C11 ::~S856C11(){ note_dtor("S856C11", this);}
void  S856C11 ::v42(){vfunc_called(this, "_ZN7S856C113v42Ev");}
S856C11 ::S856C11(){ note_ctor("S856C11", this);} // tgen

static void Test_S856C11()
{
  extern Class_Descriptor cd_S856C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S856C11, buf);
    S856C11 *dp, &lv = *(dp=new (buf) S856C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S856C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S856C11)");
    test_class_info(&lv, &cd_S856C11);
    dp->~S856C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS856C11(Test_S856C11, "S856C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S856C11C1Ev();
extern void _ZN7S856C11D1Ev();
Name_Map name_map_S856C11[] = {
  NSPAIR(_ZN7S856C11C1Ev),
  NSPAIR(_ZN7S856C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S856C11[];
extern void _ZN7S856C11D1Ev();
extern void _ZN7S856C11D0Ev();
extern void _ZN7S856C113v42Ev();
static  VTBL_ENTRY vtc_S856C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S856C11[0]),
  (VTBL_ENTRY)&_ZN7S856C11D1Ev,
  (VTBL_ENTRY)&_ZN7S856C11D0Ev,
  (VTBL_ENTRY)&_ZN7S856C113v42Ev,
};
extern VTBL_ENTRY _ZTI7S856C11[];
extern  VTBL_ENTRY _ZTV7S856C11[];
Class_Descriptor cd_S856C11 = {  "S856C11", // class name
  0,0,//no base classes
  &(vtc_S856C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S856C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S856C11),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  S856C13_nt  {
  void *s856c13f0;
  ::S856C9_nt s856c13f1;
  ::S857C14_nt s856c13f2;
  int s856c13f3;
  char s856c13f4;
  void  mf856c13(); // _ZN10S856C13_nt8mf856c13Ev
};
//SIG(-1 S856C13_nt) C1{ m Fp FC2{ m FC3{ Fl[4]}} FC4{ m Fp FC5{ Fi[4]}} Fi Fc}


void  S856C13_nt ::mf856c13(){}

//skip512 S856C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S856C2  : S856C3 , S856C11 {
  ::S856C9_nt s856c2f0;
  ::S856C13_nt s856c2f1;
  char s856c2f2[2];
  void *s856c2f3;
  ::S857C16 s856c2f4;
  void *s856c2f5;
  virtual  ~S856C2(); // _ZN6S856C2D1Ev
  virtual void  v43(); // _ZN6S856C23v43Ev
  virtual void  v44(); // _ZN6S856C23v44Ev
  virtual void  v45(); // _ZN6S856C23v45Ev
  virtual void  v46(); // _ZN6S856C23v46Ev
  virtual void  v47(); // _ZN6S856C23v47Ev
  virtual void  v48(); // _ZN6S856C23v48Ev
  virtual void  v49(); // _ZN6S856C23v49Ev
  virtual void  v50(); // _ZN6S856C23v50Ev
  virtual void  v51(); // _ZN6S856C23v51Ev
  virtual void  v52(); // _ZN6S856C23v52Ev
  virtual void  v53(); // _ZN6S856C23v53Ev
  virtual void  v54(); // _ZN6S856C23v54Ev
  virtual void  v55(); // _ZN6S856C23v55Ev
  virtual void  v56(); // _ZN6S856C23v56Ev
  virtual void  v57(); // _ZN6S856C23v57Ev
  virtual void  v58(); // _ZN6S856C23v58Ev
  virtual void  v59(); // _ZN6S856C23v59Ev
  virtual void  v60(); // _ZN6S856C23v60Ev
  virtual void  v61(); // _ZN6S856C23v61Ev
  virtual void  v62(); // _ZN6S856C23v62Ev
  virtual void  v63(); // _ZN6S856C23v63Ev
  virtual void  v64(); // _ZN6S856C23v64Ev
  virtual void  v65(); // _ZN6S856C23v65Ev
  virtual void  v66(); // _ZN6S856C23v66Ev
  virtual void  v67(); // _ZN6S856C23v67Ev
  virtual void  v68(); // _ZN6S856C23v68Ev
  virtual void  v69(); // _ZN6S856C23v69Ev
  virtual void  v70(); // _ZN6S856C23v70Ev
  virtual void  v71(); // _ZN6S856C23v71Ev
  virtual void  v72(); // _ZN6S856C23v72Ev
  virtual void  v73(); // _ZN6S856C23v73Ev
  virtual void  v74(); // _ZN6S856C23v74Ev
  virtual void  v75(); // _ZN6S856C23v75Ev
  virtual void  v76(); // _ZN6S856C23v76Ev
  virtual void  v77(); // _ZN6S856C23v77Ev
  virtual void  v78(); // _ZN6S856C23v78Ev
  virtual void  v79(); // _ZN6S856C23v79Ev
  virtual void  v80(); // _ZN6S856C23v80Ev
  virtual void  v81(); // _ZN6S856C23v81Ev
  virtual void  v82(); // _ZN6S856C23v82Ev
  virtual void  v83(); // _ZN6S856C23v83Ev
  S856C2(); // tgen
};
//SIG(-1 S856C2) C1{ BC2{ BC3{ BC4{ vd v42 v43 v44} BC5{ vd v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67} vd v68 v69 v70 FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ Fl[4]}} Fc} BC10{ vd v71} 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 FC8 FC11{ m Fp FC8 FC12{ m Fp FC13{ Fi[4]}} Fi Fc} Fc[2] Fp FC14{ BC15{ vd v74} BC16{ vd v75} vd v72 v73 Fp[2]} Fp}


 S856C2 ::~S856C2(){ note_dtor("S856C2", this);}
void  S856C2 ::v43(){vfunc_called(this, "_ZN6S856C23v43Ev");}
void  S856C2 ::v44(){vfunc_called(this, "_ZN6S856C23v44Ev");}
void  S856C2 ::v45(){vfunc_called(this, "_ZN6S856C23v45Ev");}
void  S856C2 ::v46(){vfunc_called(this, "_ZN6S856C23v46Ev");}
void  S856C2 ::v47(){vfunc_called(this, "_ZN6S856C23v47Ev");}
void  S856C2 ::v48(){vfunc_called(this, "_ZN6S856C23v48Ev");}
void  S856C2 ::v49(){vfunc_called(this, "_ZN6S856C23v49Ev");}
void  S856C2 ::v50(){vfunc_called(this, "_ZN6S856C23v50Ev");}
void  S856C2 ::v51(){vfunc_called(this, "_ZN6S856C23v51Ev");}
void  S856C2 ::v52(){vfunc_called(this, "_ZN6S856C23v52Ev");}
void  S856C2 ::v53(){vfunc_called(this, "_ZN6S856C23v53Ev");}
void  S856C2 ::v54(){vfunc_called(this, "_ZN6S856C23v54Ev");}
void  S856C2 ::v55(){vfunc_called(this, "_ZN6S856C23v55Ev");}
void  S856C2 ::v56(){vfunc_called(this, "_ZN6S856C23v56Ev");}
void  S856C2 ::v57(){vfunc_called(this, "_ZN6S856C23v57Ev");}
void  S856C2 ::v58(){vfunc_called(this, "_ZN6S856C23v58Ev");}
void  S856C2 ::v59(){vfunc_called(this, "_ZN6S856C23v59Ev");}
void  S856C2 ::v60(){vfunc_called(this, "_ZN6S856C23v60Ev");}
void  S856C2 ::v61(){vfunc_called(this, "_ZN6S856C23v61Ev");}
void  S856C2 ::v62(){vfunc_called(this, "_ZN6S856C23v62Ev");}
void  S856C2 ::v63(){vfunc_called(this, "_ZN6S856C23v63Ev");}
void  S856C2 ::v64(){vfunc_called(this, "_ZN6S856C23v64Ev");}
void  S856C2 ::v65(){vfunc_called(this, "_ZN6S856C23v65Ev");}
void  S856C2 ::v66(){vfunc_called(this, "_ZN6S856C23v66Ev");}
void  S856C2 ::v67(){vfunc_called(this, "_ZN6S856C23v67Ev");}
void  S856C2 ::v68(){vfunc_called(this, "_ZN6S856C23v68Ev");}
void  S856C2 ::v69(){vfunc_called(this, "_ZN6S856C23v69Ev");}
void  S856C2 ::v70(){vfunc_called(this, "_ZN6S856C23v70Ev");}
void  S856C2 ::v71(){vfunc_called(this, "_ZN6S856C23v71Ev");}
void  S856C2 ::v72(){vfunc_called(this, "_ZN6S856C23v72Ev");}
void  S856C2 ::v73(){vfunc_called(this, "_ZN6S856C23v73Ev");}
void  S856C2 ::v74(){vfunc_called(this, "_ZN6S856C23v74Ev");}
void  S856C2 ::v75(){vfunc_called(this, "_ZN6S856C23v75Ev");}
void  S856C2 ::v76(){vfunc_called(this, "_ZN6S856C23v76Ev");}
void  S856C2 ::v77(){vfunc_called(this, "_ZN6S856C23v77Ev");}
void  S856C2 ::v78(){vfunc_called(this, "_ZN6S856C23v78Ev");}
void  S856C2 ::v79(){vfunc_called(this, "_ZN6S856C23v79Ev");}
void  S856C2 ::v80(){vfunc_called(this, "_ZN6S856C23v80Ev");}
void  S856C2 ::v81(){vfunc_called(this, "_ZN6S856C23v81Ev");}
void  S856C2 ::v82(){vfunc_called(this, "_ZN6S856C23v82Ev");}
void  S856C2 ::v83(){vfunc_called(this, "_ZN6S856C23v83Ev");}
S856C2 ::S856C2(){ note_ctor("S856C2", this);} // tgen

static void Test_S856C2()
{
  extern Class_Descriptor cd_S856C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,36)];
    init_test(&cd_S856C2, buf);
    S856C2 *dp, &lv = *(dp=new (buf) S856C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,140), "sizeof(S856C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S856C2)");
    check_base_class_offset(lv, (S856C5*)(S856C4*)(S856C3*), 0, "S856C2");
    check_base_class_offset(lv, (S856C6*)(S856C4*)(S856C3*), ABISELECT(8,4), "S856C2");
    check_base_class_offset(lv, (S856C4*)(S856C3*), 0, "S856C2");
    check_base_class_offset(lv, (S856C3*), 0, "S856C2");
    check_base_class_offset(lv, (S856C11*), ABISELECT(80,44), "S856C2");
    check_field_offset(lv, s856c2f0, ABISELECT(88,48), "S856C2.s856c2f0");
    check_field_offset(lv, s856c2f1, ABISELECT(120,64), "S856C2.s856c2f1");
    check_field_offset(lv, s856c2f2, ABISELECT(192,112), "S856C2.s856c2f2");
    check_field_offset(lv, s856c2f3, ABISELECT(200,116), "S856C2.s856c2f3");
    check_field_offset(lv, s856c2f4, ABISELECT(208,120), "S856C2.s856c2f4");
    check_field_offset(lv, s856c2f5, ABISELECT(240,136), "S856C2.s856c2f5");
    test_class_info(&lv, &cd_S856C2);
    dp->~S856C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS856C2(Test_S856C2, "S856C2", ABISELECT(248,140));

#else // __cplusplus

extern void _ZN6S856C2C1Ev();
extern void _ZN6S856C2D1Ev();
Name_Map name_map_S856C2[] = {
  NSPAIR(_ZN6S856C2C1Ev),
  NSPAIR(_ZN6S856C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S856C5;
extern VTBL_ENTRY _ZTI6S856C5[];
extern  VTBL_ENTRY _ZTV6S856C5[];
extern Class_Descriptor cd_S856C6;
extern VTBL_ENTRY _ZTI6S856C6[];
extern  VTBL_ENTRY _ZTV6S856C6[];
extern Class_Descriptor cd_S856C4;
extern VTBL_ENTRY _ZTI6S856C4[];
extern  VTBL_ENTRY _ZTV6S856C4[];
extern Class_Descriptor cd_S856C3;
extern VTBL_ENTRY _ZTI6S856C3[];
extern  VTBL_ENTRY _ZTV6S856C3[];
extern Class_Descriptor cd_S856C11;
extern VTBL_ENTRY _ZTI7S856C11[];
extern  VTBL_ENTRY _ZTV7S856C11[];
static Base_Class bases_S856C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S856C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S856C6,    ABISELECT(8,4), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_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_S856C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S856C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S856C11,    ABISELECT(80,44), //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},
  {0}};
extern VTBL_ENTRY _ZTI6S856C2[];
extern void _ZN6S856C2D1Ev();
extern void _ZN6S856C2D0Ev();
extern void _ZN6S856C53v13Ev();
extern void _ZN6S856C53v14Ev();
extern void _ZN6S856C53v15Ev();
extern void _ZN6S856C43v17Ev();
extern void _ZN6S856C43v18Ev();
extern void _ZN6S856C43v19Ev();
extern void _ZN6S856C43v20Ev();
extern void _ZN6S856C43v21Ev();
extern void _ZN6S856C43v22Ev();
extern void _ZN6S856C43v23Ev();
extern void _ZN6S856C43v24Ev();
extern void _ZN6S856C43v25Ev();
extern void _ZN6S856C43v26Ev();
extern void _ZN6S856C43v27Ev();
extern void _ZN6S856C43v28Ev();
extern void _ZN6S856C43v29Ev();
extern void _ZN6S856C43v30Ev();
extern void _ZN6S856C43v31Ev();
extern void _ZN6S856C43v32Ev();
extern void _ZN6S856C43v33Ev();
extern void _ZN6S856C43v34Ev();
extern void _ZN6S856C43v35Ev();
extern void _ZN6S856C43v36Ev();
extern void _ZN6S856C43v37Ev();
extern void _ZN6S856C43v38Ev();
extern void _ZN6S856C33v39Ev();
extern void _ZN6S856C33v40Ev();
extern void _ZN6S856C33v41Ev();
extern void _ZN6S856C23v43Ev();
extern void _ZN6S856C23v44Ev();
extern void _ZN6S856C23v45Ev();
extern void _ZN6S856C23v46Ev();
extern void _ZN6S856C23v47Ev();
extern void _ZN6S856C23v48Ev();
extern void _ZN6S856C23v49Ev();
extern void _ZN6S856C23v50Ev();
extern void _ZN6S856C23v51Ev();
extern void _ZN6S856C23v52Ev();
extern void _ZN6S856C23v53Ev();
extern void _ZN6S856C23v54Ev();
extern void _ZN6S856C23v55Ev();
extern void _ZN6S856C23v56Ev();
extern void _ZN6S856C23v57Ev();
extern void _ZN6S856C23v58Ev();
extern void _ZN6S856C23v59Ev();
extern void _ZN6S856C23v60Ev();
extern void _ZN6S856C23v61Ev();
extern void _ZN6S856C23v62Ev();
extern void _ZN6S856C23v63Ev();
extern void _ZN6S856C23v64Ev();
extern void _ZN6S856C23v65Ev();
extern void _ZN6S856C23v66Ev();
extern void _ZN6S856C23v67Ev();
extern void _ZN6S856C23v68Ev();
extern void _ZN6S856C23v69Ev();
extern void _ZN6S856C23v70Ev();
extern void _ZN6S856C23v71Ev();
extern void _ZN6S856C23v72Ev();
extern void _ZN6S856C23v73Ev();
extern void _ZN6S856C23v74Ev();
extern void _ZN6S856C23v75Ev();
extern void _ZN6S856C23v76Ev();
extern void _ZN6S856C23v77Ev();
extern void _ZN6S856C23v78Ev();
extern void _ZN6S856C23v79Ev();
extern void _ZN6S856C23v80Ev();
extern void _ZN6S856C23v81Ev();
extern void _ZN6S856C23v82Ev();
extern void _ZN6S856C23v83Ev();
extern void ABISELECT(_ZThn8_N6S856C2D1Ev,_ZThn4_N6S856C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S856C2D0Ev,_ZThn4_N6S856C2D0Ev)();
extern void _ZN6S856C63v16Ev();
extern void ABISELECT(_ZThn80_N6S856C2D1Ev,_ZThn44_N6S856C2D1Ev)();
extern void ABISELECT(_ZThn80_N6S856C2D0Ev,_ZThn44_N6S856C2D0Ev)();
extern void _ZN7S856C113v42Ev();
static  VTBL_ENTRY vtc_S856C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S856C2[0]),
  (VTBL_ENTRY)&_ZN6S856C2D1Ev,
  (VTBL_ENTRY)&_ZN6S856C2D0Ev,
  (VTBL_ENTRY)&_ZN6S856C53v13Ev,
  (VTBL_ENTRY)&_ZN6S856C53v14Ev,
  (VTBL_ENTRY)&_ZN6S856C53v15Ev,
  (VTBL_ENTRY)&_ZN6S856C43v17Ev,
  (VTBL_ENTRY)&_ZN6S856C43v18Ev,
  (VTBL_ENTRY)&_ZN6S856C43v19Ev,
  (VTBL_ENTRY)&_ZN6S856C43v20Ev,
  (VTBL_ENTRY)&_ZN6S856C43v21Ev,
  (VTBL_ENTRY)&_ZN6S856C43v22Ev,
  (VTBL_ENTRY)&_ZN6S856C43v23Ev,
  (VTBL_ENTRY)&_ZN6S856C43v24Ev,
  (VTBL_ENTRY)&_ZN6S856C43v25Ev,
  (VTBL_ENTRY)&_ZN6S856C43v26Ev,
  (VTBL_ENTRY)&_ZN6S856C43v27Ev,
  (VTBL_ENTRY)&_ZN6S856C43v28Ev,
  (VTBL_ENTRY)&_ZN6S856C43v29Ev,
  (VTBL_ENTRY)&_ZN6S856C43v30Ev,
  (VTBL_ENTRY)&_ZN6S856C43v31Ev,
  (VTBL_ENTRY)&_ZN6S856C43v32Ev,
  (VTBL_ENTRY)&_ZN6S856C43v33Ev,
  (VTBL_ENTRY)&_ZN6S856C43v34Ev,
  (VTBL_ENTRY)&_ZN6S856C43v35Ev,
  (VTBL_ENTRY)&_ZN6S856C43v36Ev,
  (VTBL_ENTRY)&_ZN6S856C43v37Ev,
  (VTBL_ENTRY)&_ZN6S856C43v38Ev,
  (VTBL_ENTRY)&_ZN6S856C33v39Ev,
  (VTBL_ENTRY)&_ZN6S856C33v40Ev,
  (VTBL_ENTRY)&_ZN6S856C33v41Ev,
  (VTBL_ENTRY)&_ZN6S856C23v43Ev,
  (VTBL_ENTRY)&_ZN6S856C23v44Ev,
  (VTBL_ENTRY)&_ZN6S856C23v45Ev,
  (VTBL_ENTRY)&_ZN6S856C23v46Ev,
  (VTBL_ENTRY)&_ZN6S856C23v47Ev,
  (VTBL_ENTRY)&_ZN6S856C23v48Ev,
  (VTBL_ENTRY)&_ZN6S856C23v49Ev,
  (VTBL_ENTRY)&_ZN6S856C23v50Ev,
  (VTBL_ENTRY)&_ZN6S856C23v51Ev,
  (VTBL_ENTRY)&_ZN6S856C23v52Ev,
  (VTBL_ENTRY)&_ZN6S856C23v53Ev,
  (VTBL_ENTRY)&_ZN6S856C23v54Ev,
  (VTBL_ENTRY)&_ZN6S856C23v55Ev,
  (VTBL_ENTRY)&_ZN6S856C23v56Ev,
  (VTBL_ENTRY)&_ZN6S856C23v57Ev,
  (VTBL_ENTRY)&_ZN6S856C23v58Ev,
  (VTBL_ENTRY)&_ZN6S856C23v59Ev,
  (VTBL_ENTRY)&_ZN6S856C23v60Ev,
  (VTBL_ENTRY)&_ZN6S856C23v61Ev,
  (VTBL_ENTRY)&_ZN6S856C23v62Ev,
  (VTBL_ENTRY)&_ZN6S856C23v63Ev,
  (VTBL_ENTRY)&_ZN6S856C23v64Ev,
  (VTBL_ENTRY)&_ZN6S856C23v65Ev,
  (VTBL_ENTRY)&_ZN6S856C23v66Ev,
  (VTBL_ENTRY)&_ZN6S856C23v67Ev,
  (VTBL_ENTRY)&_ZN6S856C23v68Ev,
  (VTBL_ENTRY)&_ZN6S856C23v69Ev,
  (VTBL_ENTRY)&_ZN6S856C23v70Ev,
  (VTBL_ENTRY)&_ZN6S856C23v71Ev,
  (VTBL_ENTRY)&_ZN6S856C23v72Ev,
  (VTBL_ENTRY)&_ZN6S856C23v73Ev,
  (VTBL_ENTRY)&_ZN6S856C23v74Ev,
  (VTBL_ENTRY)&_ZN6S856C23v75Ev,
  (VTBL_ENTRY)&_ZN6S856C23v76Ev,
  (VTBL_ENTRY)&_ZN6S856C23v77Ev,
  (VTBL_ENTRY)&_ZN6S856C23v78Ev,
  (VTBL_ENTRY)&_ZN6S856C23v79Ev,
  (VTBL_ENTRY)&_ZN6S856C23v80Ev,
  (VTBL_ENTRY)&_ZN6S856C23v81Ev,
  (VTBL_ENTRY)&_ZN6S856C23v82Ev,
  (VTBL_ENTRY)&_ZN6S856C23v83Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S856C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S856C2D1Ev,_ZThn4_N6S856C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S856C2D0Ev,_ZThn4_N6S856C2D0Ev),
  (VTBL_ENTRY)&_ZN6S856C63v16Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI6S856C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S856C2D1Ev,_ZThn44_N6S856C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S856C2D0Ev,_ZThn44_N6S856C2D0Ev),
  (VTBL_ENTRY)&_ZN7S856C113v42Ev,
};
extern VTBL_ENTRY _ZTI6S856C2[];
extern  VTBL_ENTRY _ZTV6S856C2[];
Class_Descriptor cd_S856C2 = {  "S856C2", // class name
  bases_S856C2, 5,
  &(vtc_S856C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,140), // object size
  NSPAIRA(_ZTI6S856C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S856C2),83, //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  S856C1  : S856C2 {
  virtual  ~S856C1(); // _ZN6S856C1D1Ev
  virtual void  v1(); // _ZN6S856C12v1Ev
  virtual void  v2(); // _ZN6S856C12v2Ev
  virtual void  v3(); // _ZN6S856C12v3Ev
  virtual void  v4(); // _ZN6S856C12v4Ev
  virtual void  v5(); // _ZN6S856C12v5Ev
  virtual void  v6(); // _ZN6S856C12v6Ev
  virtual void  v7(); // _ZN6S856C12v7Ev
  virtual void  v8(); // _ZN6S856C12v8Ev
  virtual void  v9(); // _ZN6S856C12v9Ev
  virtual void  v10(); // _ZN6S856C13v10Ev
  virtual void  v11(); // _ZN6S856C13v11Ev
  virtual void  v12(); // _ZN6S856C13v12Ev
  S856C1(); // tgen
};
//SIG(1 S856C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v13 v14 v15} BC6{ vd v16} vd v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38} vd v39 v40 v41 FC7{ m Fp Fi[2] FC8{ m}} FC9{ m FC10{ Fl[4]}} Fc} BC11{ vd v42} vd 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 FC9 FC12{ m Fp FC9 FC13{ m Fp FC14{ Fi[4]}} Fi Fc} Fc[2] Fp FC15{ BC16{ vd v86} BC17{ vd v87} vd v84 v85 Fp[2]} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


 S856C1 ::~S856C1(){ note_dtor("S856C1", this);}
void  S856C1 ::v1(){vfunc_called(this, "_ZN6S856C12v1Ev");}
void  S856C1 ::v2(){vfunc_called(this, "_ZN6S856C12v2Ev");}
void  S856C1 ::v3(){vfunc_called(this, "_ZN6S856C12v3Ev");}
void  S856C1 ::v4(){vfunc_called(this, "_ZN6S856C12v4Ev");}
void  S856C1 ::v5(){vfunc_called(this, "_ZN6S856C12v5Ev");}
void  S856C1 ::v6(){vfunc_called(this, "_ZN6S856C12v6Ev");}
void  S856C1 ::v7(){vfunc_called(this, "_ZN6S856C12v7Ev");}
void  S856C1 ::v8(){vfunc_called(this, "_ZN6S856C12v8Ev");}
void  S856C1 ::v9(){vfunc_called(this, "_ZN6S856C12v9Ev");}
void  S856C1 ::v10(){vfunc_called(this, "_ZN6S856C13v10Ev");}
void  S856C1 ::v11(){vfunc_called(this, "_ZN6S856C13v11Ev");}
void  S856C1 ::v12(){vfunc_called(this, "_ZN6S856C13v12Ev");}
S856C1 ::S856C1(){ note_ctor("S856C1", this);} // tgen

static void Test_S856C1()
{
  extern Class_Descriptor cd_S856C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,36)];
    init_test(&cd_S856C1, buf);
    S856C1 *dp, &lv = *(dp=new (buf) S856C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,140), "sizeof(S856C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S856C1)");
    check_base_class_offset(lv, (S856C5*)(S856C4*)(S856C3*)(S856C2*), 0, "S856C1");
    check_base_class_offset(lv, (S856C6*)(S856C4*)(S856C3*)(S856C2*), ABISELECT(8,4), "S856C1");
    check_base_class_offset(lv, (S856C4*)(S856C3*)(S856C2*), 0, "S856C1");
    check_base_class_offset(lv, (S856C3*)(S856C2*), 0, "S856C1");
    check_base_class_offset(lv, (S856C11*)(S856C2*), ABISELECT(80,44), "S856C1");
    check_base_class_offset(lv, (S856C2*), 0, "S856C1");
    test_class_info(&lv, &cd_S856C1);
    dp->~S856C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS856C1(Test_S856C1, "S856C1", ABISELECT(248,140));

#else // __cplusplus

extern void _ZN6S856C1C1Ev();
extern void _ZN6S856C1D1Ev();
Name_Map name_map_S856C1[] = {
  NSPAIR(_ZN6S856C1C1Ev),
  NSPAIR(_ZN6S856C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S856C5;
extern VTBL_ENTRY _ZTI6S856C5[];
extern  VTBL_ENTRY _ZTV6S856C5[];
extern Class_Descriptor cd_S856C6;
extern VTBL_ENTRY _ZTI6S856C6[];
extern  VTBL_ENTRY _ZTV6S856C6[];
extern Class_Descriptor cd_S856C4;
extern VTBL_ENTRY _ZTI6S856C4[];
extern  VTBL_ENTRY _ZTV6S856C4[];
extern Class_Descriptor cd_S856C3;
extern VTBL_ENTRY _ZTI6S856C3[];
extern  VTBL_ENTRY _ZTV6S856C3[];
extern Class_Descriptor cd_S856C11;
extern VTBL_ENTRY _ZTI7S856C11[];
extern  VTBL_ENTRY _ZTV7S856C11[];
extern Class_Descriptor cd_S856C2;
extern VTBL_ENTRY _ZTI6S856C2[];
extern  VTBL_ENTRY _ZTV6S856C2[];
static Base_Class bases_S856C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S856C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S856C6,    ABISELECT(8,4), //bcp->offset
    85, //bcp->virtual_function_table_offset
    2, //num_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_S856C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S856C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S856C11,    ABISELECT(80,44), //bcp->offset
    90, //bcp->virtual_function_table_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_S856C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S856C1[];
extern void _ZN6S856C1D1Ev();
extern void _ZN6S856C1D0Ev();
extern void _ZN6S856C53v13Ev();
extern void _ZN6S856C53v14Ev();
extern void _ZN6S856C53v15Ev();
extern void _ZN6S856C43v17Ev();
extern void _ZN6S856C43v18Ev();
extern void _ZN6S856C43v19Ev();
extern void _ZN6S856C43v20Ev();
extern void _ZN6S856C43v21Ev();
extern void _ZN6S856C43v22Ev();
extern void _ZN6S856C43v23Ev();
extern void _ZN6S856C43v24Ev();
extern void _ZN6S856C43v25Ev();
extern void _ZN6S856C43v26Ev();
extern void _ZN6S856C43v27Ev();
extern void _ZN6S856C43v28Ev();
extern void _ZN6S856C43v29Ev();
extern void _ZN6S856C43v30Ev();
extern void _ZN6S856C43v31Ev();
extern void _ZN6S856C43v32Ev();
extern void _ZN6S856C43v33Ev();
extern void _ZN6S856C43v34Ev();
extern void _ZN6S856C43v35Ev();
extern void _ZN6S856C43v36Ev();
extern void _ZN6S856C43v37Ev();
extern void _ZN6S856C43v38Ev();
extern void _ZN6S856C33v39Ev();
extern void _ZN6S856C33v40Ev();
extern void _ZN6S856C33v41Ev();
extern void _ZN6S856C23v43Ev();
extern void _ZN6S856C23v44Ev();
extern void _ZN6S856C23v45Ev();
extern void _ZN6S856C23v46Ev();
extern void _ZN6S856C23v47Ev();
extern void _ZN6S856C23v48Ev();
extern void _ZN6S856C23v49Ev();
extern void _ZN6S856C23v50Ev();
extern void _ZN6S856C23v51Ev();
extern void _ZN6S856C23v52Ev();
extern void _ZN6S856C23v53Ev();
extern void _ZN6S856C23v54Ev();
extern void _ZN6S856C23v55Ev();
extern void _ZN6S856C23v56Ev();
extern void _ZN6S856C23v57Ev();
extern void _ZN6S856C23v58Ev();
extern void _ZN6S856C23v59Ev();
extern void _ZN6S856C23v60Ev();
extern void _ZN6S856C23v61Ev();
extern void _ZN6S856C23v62Ev();
extern void _ZN6S856C23v63Ev();
extern void _ZN6S856C23v64Ev();
extern void _ZN6S856C23v65Ev();
extern void _ZN6S856C23v66Ev();
extern void _ZN6S856C23v67Ev();
extern void _ZN6S856C23v68Ev();
extern void _ZN6S856C23v69Ev();
extern void _ZN6S856C23v70Ev();
extern void _ZN6S856C23v71Ev();
extern void _ZN6S856C23v72Ev();
extern void _ZN6S856C23v73Ev();
extern void _ZN6S856C23v74Ev();
extern void _ZN6S856C23v75Ev();
extern void _ZN6S856C23v76Ev();
extern void _ZN6S856C23v77Ev();
extern void _ZN6S856C23v78Ev();
extern void _ZN6S856C23v79Ev();
extern void _ZN6S856C23v80Ev();
extern void _ZN6S856C23v81Ev();
extern void _ZN6S856C23v82Ev();
extern void _ZN6S856C23v83Ev();
extern void _ZN6S856C12v1Ev();
extern void _ZN6S856C12v2Ev();
extern void _ZN6S856C12v3Ev();
extern void _ZN6S856C12v4Ev();
extern void _ZN6S856C12v5Ev();
extern void _ZN6S856C12v6Ev();
extern void _ZN6S856C12v7Ev();
extern void _ZN6S856C12v8Ev();
extern void _ZN6S856C12v9Ev();
extern void _ZN6S856C13v10Ev();
extern void _ZN6S856C13v11Ev();
extern void _ZN6S856C13v12Ev();
extern void ABISELECT(_ZThn8_N6S856C1D1Ev,_ZThn4_N6S856C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S856C1D0Ev,_ZThn4_N6S856C1D0Ev)();
extern void _ZN6S856C63v16Ev();
extern void ABISELECT(_ZThn80_N6S856C1D1Ev,_ZThn44_N6S856C1D1Ev)();
extern void ABISELECT(_ZThn80_N6S856C1D0Ev,_ZThn44_N6S856C1D0Ev)();
extern void _ZN7S856C113v42Ev();
static  VTBL_ENTRY vtc_S856C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S856C1[0]),
  (VTBL_ENTRY)&_ZN6S856C1D1Ev,
  (VTBL_ENTRY)&_ZN6S856C1D0Ev,
  (VTBL_ENTRY)&_ZN6S856C53v13Ev,
  (VTBL_ENTRY)&_ZN6S856C53v14Ev,
  (VTBL_ENTRY)&_ZN6S856C53v15Ev,
  (VTBL_ENTRY)&_ZN6S856C43v17Ev,
  (VTBL_ENTRY)&_ZN6S856C43v18Ev,
  (VTBL_ENTRY)&_ZN6S856C43v19Ev,
  (VTBL_ENTRY)&_ZN6S856C43v20Ev,
  (VTBL_ENTRY)&_ZN6S856C43v21Ev,
  (VTBL_ENTRY)&_ZN6S856C43v22Ev,
  (VTBL_ENTRY)&_ZN6S856C43v23Ev,
  (VTBL_ENTRY)&_ZN6S856C43v24Ev,
  (VTBL_ENTRY)&_ZN6S856C43v25Ev,
  (VTBL_ENTRY)&_ZN6S856C43v26Ev,
  (VTBL_ENTRY)&_ZN6S856C43v27Ev,
  (VTBL_ENTRY)&_ZN6S856C43v28Ev,
  (VTBL_ENTRY)&_ZN6S856C43v29Ev,
  (VTBL_ENTRY)&_ZN6S856C43v30Ev,
  (VTBL_ENTRY)&_ZN6S856C43v31Ev,
  (VTBL_ENTRY)&_ZN6S856C43v32Ev,
  (VTBL_ENTRY)&_ZN6S856C43v33Ev,
  (VTBL_ENTRY)&_ZN6S856C43v34Ev,
  (VTBL_ENTRY)&_ZN6S856C43v35Ev,
  (VTBL_ENTRY)&_ZN6S856C43v36Ev,
  (VTBL_ENTRY)&_ZN6S856C43v37Ev,
  (VTBL_ENTRY)&_ZN6S856C43v38Ev,
  (VTBL_ENTRY)&_ZN6S856C33v39Ev,
  (VTBL_ENTRY)&_ZN6S856C33v40Ev,
  (VTBL_ENTRY)&_ZN6S856C33v41Ev,
  (VTBL_ENTRY)&_ZN6S856C23v43Ev,
  (VTBL_ENTRY)&_ZN6S856C23v44Ev,
  (VTBL_ENTRY)&_ZN6S856C23v45Ev,
  (VTBL_ENTRY)&_ZN6S856C23v46Ev,
  (VTBL_ENTRY)&_ZN6S856C23v47Ev,
  (VTBL_ENTRY)&_ZN6S856C23v48Ev,
  (VTBL_ENTRY)&_ZN6S856C23v49Ev,
  (VTBL_ENTRY)&_ZN6S856C23v50Ev,
  (VTBL_ENTRY)&_ZN6S856C23v51Ev,
  (VTBL_ENTRY)&_ZN6S856C23v52Ev,
  (VTBL_ENTRY)&_ZN6S856C23v53Ev,
  (VTBL_ENTRY)&_ZN6S856C23v54Ev,
  (VTBL_ENTRY)&_ZN6S856C23v55Ev,
  (VTBL_ENTRY)&_ZN6S856C23v56Ev,
  (VTBL_ENTRY)&_ZN6S856C23v57Ev,
  (VTBL_ENTRY)&_ZN6S856C23v58Ev,
  (VTBL_ENTRY)&_ZN6S856C23v59Ev,
  (VTBL_ENTRY)&_ZN6S856C23v60Ev,
  (VTBL_ENTRY)&_ZN6S856C23v61Ev,
  (VTBL_ENTRY)&_ZN6S856C23v62Ev,
  (VTBL_ENTRY)&_ZN6S856C23v63Ev,
  (VTBL_ENTRY)&_ZN6S856C23v64Ev,
  (VTBL_ENTRY)&_ZN6S856C23v65Ev,
  (VTBL_ENTRY)&_ZN6S856C23v66Ev,
  (VTBL_ENTRY)&_ZN6S856C23v67Ev,
  (VTBL_ENTRY)&_ZN6S856C23v68Ev,
  (VTBL_ENTRY)&_ZN6S856C23v69Ev,
  (VTBL_ENTRY)&_ZN6S856C23v70Ev,
  (VTBL_ENTRY)&_ZN6S856C23v71Ev,
  (VTBL_ENTRY)&_ZN6S856C23v72Ev,
  (VTBL_ENTRY)&_ZN6S856C23v73Ev,
  (VTBL_ENTRY)&_ZN6S856C23v74Ev,
  (VTBL_ENTRY)&_ZN6S856C23v75Ev,
  (VTBL_ENTRY)&_ZN6S856C23v76Ev,
  (VTBL_ENTRY)&_ZN6S856C23v77Ev,
  (VTBL_ENTRY)&_ZN6S856C23v78Ev,
  (VTBL_ENTRY)&_ZN6S856C23v79Ev,
  (VTBL_ENTRY)&_ZN6S856C23v80Ev,
  (VTBL_ENTRY)&_ZN6S856C23v81Ev,
  (VTBL_ENTRY)&_ZN6S856C23v82Ev,
  (VTBL_ENTRY)&_ZN6S856C23v83Ev,
  (VTBL_ENTRY)&_ZN6S856C12v1Ev,
  (VTBL_ENTRY)&_ZN6S856C12v2Ev,
  (VTBL_ENTRY)&_ZN6S856C12v3Ev,
  (VTBL_ENTRY)&_ZN6S856C12v4Ev,
  (VTBL_ENTRY)&_ZN6S856C12v5Ev,
  (VTBL_ENTRY)&_ZN6S856C12v6Ev,
  (VTBL_ENTRY)&_ZN6S856C12v7Ev,
  (VTBL_ENTRY)&_ZN6S856C12v8Ev,
  (VTBL_ENTRY)&_ZN6S856C12v9Ev,
  (VTBL_ENTRY)&_ZN6S856C13v10Ev,
  (VTBL_ENTRY)&_ZN6S856C13v11Ev,
  (VTBL_ENTRY)&_ZN6S856C13v12Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S856C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S856C1D1Ev,_ZThn4_N6S856C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S856C1D0Ev,_ZThn4_N6S856C1D0Ev),
  (VTBL_ENTRY)&_ZN6S856C63v16Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI6S856C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S856C1D1Ev,_ZThn44_N6S856C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S856C1D0Ev,_ZThn44_N6S856C1D0Ev),
  (VTBL_ENTRY)&_ZN7S856C113v42Ev,
};
extern VTBL_ENTRY _ZTI6S856C1[];
extern  VTBL_ENTRY _ZTV6S856C1[];
Class_Descriptor cd_S856C1 = {  "S856C1", // class name
  bases_S856C1, 6,
  &(vtc_S856C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,140), // object size
  NSPAIRA(_ZTI6S856C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S856C1),95, //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  S853C5  {
  virtual  ~S853C5(); // _ZN6S853C5D1Ev
  virtual void  v12(); // _ZN6S853C53v12Ev
  virtual void  v13(); // _ZN6S853C53v13Ev
  virtual void  v14(); // _ZN6S853C53v14Ev
  S853C5(); // tgen
};
//SIG(-1 S853C5) C1{ vd v1 v2 v3}


 S853C5 ::~S853C5(){ note_dtor("S853C5", this);}
void  S853C5 ::v12(){vfunc_called(this, "_ZN6S853C53v12Ev");}
void  S853C5 ::v13(){vfunc_called(this, "_ZN6S853C53v13Ev");}
void  S853C5 ::v14(){vfunc_called(this, "_ZN6S853C53v14Ev");}
S853C5 ::S853C5(){ note_ctor("S853C5", this);} // tgen

static void Test_S853C5()
{
  extern Class_Descriptor cd_S853C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S853C5, buf);
    S853C5 *dp, &lv = *(dp=new (buf) S853C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S853C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S853C5)");
    test_class_info(&lv, &cd_S853C5);
    dp->~S853C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS853C5(Test_S853C5, "S853C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S853C5C1Ev();
extern void _ZN6S853C5D1Ev();
Name_Map name_map_S853C5[] = {
  NSPAIR(_ZN6S853C5C1Ev),
  NSPAIR(_ZN6S853C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S853C5[];
extern void _ZN6S853C5D1Ev();
extern void _ZN6S853C5D0Ev();
extern void _ZN6S853C53v12Ev();
extern void _ZN6S853C53v13Ev();
extern void _ZN6S853C53v14Ev();
static  VTBL_ENTRY vtc_S853C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S853C5[0]),
  (VTBL_ENTRY)&_ZN6S853C5D1Ev,
  (VTBL_ENTRY)&_ZN6S853C5D0Ev,
  (VTBL_ENTRY)&_ZN6S853C53v12Ev,
  (VTBL_ENTRY)&_ZN6S853C53v13Ev,
  (VTBL_ENTRY)&_ZN6S853C53v14Ev,
};
extern VTBL_ENTRY _ZTI6S853C5[];
extern  VTBL_ENTRY _ZTV6S853C5[];
Class_Descriptor cd_S853C5 = {  "S853C5", // class name
  0,0,//no base classes
  &(vtc_S853C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S853C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S853C5),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  S853C6  {
  virtual  ~S853C6(); // _ZN6S853C6D1Ev
  virtual void  v15(); // _ZN6S853C63v15Ev
  S853C6(); // tgen
};
//SIG(-1 S853C6) C1{ vd v1}


 S853C6 ::~S853C6(){ note_dtor("S853C6", this);}
void  S853C6 ::v15(){vfunc_called(this, "_ZN6S853C63v15Ev");}
S853C6 ::S853C6(){ note_ctor("S853C6", this);} // tgen

static void Test_S853C6()
{
  extern Class_Descriptor cd_S853C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S853C6, buf);
    S853C6 *dp, &lv = *(dp=new (buf) S853C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S853C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S853C6)");
    test_class_info(&lv, &cd_S853C6);
    dp->~S853C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS853C6(Test_S853C6, "S853C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S853C6C1Ev();
extern void _ZN6S853C6D1Ev();
Name_Map name_map_S853C6[] = {
  NSPAIR(_ZN6S853C6C1Ev),
  NSPAIR(_ZN6S853C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S853C6[];
extern void _ZN6S853C6D1Ev();
extern void _ZN6S853C6D0Ev();
extern void _ZN6S853C63v15Ev();
static  VTBL_ENTRY vtc_S853C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S853C6[0]),
  (VTBL_ENTRY)&_ZN6S853C6D1Ev,
  (VTBL_ENTRY)&_ZN6S853C6D0Ev,
  (VTBL_ENTRY)&_ZN6S853C63v15Ev,
};
extern VTBL_ENTRY _ZTI6S853C6[];
extern  VTBL_ENTRY _ZTV6S853C6[];
Class_Descriptor cd_S853C6 = {  "S853C6", // class name
  0,0,//no base classes
  &(vtc_S853C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S853C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S853C6),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  S853C4  : S853C5 , S853C6 {
  virtual  ~S853C4(); // _ZN6S853C4D1Ev
  virtual void  v16(); // _ZN6S853C43v16Ev
  virtual void  v17(); // _ZN6S853C43v17Ev
  virtual void  v18(); // _ZN6S853C43v18Ev
  virtual void  v19(); // _ZN6S853C43v19Ev
  virtual void  v20(); // _ZN6S853C43v20Ev
  virtual void  v21(); // _ZN6S853C43v21Ev
  virtual void  v22(); // _ZN6S853C43v22Ev
  virtual void  v23(); // _ZN6S853C43v23Ev
  virtual void  v24(); // _ZN6S853C43v24Ev
  virtual void  v25(); // _ZN6S853C43v25Ev
  virtual void  v26(); // _ZN6S853C43v26Ev
  virtual void  v27(); // _ZN6S853C43v27Ev
  virtual void  v28(); // _ZN6S853C43v28Ev
  virtual void  v29(); // _ZN6S853C43v29Ev
  virtual void  v30(); // _ZN6S853C43v30Ev
  virtual void  v31(); // _ZN6S853C43v31Ev
  virtual void  v32(); // _ZN6S853C43v32Ev
  virtual void  v33(); // _ZN6S853C43v33Ev
  virtual void  v34(); // _ZN6S853C43v34Ev
  virtual void  v35(); // _ZN6S853C43v35Ev
  virtual void  v36(); // _ZN6S853C43v36Ev
  virtual void  v37(); // _ZN6S853C43v37Ev
  S853C4(); // tgen
};
//SIG(-1 S853C4) C1{ BC2{ vd v23 v24 v25} BC3{ vd v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S853C4 ::~S853C4(){ note_dtor("S853C4", this);}
void  S853C4 ::v16(){vfunc_called(this, "_ZN6S853C43v16Ev");}
void  S853C4 ::v17(){vfunc_called(this, "_ZN6S853C43v17Ev");}
void  S853C4 ::v18(){vfunc_called(this, "_ZN6S853C43v18Ev");}
void  S853C4 ::v19(){vfunc_called(this, "_ZN6S853C43v19Ev");}
void  S853C4 ::v20(){vfunc_called(this, "_ZN6S853C43v20Ev");}
void  S853C4 ::v21(){vfunc_called(this, "_ZN6S853C43v21Ev");}
void  S853C4 ::v22(){vfunc_called(this, "_ZN6S853C43v22Ev");}
void  S853C4 ::v23(){vfunc_called(this, "_ZN6S853C43v23Ev");}
void  S853C4 ::v24(){vfunc_called(this, "_ZN6S853C43v24Ev");}
void  S853C4 ::v25(){vfunc_called(this, "_ZN6S853C43v25Ev");}
void  S853C4 ::v26(){vfunc_called(this, "_ZN6S853C43v26Ev");}
void  S853C4 ::v27(){vfunc_called(this, "_ZN6S853C43v27Ev");}
void  S853C4 ::v28(){vfunc_called(this, "_ZN6S853C43v28Ev");}
void  S853C4 ::v29(){vfunc_called(this, "_ZN6S853C43v29Ev");}
void  S853C4 ::v30(){vfunc_called(this, "_ZN6S853C43v30Ev");}
void  S853C4 ::v31(){vfunc_called(this, "_ZN6S853C43v31Ev");}
void  S853C4 ::v32(){vfunc_called(this, "_ZN6S853C43v32Ev");}
void  S853C4 ::v33(){vfunc_called(this, "_ZN6S853C43v33Ev");}
void  S853C4 ::v34(){vfunc_called(this, "_ZN6S853C43v34Ev");}
void  S853C4 ::v35(){vfunc_called(this, "_ZN6S853C43v35Ev");}
void  S853C4 ::v36(){vfunc_called(this, "_ZN6S853C43v36Ev");}
void  S853C4 ::v37(){vfunc_called(this, "_ZN6S853C43v37Ev");}
S853C4 ::S853C4(){ note_ctor("S853C4", this);} // tgen

static void Test_S853C4()
{
  extern Class_Descriptor cd_S853C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S853C4, buf);
    S853C4 *dp, &lv = *(dp=new (buf) S853C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S853C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S853C4)");
    check_base_class_offset(lv, (S853C5*), 0, "S853C4");
    check_base_class_offset(lv, (S853C6*), ABISELECT(8,4), "S853C4");
    test_class_info(&lv, &cd_S853C4);
    dp->~S853C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS853C4(Test_S853C4, "S853C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S853C4C1Ev();
extern void _ZN6S853C4D1Ev();
Name_Map name_map_S853C4[] = {
  NSPAIR(_ZN6S853C4C1Ev),
  NSPAIR(_ZN6S853C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S853C5;
extern VTBL_ENTRY _ZTI6S853C5[];
extern  VTBL_ENTRY _ZTV6S853C5[];
extern Class_Descriptor cd_S853C6;
extern VTBL_ENTRY _ZTI6S853C6[];
extern  VTBL_ENTRY _ZTV6S853C6[];
static Base_Class bases_S853C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S853C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S853C6,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S853C4[];
extern void _ZN6S853C4D1Ev();
extern void _ZN6S853C4D0Ev();
extern void _ZN6S853C53v12Ev();
extern void _ZN6S853C53v13Ev();
extern void _ZN6S853C53v14Ev();
extern void _ZN6S853C43v16Ev();
extern void _ZN6S853C43v17Ev();
extern void _ZN6S853C43v18Ev();
extern void _ZN6S853C43v19Ev();
extern void _ZN6S853C43v20Ev();
extern void _ZN6S853C43v21Ev();
extern void _ZN6S853C43v22Ev();
extern void _ZN6S853C43v23Ev();
extern void _ZN6S853C43v24Ev();
extern void _ZN6S853C43v25Ev();
extern void _ZN6S853C43v26Ev();
extern void _ZN6S853C43v27Ev();
extern void _ZN6S853C43v28Ev();
extern void _ZN6S853C43v29Ev();
extern void _ZN6S853C43v30Ev();
extern void _ZN6S853C43v31Ev();
extern void _ZN6S853C43v32Ev();
extern void _ZN6S853C43v33Ev();
extern void _ZN6S853C43v34Ev();
extern void _ZN6S853C43v35Ev();
extern void _ZN6S853C43v36Ev();
extern void _ZN6S853C43v37Ev();
extern void ABISELECT(_ZThn8_N6S853C4D1Ev,_ZThn4_N6S853C4D1Ev)();
extern void ABISELECT(_ZThn8_N6S853C4D0Ev,_ZThn4_N6S853C4D0Ev)();
extern void _ZN6S853C63v15Ev();
static  VTBL_ENTRY vtc_S853C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S853C4[0]),
  (VTBL_ENTRY)&_ZN6S853C4D1Ev,
  (VTBL_ENTRY)&_ZN6S853C4D0Ev,
  (VTBL_ENTRY)&_ZN6S853C53v12Ev,
  (VTBL_ENTRY)&_ZN6S853C53v13Ev,
  (VTBL_ENTRY)&_ZN6S853C53v14Ev,
  (VTBL_ENTRY)&_ZN6S853C43v16Ev,
  (VTBL_ENTRY)&_ZN6S853C43v17Ev,
  (VTBL_ENTRY)&_ZN6S853C43v18Ev,
  (VTBL_ENTRY)&_ZN6S853C43v19Ev,
  (VTBL_ENTRY)&_ZN6S853C43v20Ev,
  (VTBL_ENTRY)&_ZN6S853C43v21Ev,
  (VTBL_ENTRY)&_ZN6S853C43v22Ev,
  (VTBL_ENTRY)&_ZN6S853C43v23Ev,
  (VTBL_ENTRY)&_ZN6S853C43v24Ev,
  (VTBL_ENTRY)&_ZN6S853C43v25Ev,
  (VTBL_ENTRY)&_ZN6S853C43v26Ev,
  (VTBL_ENTRY)&_ZN6S853C43v27Ev,
  (VTBL_ENTRY)&_ZN6S853C43v28Ev,
  (VTBL_ENTRY)&_ZN6S853C43v29Ev,
  (VTBL_ENTRY)&_ZN6S853C43v30Ev,
  (VTBL_ENTRY)&_ZN6S853C43v31Ev,
  (VTBL_ENTRY)&_ZN6S853C43v32Ev,
  (VTBL_ENTRY)&_ZN6S853C43v33Ev,
  (VTBL_ENTRY)&_ZN6S853C43v34Ev,
  (VTBL_ENTRY)&_ZN6S853C43v35Ev,
  (VTBL_ENTRY)&_ZN6S853C43v36Ev,
  (VTBL_ENTRY)&_ZN6S853C43v37Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S853C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S853C4D1Ev,_ZThn4_N6S853C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S853C4D0Ev,_ZThn4_N6S853C4D0Ev),
  (VTBL_ENTRY)&_ZN6S853C63v15Ev,
};
extern VTBL_ENTRY _ZTI6S853C4[];
extern  VTBL_ENTRY _ZTV6S853C4[];
Class_Descriptor cd_S853C4 = {  "S853C4", // class name
  bases_S853C4, 2,
  &(vtc_S853C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S853C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S853C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S853C3  : S853C4 {
  ::S857C7_nt s853c3f0;
  ::S857C9_nt s853c3f1;
  char s853c3f2;
  virtual  ~S853C3(); // _ZN6S853C3D1Ev
  virtual void  v38(); // _ZN6S853C33v38Ev
  virtual void  v39(); // _ZN6S853C33v39Ev
  virtual void  v40(); // _ZN6S853C33v40Ev
  S853C3(); // tgen
};
//SIG(-1 S853C3) C1{ BC2{ BC3{ vd v4 v5 v6} BC4{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ FL[4]}} Fc}


 S853C3 ::~S853C3(){ note_dtor("S853C3", this);}
void  S853C3 ::v38(){vfunc_called(this, "_ZN6S853C33v38Ev");}
void  S853C3 ::v39(){vfunc_called(this, "_ZN6S853C33v39Ev");}
void  S853C3 ::v40(){vfunc_called(this, "_ZN6S853C33v40Ev");}
S853C3 ::S853C3(){ note_ctor("S853C3", this);} // tgen

static void Test_S853C3()
{
  extern Class_Descriptor cd_S853C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S853C3, buf);
    S853C3 *dp, &lv = *(dp=new (buf) S853C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S853C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S853C3)");
    check_base_class_offset(lv, (S853C5*)(S853C4*), 0, "S853C3");
    check_base_class_offset(lv, (S853C6*)(S853C4*), ABISELECT(8,4), "S853C3");
    check_base_class_offset(lv, (S853C4*), 0, "S853C3");
    check_field_offset(lv, s853c3f0, ABISELECT(16,8), "S853C3.s853c3f0");
    check_field_offset(lv, s853c3f1, ABISELECT(40,24), "S853C3.s853c3f1");
    check_field_offset(lv, s853c3f2, ABISELECT(72,56), "S853C3.s853c3f2");
    test_class_info(&lv, &cd_S853C3);
    dp->~S853C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS853C3(Test_S853C3, "S853C3", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN6S853C3C1Ev();
extern void _ZN6S853C3D1Ev();
Name_Map name_map_S853C3[] = {
  NSPAIR(_ZN6S853C3C1Ev),
  NSPAIR(_ZN6S853C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S853C5;
extern VTBL_ENTRY _ZTI6S853C5[];
extern  VTBL_ENTRY _ZTV6S853C5[];
extern Class_Descriptor cd_S853C6;
extern VTBL_ENTRY _ZTI6S853C6[];
extern  VTBL_ENTRY _ZTV6S853C6[];
extern Class_Descriptor cd_S853C4;
extern VTBL_ENTRY _ZTI6S853C4[];
extern  VTBL_ENTRY _ZTV6S853C4[];
static Base_Class bases_S853C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S853C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S853C6,    ABISELECT(8,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S853C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S853C3[];
extern void _ZN6S853C3D1Ev();
extern void _ZN6S853C3D0Ev();
extern void _ZN6S853C53v12Ev();
extern void _ZN6S853C53v13Ev();
extern void _ZN6S853C53v14Ev();
extern void _ZN6S853C43v16Ev();
extern void _ZN6S853C43v17Ev();
extern void _ZN6S853C43v18Ev();
extern void _ZN6S853C43v19Ev();
extern void _ZN6S853C43v20Ev();
extern void _ZN6S853C43v21Ev();
extern void _ZN6S853C43v22Ev();
extern void _ZN6S853C43v23Ev();
extern void _ZN6S853C43v24Ev();
extern void _ZN6S853C43v25Ev();
extern void _ZN6S853C43v26Ev();
extern void _ZN6S853C43v27Ev();
extern void _ZN6S853C43v28Ev();
extern void _ZN6S853C43v29Ev();
extern void _ZN6S853C43v30Ev();
extern void _ZN6S853C43v31Ev();
extern void _ZN6S853C43v32Ev();
extern void _ZN6S853C43v33Ev();
extern void _ZN6S853C43v34Ev();
extern void _ZN6S853C43v35Ev();
extern void _ZN6S853C43v36Ev();
extern void _ZN6S853C43v37Ev();
extern void _ZN6S853C33v38Ev();
extern void _ZN6S853C33v39Ev();
extern void _ZN6S853C33v40Ev();
extern void ABISELECT(_ZThn8_N6S853C3D1Ev,_ZThn4_N6S853C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S853C3D0Ev,_ZThn4_N6S853C3D0Ev)();
extern void _ZN6S853C63v15Ev();
static  VTBL_ENTRY vtc_S853C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S853C3[0]),
  (VTBL_ENTRY)&_ZN6S853C3D1Ev,
  (VTBL_ENTRY)&_ZN6S853C3D0Ev,
  (VTBL_ENTRY)&_ZN6S853C53v12Ev,
  (VTBL_ENTRY)&_ZN6S853C53v13Ev,
  (VTBL_ENTRY)&_ZN6S853C53v14Ev,
  (VTBL_ENTRY)&_ZN6S853C43v16Ev,
  (VTBL_ENTRY)&_ZN6S853C43v17Ev,
  (VTBL_ENTRY)&_ZN6S853C43v18Ev,
  (VTBL_ENTRY)&_ZN6S853C43v19Ev,
  (VTBL_ENTRY)&_ZN6S853C43v20Ev,
  (VTBL_ENTRY)&_ZN6S853C43v21Ev,
  (VTBL_ENTRY)&_ZN6S853C43v22Ev,
  (VTBL_ENTRY)&_ZN6S853C43v23Ev,
  (VTBL_ENTRY)&_ZN6S853C43v24Ev,
  (VTBL_ENTRY)&_ZN6S853C43v25Ev,
  (VTBL_ENTRY)&_ZN6S853C43v26Ev,
  (VTBL_ENTRY)&_ZN6S853C43v27Ev,
  (VTBL_ENTRY)&_ZN6S853C43v28Ev,
  (VTBL_ENTRY)&_ZN6S853C43v29Ev,
  (VTBL_ENTRY)&_ZN6S853C43v30Ev,
  (VTBL_ENTRY)&_ZN6S853C43v31Ev,
  (VTBL_ENTRY)&_ZN6S853C43v32Ev,
  (VTBL_ENTRY)&_ZN6S853C43v33Ev,
  (VTBL_ENTRY)&_ZN6S853C43v34Ev,
  (VTBL_ENTRY)&_ZN6S853C43v35Ev,
  (VTBL_ENTRY)&_ZN6S853C43v36Ev,
  (VTBL_ENTRY)&_ZN6S853C43v37Ev,
  (VTBL_ENTRY)&_ZN6S853C33v38Ev,
  (VTBL_ENTRY)&_ZN6S853C33v39Ev,
  (VTBL_ENTRY)&_ZN6S853C33v40Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S853C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S853C3D1Ev,_ZThn4_N6S853C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S853C3D0Ev,_ZThn4_N6S853C3D0Ev),
  (VTBL_ENTRY)&_ZN6S853C63v15Ev,
};
extern VTBL_ENTRY _ZTI6S853C3[];
extern  VTBL_ENTRY _ZTV6S853C3[];
Class_Descriptor cd_S853C3 = {  "S853C3", // class name
  bases_S853C3, 3,
  &(vtc_S853C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI6S853C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S853C3),37, //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  S853C11  {
  virtual  ~S853C11(); // _ZN7S853C11D1Ev
  virtual void  v41(); // _ZN7S853C113v41Ev
  S853C11(); // tgen
};
//SIG(-1 S853C11) C1{ vd v1}


 S853C11 ::~S853C11(){ note_dtor("S853C11", this);}
void  S853C11 ::v41(){vfunc_called(this, "_ZN7S853C113v41Ev");}
S853C11 ::S853C11(){ note_ctor("S853C11", this);} // tgen

static void Test_S853C11()
{
  extern Class_Descriptor cd_S853C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S853C11, buf);
    S853C11 *dp, &lv = *(dp=new (buf) S853C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S853C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S853C11)");
    test_class_info(&lv, &cd_S853C11);
    dp->~S853C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS853C11(Test_S853C11, "S853C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S853C11C1Ev();
extern void _ZN7S853C11D1Ev();
Name_Map name_map_S853C11[] = {
  NSPAIR(_ZN7S853C11C1Ev),
  NSPAIR(_ZN7S853C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S853C11[];
extern void _ZN7S853C11D1Ev();
extern void _ZN7S853C11D0Ev();
extern void _ZN7S853C113v41Ev();
static  VTBL_ENTRY vtc_S853C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S853C11[0]),
  (VTBL_ENTRY)&_ZN7S853C11D1Ev,
  (VTBL_ENTRY)&_ZN7S853C11D0Ev,
  (VTBL_ENTRY)&_ZN7S853C113v41Ev,
};
extern VTBL_ENTRY _ZTI7S853C11[];
extern  VTBL_ENTRY _ZTV7S853C11[];
Class_Descriptor cd_S853C11 = {  "S853C11", // class name
  0,0,//no base classes
  &(vtc_S853C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S853C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S853C11),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  S853C12  {
  ::S857C10_nt s853c12f0;
  void  mf853c12(); // _ZN7S853C128mf853c12Ev
};
//SIG(-1 S853C12) C1{ m FC2{ FL[4]}}


void  S853C12 ::mf853c12(){}

static void Test_S853C12()
{
  {
    init_simple_test("S853C12");
    S853C12 lv;
    check2(sizeof(lv), 32, "sizeof(S853C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S853C12)");
    check_field_offset(lv, s853c12f0, 0, "S853C12.s853c12f0");
  }
}
static Arrange_To_Call_Me vS853C12(Test_S853C12, "S853C12", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S853C2  : S853C3 , S853C11 {
  ::S853C12 s853c2f0;
  ::S857C13_nt s853c2f1;
  char s853c2f2[3];
  void *s853c2f3;
  ::S857C16 s853c2f4;
  void *s853c2f5;
  virtual  ~S853C2(); // _ZN6S853C2D1Ev
  virtual void  v42(); // _ZN6S853C23v42Ev
  virtual void  v43(); // _ZN6S853C23v43Ev
  virtual void  v44(); // _ZN6S853C23v44Ev
  virtual void  v45(); // _ZN6S853C23v45Ev
  virtual void  v46(); // _ZN6S853C23v46Ev
  virtual void  v47(); // _ZN6S853C23v47Ev
  virtual void  v48(); // _ZN6S853C23v48Ev
  virtual void  v49(); // _ZN6S853C23v49Ev
  virtual void  v50(); // _ZN6S853C23v50Ev
  virtual void  v51(); // _ZN6S853C23v51Ev
  virtual void  v52(); // _ZN6S853C23v52Ev
  virtual void  v53(); // _ZN6S853C23v53Ev
  virtual void  v54(); // _ZN6S853C23v54Ev
  virtual void  v55(); // _ZN6S853C23v55Ev
  virtual void  v56(); // _ZN6S853C23v56Ev
  virtual void  v57(); // _ZN6S853C23v57Ev
  virtual void  v58(); // _ZN6S853C23v58Ev
  virtual void  v59(); // _ZN6S853C23v59Ev
  virtual void  v60(); // _ZN6S853C23v60Ev
  virtual void  v61(); // _ZN6S853C23v61Ev
  virtual void  v62(); // _ZN6S853C23v62Ev
  virtual void  v63(); // _ZN6S853C23v63Ev
  virtual void  v64(); // _ZN6S853C23v64Ev
  virtual void  v65(); // _ZN6S853C23v65Ev
  virtual void  v66(); // _ZN6S853C23v66Ev
  virtual void  v67(); // _ZN6S853C23v67Ev
  virtual void  v68(); // _ZN6S853C23v68Ev
  virtual void  v69(); // _ZN6S853C23v69Ev
  virtual void  v70(); // _ZN6S853C23v70Ev
  virtual void  v71(); // _ZN6S853C23v71Ev
  virtual void  v72(); // _ZN6S853C23v72Ev
  virtual void  v73(); // _ZN6S853C23v73Ev
  virtual void  v74(); // _ZN6S853C23v74Ev
  virtual void  v75(); // _ZN6S853C23v75Ev
  virtual void  v76(); // _ZN6S853C23v76Ev
  virtual void  v77(); // _ZN6S853C23v77Ev
  virtual void  v78(); // _ZN6S853C23v78Ev
  virtual void  v79(); // _ZN6S853C23v79Ev
  virtual void  v80(); // _ZN6S853C23v80Ev
  virtual void  v81(); // _ZN6S853C23v81Ev
  virtual void  v82(); // _ZN6S853C23v82Ev
  S853C2(); // tgen
};
//SIG(-1 S853C2) C1{ BC2{ BC3{ BC4{ vd v42 v43 v44} BC5{ vd v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67} vd v68 v69 v70 FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ FL[4]}} Fc} BC10{ vd v71} 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 FC11{ m FC9} FC12{ m Fp FC8 FC13{ m Fp FC14{ Fi[4]}} Fi Fc} Fc[3] Fp FC15{ BC16{ vd v74} BC17{ vd v75} vd v72 v73 Fp[2]} Fp}


 S853C2 ::~S853C2(){ note_dtor("S853C2", this);}
void  S853C2 ::v42(){vfunc_called(this, "_ZN6S853C23v42Ev");}
void  S853C2 ::v43(){vfunc_called(this, "_ZN6S853C23v43Ev");}
void  S853C2 ::v44(){vfunc_called(this, "_ZN6S853C23v44Ev");}
void  S853C2 ::v45(){vfunc_called(this, "_ZN6S853C23v45Ev");}
void  S853C2 ::v46(){vfunc_called(this, "_ZN6S853C23v46Ev");}
void  S853C2 ::v47(){vfunc_called(this, "_ZN6S853C23v47Ev");}
void  S853C2 ::v48(){vfunc_called(this, "_ZN6S853C23v48Ev");}
void  S853C2 ::v49(){vfunc_called(this, "_ZN6S853C23v49Ev");}
void  S853C2 ::v50(){vfunc_called(this, "_ZN6S853C23v50Ev");}
void  S853C2 ::v51(){vfunc_called(this, "_ZN6S853C23v51Ev");}
void  S853C2 ::v52(){vfunc_called(this, "_ZN6S853C23v52Ev");}
void  S853C2 ::v53(){vfunc_called(this, "_ZN6S853C23v53Ev");}
void  S853C2 ::v54(){vfunc_called(this, "_ZN6S853C23v54Ev");}
void  S853C2 ::v55(){vfunc_called(this, "_ZN6S853C23v55Ev");}
void  S853C2 ::v56(){vfunc_called(this, "_ZN6S853C23v56Ev");}
void  S853C2 ::v57(){vfunc_called(this, "_ZN6S853C23v57Ev");}
void  S853C2 ::v58(){vfunc_called(this, "_ZN6S853C23v58Ev");}
void  S853C2 ::v59(){vfunc_called(this, "_ZN6S853C23v59Ev");}
void  S853C2 ::v60(){vfunc_called(this, "_ZN6S853C23v60Ev");}
void  S853C2 ::v61(){vfunc_called(this, "_ZN6S853C23v61Ev");}
void  S853C2 ::v62(){vfunc_called(this, "_ZN6S853C23v62Ev");}
void  S853C2 ::v63(){vfunc_called(this, "_ZN6S853C23v63Ev");}
void  S853C2 ::v64(){vfunc_called(this, "_ZN6S853C23v64Ev");}
void  S853C2 ::v65(){vfunc_called(this, "_ZN6S853C23v65Ev");}
void  S853C2 ::v66(){vfunc_called(this, "_ZN6S853C23v66Ev");}
void  S853C2 ::v67(){vfunc_called(this, "_ZN6S853C23v67Ev");}
void  S853C2 ::v68(){vfunc_called(this, "_ZN6S853C23v68Ev");}
void  S853C2 ::v69(){vfunc_called(this, "_ZN6S853C23v69Ev");}
void  S853C2 ::v70(){vfunc_called(this, "_ZN6S853C23v70Ev");}
void  S853C2 ::v71(){vfunc_called(this, "_ZN6S853C23v71Ev");}
void  S853C2 ::v72(){vfunc_called(this, "_ZN6S853C23v72Ev");}
void  S853C2 ::v73(){vfunc_called(this, "_ZN6S853C23v73Ev");}
void  S853C2 ::v74(){vfunc_called(this, "_ZN6S853C23v74Ev");}
void  S853C2 ::v75(){vfunc_called(this, "_ZN6S853C23v75Ev");}
void  S853C2 ::v76(){vfunc_called(this, "_ZN6S853C23v76Ev");}
void  S853C2 ::v77(){vfunc_called(this, "_ZN6S853C23v77Ev");}
void  S853C2 ::v78(){vfunc_called(this, "_ZN6S853C23v78Ev");}
void  S853C2 ::v79(){vfunc_called(this, "_ZN6S853C23v79Ev");}
void  S853C2 ::v80(){vfunc_called(this, "_ZN6S853C23v80Ev");}
void  S853C2 ::v81(){vfunc_called(this, "_ZN6S853C23v81Ev");}
void  S853C2 ::v82(){vfunc_called(this, "_ZN6S853C23v82Ev");}
S853C2 ::S853C2(){ note_ctor("S853C2", this);} // tgen

static void Test_S853C2()
{
  extern Class_Descriptor cd_S853C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,48)];
    init_test(&cd_S853C2, buf);
    S853C2 *dp, &lv = *(dp=new (buf) S853C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,188), "sizeof(S853C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S853C2)");
    check_base_class_offset(lv, (S853C5*)(S853C4*)(S853C3*), 0, "S853C2");
    check_base_class_offset(lv, (S853C6*)(S853C4*)(S853C3*), ABISELECT(8,4), "S853C2");
    check_base_class_offset(lv, (S853C4*)(S853C3*), 0, "S853C2");
    check_base_class_offset(lv, (S853C3*), 0, "S853C2");
    check_base_class_offset(lv, (S853C11*), ABISELECT(80,60), "S853C2");
    check_field_offset(lv, s853c2f0, ABISELECT(88,64), "S853C2.s853c2f0");
    check_field_offset(lv, s853c2f1, ABISELECT(120,96), "S853C2.s853c2f1");
    check_field_offset(lv, s853c2f2, ABISELECT(192,160), "S853C2.s853c2f2");
    check_field_offset(lv, s853c2f3, ABISELECT(200,164), "S853C2.s853c2f3");
    check_field_offset(lv, s853c2f4, ABISELECT(208,168), "S853C2.s853c2f4");
    check_field_offset(lv, s853c2f5, ABISELECT(240,184), "S853C2.s853c2f5");
    test_class_info(&lv, &cd_S853C2);
    dp->~S853C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS853C2(Test_S853C2, "S853C2", ABISELECT(248,188));

#else // __cplusplus

extern void _ZN6S853C2C1Ev();
extern void _ZN6S853C2D1Ev();
Name_Map name_map_S853C2[] = {
  NSPAIR(_ZN6S853C2C1Ev),
  NSPAIR(_ZN6S853C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S853C5;
extern VTBL_ENTRY _ZTI6S853C5[];
extern  VTBL_ENTRY _ZTV6S853C5[];
extern Class_Descriptor cd_S853C6;
extern VTBL_ENTRY _ZTI6S853C6[];
extern  VTBL_ENTRY _ZTV6S853C6[];
extern Class_Descriptor cd_S853C4;
extern VTBL_ENTRY _ZTI6S853C4[];
extern  VTBL_ENTRY _ZTV6S853C4[];
extern Class_Descriptor cd_S853C3;
extern VTBL_ENTRY _ZTI6S853C3[];
extern  VTBL_ENTRY _ZTV6S853C3[];
extern Class_Descriptor cd_S853C11;
extern VTBL_ENTRY _ZTI7S853C11[];
extern  VTBL_ENTRY _ZTV7S853C11[];
static Base_Class bases_S853C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S853C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S853C6,    ABISELECT(8,4), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_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_S853C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S853C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S853C11,    ABISELECT(80,60), //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},
  {0}};
extern VTBL_ENTRY _ZTI6S853C2[];
extern void _ZN6S853C2D1Ev();
extern void _ZN6S853C2D0Ev();
extern void _ZN6S853C53v12Ev();
extern void _ZN6S853C53v13Ev();
extern void _ZN6S853C53v14Ev();
extern void _ZN6S853C43v16Ev();
extern void _ZN6S853C43v17Ev();
extern void _ZN6S853C43v18Ev();
extern void _ZN6S853C43v19Ev();
extern void _ZN6S853C43v20Ev();
extern void _ZN6S853C43v21Ev();
extern void _ZN6S853C43v22Ev();
extern void _ZN6S853C43v23Ev();
extern void _ZN6S853C43v24Ev();
extern void _ZN6S853C43v25Ev();
extern void _ZN6S853C43v26Ev();
extern void _ZN6S853C43v27Ev();
extern void _ZN6S853C43v28Ev();
extern void _ZN6S853C43v29Ev();
extern void _ZN6S853C43v30Ev();
extern void _ZN6S853C43v31Ev();
extern void _ZN6S853C43v32Ev();
extern void _ZN6S853C43v33Ev();
extern void _ZN6S853C43v34Ev();
extern void _ZN6S853C43v35Ev();
extern void _ZN6S853C43v36Ev();
extern void _ZN6S853C43v37Ev();
extern void _ZN6S853C33v38Ev();
extern void _ZN6S853C33v39Ev();
extern void _ZN6S853C33v40Ev();
extern void _ZN6S853C23v42Ev();
extern void _ZN6S853C23v43Ev();
extern void _ZN6S853C23v44Ev();
extern void _ZN6S853C23v45Ev();
extern void _ZN6S853C23v46Ev();
extern void _ZN6S853C23v47Ev();
extern void _ZN6S853C23v48Ev();
extern void _ZN6S853C23v49Ev();
extern void _ZN6S853C23v50Ev();
extern void _ZN6S853C23v51Ev();
extern void _ZN6S853C23v52Ev();
extern void _ZN6S853C23v53Ev();
extern void _ZN6S853C23v54Ev();
extern void _ZN6S853C23v55Ev();
extern void _ZN6S853C23v56Ev();
extern void _ZN6S853C23v57Ev();
extern void _ZN6S853C23v58Ev();
extern void _ZN6S853C23v59Ev();
extern void _ZN6S853C23v60Ev();
extern void _ZN6S853C23v61Ev();
extern void _ZN6S853C23v62Ev();
extern void _ZN6S853C23v63Ev();
extern void _ZN6S853C23v64Ev();
extern void _ZN6S853C23v65Ev();
extern void _ZN6S853C23v66Ev();
extern void _ZN6S853C23v67Ev();
extern void _ZN6S853C23v68Ev();
extern void _ZN6S853C23v69Ev();
extern void _ZN6S853C23v70Ev();
extern void _ZN6S853C23v71Ev();
extern void _ZN6S853C23v72Ev();
extern void _ZN6S853C23v73Ev();
extern void _ZN6S853C23v74Ev();
extern void _ZN6S853C23v75Ev();
extern void _ZN6S853C23v76Ev();
extern void _ZN6S853C23v77Ev();
extern void _ZN6S853C23v78Ev();
extern void _ZN6S853C23v79Ev();
extern void _ZN6S853C23v80Ev();
extern void _ZN6S853C23v81Ev();
extern void _ZN6S853C23v82Ev();
extern void ABISELECT(_ZThn8_N6S853C2D1Ev,_ZThn4_N6S853C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S853C2D0Ev,_ZThn4_N6S853C2D0Ev)();
extern void _ZN6S853C63v15Ev();
extern void ABISELECT(_ZThn80_N6S853C2D1Ev,_ZThn60_N6S853C2D1Ev)();
extern void ABISELECT(_ZThn80_N6S853C2D0Ev,_ZThn60_N6S853C2D0Ev)();
extern void _ZN7S853C113v41Ev();
static  VTBL_ENTRY vtc_S853C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S853C2[0]),
  (VTBL_ENTRY)&_ZN6S853C2D1Ev,
  (VTBL_ENTRY)&_ZN6S853C2D0Ev,
  (VTBL_ENTRY)&_ZN6S853C53v12Ev,
  (VTBL_ENTRY)&_ZN6S853C53v13Ev,
  (VTBL_ENTRY)&_ZN6S853C53v14Ev,
  (VTBL_ENTRY)&_ZN6S853C43v16Ev,
  (VTBL_ENTRY)&_ZN6S853C43v17Ev,
  (VTBL_ENTRY)&_ZN6S853C43v18Ev,
  (VTBL_ENTRY)&_ZN6S853C43v19Ev,
  (VTBL_ENTRY)&_ZN6S853C43v20Ev,
  (VTBL_ENTRY)&_ZN6S853C43v21Ev,
  (VTBL_ENTRY)&_ZN6S853C43v22Ev,
  (VTBL_ENTRY)&_ZN6S853C43v23Ev,
  (VTBL_ENTRY)&_ZN6S853C43v24Ev,
  (VTBL_ENTRY)&_ZN6S853C43v25Ev,
  (VTBL_ENTRY)&_ZN6S853C43v26Ev,
  (VTBL_ENTRY)&_ZN6S853C43v27Ev,
  (VTBL_ENTRY)&_ZN6S853C43v28Ev,
  (VTBL_ENTRY)&_ZN6S853C43v29Ev,
  (VTBL_ENTRY)&_ZN6S853C43v30Ev,
  (VTBL_ENTRY)&_ZN6S853C43v31Ev,
  (VTBL_ENTRY)&_ZN6S853C43v32Ev,
  (VTBL_ENTRY)&_ZN6S853C43v33Ev,
  (VTBL_ENTRY)&_ZN6S853C43v34Ev,
  (VTBL_ENTRY)&_ZN6S853C43v35Ev,
  (VTBL_ENTRY)&_ZN6S853C43v36Ev,
  (VTBL_ENTRY)&_ZN6S853C43v37Ev,
  (VTBL_ENTRY)&_ZN6S853C33v38Ev,
  (VTBL_ENTRY)&_ZN6S853C33v39Ev,
  (VTBL_ENTRY)&_ZN6S853C33v40Ev,
  (VTBL_ENTRY)&_ZN6S853C23v42Ev,
  (VTBL_ENTRY)&_ZN6S853C23v43Ev,
  (VTBL_ENTRY)&_ZN6S853C23v44Ev,
  (VTBL_ENTRY)&_ZN6S853C23v45Ev,
  (VTBL_ENTRY)&_ZN6S853C23v46Ev,
  (VTBL_ENTRY)&_ZN6S853C23v47Ev,
  (VTBL_ENTRY)&_ZN6S853C23v48Ev,
  (VTBL_ENTRY)&_ZN6S853C23v49Ev,
  (VTBL_ENTRY)&_ZN6S853C23v50Ev,
  (VTBL_ENTRY)&_ZN6S853C23v51Ev,
  (VTBL_ENTRY)&_ZN6S853C23v52Ev,
  (VTBL_ENTRY)&_ZN6S853C23v53Ev,
  (VTBL_ENTRY)&_ZN6S853C23v54Ev,
  (VTBL_ENTRY)&_ZN6S853C23v55Ev,
  (VTBL_ENTRY)&_ZN6S853C23v56Ev,
  (VTBL_ENTRY)&_ZN6S853C23v57Ev,
  (VTBL_ENTRY)&_ZN6S853C23v58Ev,
  (VTBL_ENTRY)&_ZN6S853C23v59Ev,
  (VTBL_ENTRY)&_ZN6S853C23v60Ev,
  (VTBL_ENTRY)&_ZN6S853C23v61Ev,
  (VTBL_ENTRY)&_ZN6S853C23v62Ev,
  (VTBL_ENTRY)&_ZN6S853C23v63Ev,
  (VTBL_ENTRY)&_ZN6S853C23v64Ev,
  (VTBL_ENTRY)&_ZN6S853C23v65Ev,
  (VTBL_ENTRY)&_ZN6S853C23v66Ev,
  (VTBL_ENTRY)&_ZN6S853C23v67Ev,
  (VTBL_ENTRY)&_ZN6S853C23v68Ev,
  (VTBL_ENTRY)&_ZN6S853C23v69Ev,
  (VTBL_ENTRY)&_ZN6S853C23v70Ev,
  (VTBL_ENTRY)&_ZN6S853C23v71Ev,
  (VTBL_ENTRY)&_ZN6S853C23v72Ev,
  (VTBL_ENTRY)&_ZN6S853C23v73Ev,
  (VTBL_ENTRY)&_ZN6S853C23v74Ev,
  (VTBL_ENTRY)&_ZN6S853C23v75Ev,
  (VTBL_ENTRY)&_ZN6S853C23v76Ev,
  (VTBL_ENTRY)&_ZN6S853C23v77Ev,
  (VTBL_ENTRY)&_ZN6S853C23v78Ev,
  (VTBL_ENTRY)&_ZN6S853C23v79Ev,
  (VTBL_ENTRY)&_ZN6S853C23v80Ev,
  (VTBL_ENTRY)&_ZN6S853C23v81Ev,
  (VTBL_ENTRY)&_ZN6S853C23v82Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S853C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S853C2D1Ev,_ZThn4_N6S853C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S853C2D0Ev,_ZThn4_N6S853C2D0Ev),
  (VTBL_ENTRY)&_ZN6S853C63v15Ev,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI6S853C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S853C2D1Ev,_ZThn60_N6S853C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S853C2D0Ev,_ZThn60_N6S853C2D0Ev),
  (VTBL_ENTRY)&_ZN7S853C113v41Ev,
};
extern VTBL_ENTRY _ZTI6S853C2[];
extern  VTBL_ENTRY _ZTV6S853C2[];
Class_Descriptor cd_S853C2 = {  "S853C2", // class name
  bases_S853C2, 5,
  &(vtc_S853C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,188), // object size
  NSPAIRA(_ZTI6S853C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S853C2),83, //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  S853C1  : S853C2 {
  virtual  ~S853C1(); // _ZN6S853C1D1Ev
  virtual void  v1(); // _ZN6S853C12v1Ev
  virtual void  v2(); // _ZN6S853C12v2Ev
  virtual void  v3(); // _ZN6S853C12v3Ev
  virtual void  v4(); // _ZN6S853C12v4Ev
  virtual void  v5(); // _ZN6S853C12v5Ev
  virtual void  v6(); // _ZN6S853C12v6Ev
  virtual void  v7(); // _ZN6S853C12v7Ev
  virtual void  v8(); // _ZN6S853C12v8Ev
  virtual void  v9(); // _ZN6S853C12v9Ev
  virtual void  v10(); // _ZN6S853C13v10Ev
  virtual void  v11(); // _ZN6S853C13v11Ev
  S853C1(); // tgen
};
//SIG(1 S853C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14} BC6{ vd v15} vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37} vd v38 v39 v40 FC7{ m Fp Fi[2] FC8{ m}} FC9{ m FC10{ FL[4]}} Fc} BC11{ vd v41} vd 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 FC12{ m FC10} FC13{ m Fp FC9 FC14{ m Fp FC15{ Fi[4]}} Fi Fc} Fc[3] Fp FC16{ BC17{ vd v85} BC18{ vd v86} vd v83 v84 Fp[2]} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11}


 S853C1 ::~S853C1(){ note_dtor("S853C1", this);}
void  S853C1 ::v1(){vfunc_called(this, "_ZN6S853C12v1Ev");}
void  S853C1 ::v2(){vfunc_called(this, "_ZN6S853C12v2Ev");}
void  S853C1 ::v3(){vfunc_called(this, "_ZN6S853C12v3Ev");}
void  S853C1 ::v4(){vfunc_called(this, "_ZN6S853C12v4Ev");}
void  S853C1 ::v5(){vfunc_called(this, "_ZN6S853C12v5Ev");}
void  S853C1 ::v6(){vfunc_called(this, "_ZN6S853C12v6Ev");}
void  S853C1 ::v7(){vfunc_called(this, "_ZN6S853C12v7Ev");}
void  S853C1 ::v8(){vfunc_called(this, "_ZN6S853C12v8Ev");}
void  S853C1 ::v9(){vfunc_called(this, "_ZN6S853C12v9Ev");}
void  S853C1 ::v10(){vfunc_called(this, "_ZN6S853C13v10Ev");}
void  S853C1 ::v11(){vfunc_called(this, "_ZN6S853C13v11Ev");}
S853C1 ::S853C1(){ note_ctor("S853C1", this);} // tgen

static void Test_S853C1()
{
  extern Class_Descriptor cd_S853C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,48)];
    init_test(&cd_S853C1, buf);
    S853C1 *dp, &lv = *(dp=new (buf) S853C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,188), "sizeof(S853C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S853C1)");
    check_base_class_offset(lv, (S853C5*)(S853C4*)(S853C3*)(S853C2*), 0, "S853C1");
    check_base_class_offset(lv, (S853C6*)(S853C4*)(S853C3*)(S853C2*), ABISELECT(8,4), "S853C1");
    check_base_class_offset(lv, (S853C4*)(S853C3*)(S853C2*), 0, "S853C1");
    check_base_class_offset(lv, (S853C3*)(S853C2*), 0, "S853C1");
    check_base_class_offset(lv, (S853C11*)(S853C2*), ABISELECT(80,60), "S853C1");
    check_base_class_offset(lv, (S853C2*), 0, "S853C1");
    test_class_info(&lv, &cd_S853C1);
    dp->~S853C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS853C1(Test_S853C1, "S853C1", ABISELECT(248,188));

#else // __cplusplus

extern void _ZN6S853C1C1Ev();
extern void _ZN6S853C1D1Ev();
Name_Map name_map_S853C1[] = {
  NSPAIR(_ZN6S853C1C1Ev),
  NSPAIR(_ZN6S853C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S853C5;
extern VTBL_ENTRY _ZTI6S853C5[];
extern  VTBL_ENTRY _ZTV6S853C5[];
extern Class_Descriptor cd_S853C6;
extern VTBL_ENTRY _ZTI6S853C6[];
extern  VTBL_ENTRY _ZTV6S853C6[];
extern Class_Descriptor cd_S853C4;
extern VTBL_ENTRY _ZTI6S853C4[];
extern  VTBL_ENTRY _ZTV6S853C4[];
extern Class_Descriptor cd_S853C3;
extern VTBL_ENTRY _ZTI6S853C3[];
extern  VTBL_ENTRY _ZTV6S853C3[];
extern Class_Descriptor cd_S853C11;
extern VTBL_ENTRY _ZTI7S853C11[];
extern  VTBL_ENTRY _ZTV7S853C11[];
extern Class_Descriptor cd_S853C2;
extern VTBL_ENTRY _ZTI6S853C2[];
extern  VTBL_ENTRY _ZTV6S853C2[];
static Base_Class bases_S853C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S853C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S853C6,    ABISELECT(8,4), //bcp->offset
    84, //bcp->virtual_function_table_offset
    2, //num_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_S853C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S853C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S853C11,    ABISELECT(80,60), //bcp->offset
    89, //bcp->virtual_function_table_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_S853C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S853C1[];
extern void _ZN6S853C1D1Ev();
extern void _ZN6S853C1D0Ev();
extern void _ZN6S853C53v12Ev();
extern void _ZN6S853C53v13Ev();
extern void _ZN6S853C53v14Ev();
extern void _ZN6S853C43v16Ev();
extern void _ZN6S853C43v17Ev();
extern void _ZN6S853C43v18Ev();
extern void _ZN6S853C43v19Ev();
extern void _ZN6S853C43v20Ev();
extern void _ZN6S853C43v21Ev();
extern void _ZN6S853C43v22Ev();
extern void _ZN6S853C43v23Ev();
extern void _ZN6S853C43v24Ev();
extern void _ZN6S853C43v25Ev();
extern void _ZN6S853C43v26Ev();
extern void _ZN6S853C43v27Ev();
extern void _ZN6S853C43v28Ev();
extern void _ZN6S853C43v29Ev();
extern void _ZN6S853C43v30Ev();
extern void _ZN6S853C43v31Ev();
extern void _ZN6S853C43v32Ev();
extern void _ZN6S853C43v33Ev();
extern void _ZN6S853C43v34Ev();
extern void _ZN6S853C43v35Ev();
extern void _ZN6S853C43v36Ev();
extern void _ZN6S853C43v37Ev();
extern void _ZN6S853C33v38Ev();
extern void _ZN6S853C33v39Ev();
extern void _ZN6S853C33v40Ev();
extern void _ZN6S853C23v42Ev();
extern void _ZN6S853C23v43Ev();
extern void _ZN6S853C23v44Ev();
extern void _ZN6S853C23v45Ev();
extern void _ZN6S853C23v46Ev();
extern void _ZN6S853C23v47Ev();
extern void _ZN6S853C23v48Ev();
extern void _ZN6S853C23v49Ev();
extern void _ZN6S853C23v50Ev();
extern void _ZN6S853C23v51Ev();
extern void _ZN6S853C23v52Ev();
extern void _ZN6S853C23v53Ev();
extern void _ZN6S853C23v54Ev();
extern void _ZN6S853C23v55Ev();
extern void _ZN6S853C23v56Ev();
extern void _ZN6S853C23v57Ev();
extern void _ZN6S853C23v58Ev();
extern void _ZN6S853C23v59Ev();
extern void _ZN6S853C23v60Ev();
extern void _ZN6S853C23v61Ev();
extern void _ZN6S853C23v62Ev();
extern void _ZN6S853C23v63Ev();
extern void _ZN6S853C23v64Ev();
extern void _ZN6S853C23v65Ev();
extern void _ZN6S853C23v66Ev();
extern void _ZN6S853C23v67Ev();
extern void _ZN6S853C23v68Ev();
extern void _ZN6S853C23v69Ev();
extern void _ZN6S853C23v70Ev();
extern void _ZN6S853C23v71Ev();
extern void _ZN6S853C23v72Ev();
extern void _ZN6S853C23v73Ev();
extern void _ZN6S853C23v74Ev();
extern void _ZN6S853C23v75Ev();
extern void _ZN6S853C23v76Ev();
extern void _ZN6S853C23v77Ev();
extern void _ZN6S853C23v78Ev();
extern void _ZN6S853C23v79Ev();
extern void _ZN6S853C23v80Ev();
extern void _ZN6S853C23v81Ev();
extern void _ZN6S853C23v82Ev();
extern void _ZN6S853C12v1Ev();
extern void _ZN6S853C12v2Ev();
extern void _ZN6S853C12v3Ev();
extern void _ZN6S853C12v4Ev();
extern void _ZN6S853C12v5Ev();
extern void _ZN6S853C12v6Ev();
extern void _ZN6S853C12v7Ev();
extern void _ZN6S853C12v8Ev();
extern void _ZN6S853C12v9Ev();
extern void _ZN6S853C13v10Ev();
extern void _ZN6S853C13v11Ev();
extern void ABISELECT(_ZThn8_N6S853C1D1Ev,_ZThn4_N6S853C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S853C1D0Ev,_ZThn4_N6S853C1D0Ev)();
extern void _ZN6S853C63v15Ev();
extern void ABISELECT(_ZThn80_N6S853C1D1Ev,_ZThn60_N6S853C1D1Ev)();
extern void ABISELECT(_ZThn80_N6S853C1D0Ev,_ZThn60_N6S853C1D0Ev)();
extern void _ZN7S853C113v41Ev();
static  VTBL_ENTRY vtc_S853C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S853C1[0]),
  (VTBL_ENTRY)&_ZN6S853C1D1Ev,
  (VTBL_ENTRY)&_ZN6S853C1D0Ev,
  (VTBL_ENTRY)&_ZN6S853C53v12Ev,
  (VTBL_ENTRY)&_ZN6S853C53v13Ev,
  (VTBL_ENTRY)&_ZN6S853C53v14Ev,
  (VTBL_ENTRY)&_ZN6S853C43v16Ev,
  (VTBL_ENTRY)&_ZN6S853C43v17Ev,
  (VTBL_ENTRY)&_ZN6S853C43v18Ev,
  (VTBL_ENTRY)&_ZN6S853C43v19Ev,
  (VTBL_ENTRY)&_ZN6S853C43v20Ev,
  (VTBL_ENTRY)&_ZN6S853C43v21Ev,
  (VTBL_ENTRY)&_ZN6S853C43v22Ev,
  (VTBL_ENTRY)&_ZN6S853C43v23Ev,
  (VTBL_ENTRY)&_ZN6S853C43v24Ev,
  (VTBL_ENTRY)&_ZN6S853C43v25Ev,
  (VTBL_ENTRY)&_ZN6S853C43v26Ev,
  (VTBL_ENTRY)&_ZN6S853C43v27Ev,
  (VTBL_ENTRY)&_ZN6S853C43v28Ev,
  (VTBL_ENTRY)&_ZN6S853C43v29Ev,
  (VTBL_ENTRY)&_ZN6S853C43v30Ev,
  (VTBL_ENTRY)&_ZN6S853C43v31Ev,
  (VTBL_ENTRY)&_ZN6S853C43v32Ev,
  (VTBL_ENTRY)&_ZN6S853C43v33Ev,
  (VTBL_ENTRY)&_ZN6S853C43v34Ev,
  (VTBL_ENTRY)&_ZN6S853C43v35Ev,
  (VTBL_ENTRY)&_ZN6S853C43v36Ev,
  (VTBL_ENTRY)&_ZN6S853C43v37Ev,
  (VTBL_ENTRY)&_ZN6S853C33v38Ev,
  (VTBL_ENTRY)&_ZN6S853C33v39Ev,
  (VTBL_ENTRY)&_ZN6S853C33v40Ev,
  (VTBL_ENTRY)&_ZN6S853C23v42Ev,
  (VTBL_ENTRY)&_ZN6S853C23v43Ev,
  (VTBL_ENTRY)&_ZN6S853C23v44Ev,
  (VTBL_ENTRY)&_ZN6S853C23v45Ev,
  (VTBL_ENTRY)&_ZN6S853C23v46Ev,
  (VTBL_ENTRY)&_ZN6S853C23v47Ev,
  (VTBL_ENTRY)&_ZN6S853C23v48Ev,
  (VTBL_ENTRY)&_ZN6S853C23v49Ev,
  (VTBL_ENTRY)&_ZN6S853C23v50Ev,
  (VTBL_ENTRY)&_ZN6S853C23v51Ev,
  (VTBL_ENTRY)&_ZN6S853C23v52Ev,
  (VTBL_ENTRY)&_ZN6S853C23v53Ev,
  (VTBL_ENTRY)&_ZN6S853C23v54Ev,
  (VTBL_ENTRY)&_ZN6S853C23v55Ev,
  (VTBL_ENTRY)&_ZN6S853C23v56Ev,
  (VTBL_ENTRY)&_ZN6S853C23v57Ev,
  (VTBL_ENTRY)&_ZN6S853C23v58Ev,
  (VTBL_ENTRY)&_ZN6S853C23v59Ev,
  (VTBL_ENTRY)&_ZN6S853C23v60Ev,
  (VTBL_ENTRY)&_ZN6S853C23v61Ev,
  (VTBL_ENTRY)&_ZN6S853C23v62Ev,
  (VTBL_ENTRY)&_ZN6S853C23v63Ev,
  (VTBL_ENTRY)&_ZN6S853C23v64Ev,
  (VTBL_ENTRY)&_ZN6S853C23v65Ev,
  (VTBL_ENTRY)&_ZN6S853C23v66Ev,
  (VTBL_ENTRY)&_ZN6S853C23v67Ev,
  (VTBL_ENTRY)&_ZN6S853C23v68Ev,
  (VTBL_ENTRY)&_ZN6S853C23v69Ev,
  (VTBL_ENTRY)&_ZN6S853C23v70Ev,
  (VTBL_ENTRY)&_ZN6S853C23v71Ev,
  (VTBL_ENTRY)&_ZN6S853C23v72Ev,
  (VTBL_ENTRY)&_ZN6S853C23v73Ev,
  (VTBL_ENTRY)&_ZN6S853C23v74Ev,
  (VTBL_ENTRY)&_ZN6S853C23v75Ev,
  (VTBL_ENTRY)&_ZN6S853C23v76Ev,
  (VTBL_ENTRY)&_ZN6S853C23v77Ev,
  (VTBL_ENTRY)&_ZN6S853C23v78Ev,
  (VTBL_ENTRY)&_ZN6S853C23v79Ev,
  (VTBL_ENTRY)&_ZN6S853C23v80Ev,
  (VTBL_ENTRY)&_ZN6S853C23v81Ev,
  (VTBL_ENTRY)&_ZN6S853C23v82Ev,
  (VTBL_ENTRY)&_ZN6S853C12v1Ev,
  (VTBL_ENTRY)&_ZN6S853C12v2Ev,
  (VTBL_ENTRY)&_ZN6S853C12v3Ev,
  (VTBL_ENTRY)&_ZN6S853C12v4Ev,
  (VTBL_ENTRY)&_ZN6S853C12v5Ev,
  (VTBL_ENTRY)&_ZN6S853C12v6Ev,
  (VTBL_ENTRY)&_ZN6S853C12v7Ev,
  (VTBL_ENTRY)&_ZN6S853C12v8Ev,
  (VTBL_ENTRY)&_ZN6S853C12v9Ev,
  (VTBL_ENTRY)&_ZN6S853C13v10Ev,
  (VTBL_ENTRY)&_ZN6S853C13v11Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S853C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S853C1D1Ev,_ZThn4_N6S853C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S853C1D0Ev,_ZThn4_N6S853C1D0Ev),
  (VTBL_ENTRY)&_ZN6S853C63v15Ev,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI6S853C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S853C1D1Ev,_ZThn60_N6S853C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S853C1D0Ev,_ZThn60_N6S853C1D0Ev),
  (VTBL_ENTRY)&_ZN7S853C113v41Ev,
};
extern VTBL_ENTRY _ZTI6S853C1[];
extern  VTBL_ENTRY _ZTV6S853C1[];
Class_Descriptor cd_S853C1 = {  "S853C1", // class name
  bases_S853C1, 6,
  &(vtc_S853C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,188), // object size
  NSPAIRA(_ZTI6S853C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S853C1),94, //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  S852C5  {
  virtual  ~S852C5(); // _ZN6S852C5D1Ev
  virtual void  v12(); // _ZN6S852C53v12Ev
  virtual void  v13(); // _ZN6S852C53v13Ev
  virtual void  v14(); // _ZN6S852C53v14Ev
  S852C5(); // tgen
};
//SIG(-1 S852C5) C1{ vd v1 v2 v3}


 S852C5 ::~S852C5(){ note_dtor("S852C5", this);}
void  S852C5 ::v12(){vfunc_called(this, "_ZN6S852C53v12Ev");}
void  S852C5 ::v13(){vfunc_called(this, "_ZN6S852C53v13Ev");}
void  S852C5 ::v14(){vfunc_called(this, "_ZN6S852C53v14Ev");}
S852C5 ::S852C5(){ note_ctor("S852C5", this);} // tgen

static void Test_S852C5()
{
  extern Class_Descriptor cd_S852C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S852C5, buf);
    S852C5 *dp, &lv = *(dp=new (buf) S852C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S852C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S852C5)");
    test_class_info(&lv, &cd_S852C5);
    dp->~S852C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS852C5(Test_S852C5, "S852C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S852C5C1Ev();
extern void _ZN6S852C5D1Ev();
Name_Map name_map_S852C5[] = {
  NSPAIR(_ZN6S852C5C1Ev),
  NSPAIR(_ZN6S852C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S852C5[];
extern void _ZN6S852C5D1Ev();
extern void _ZN6S852C5D0Ev();
extern void _ZN6S852C53v12Ev();
extern void _ZN6S852C53v13Ev();
extern void _ZN6S852C53v14Ev();
static  VTBL_ENTRY vtc_S852C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S852C5[0]),
  (VTBL_ENTRY)&_ZN6S852C5D1Ev,
  (VTBL_ENTRY)&_ZN6S852C5D0Ev,
  (VTBL_ENTRY)&_ZN6S852C53v12Ev,
  (VTBL_ENTRY)&_ZN6S852C53v13Ev,
  (VTBL_ENTRY)&_ZN6S852C53v14Ev,
};
extern VTBL_ENTRY _ZTI6S852C5[];
extern  VTBL_ENTRY _ZTV6S852C5[];
Class_Descriptor cd_S852C5 = {  "S852C5", // class name
  0,0,//no base classes
  &(vtc_S852C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S852C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S852C5),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  S852C6  {
  virtual  ~S852C6(); // _ZN6S852C6D1Ev
  virtual void  v15(); // _ZN6S852C63v15Ev
  S852C6(); // tgen
};
//SIG(-1 S852C6) C1{ vd v1}


 S852C6 ::~S852C6(){ note_dtor("S852C6", this);}
void  S852C6 ::v15(){vfunc_called(this, "_ZN6S852C63v15Ev");}
S852C6 ::S852C6(){ note_ctor("S852C6", this);} // tgen

static void Test_S852C6()
{
  extern Class_Descriptor cd_S852C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S852C6, buf);
    S852C6 *dp, &lv = *(dp=new (buf) S852C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S852C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S852C6)");
    test_class_info(&lv, &cd_S852C6);
    dp->~S852C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS852C6(Test_S852C6, "S852C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S852C6C1Ev();
extern void _ZN6S852C6D1Ev();
Name_Map name_map_S852C6[] = {
  NSPAIR(_ZN6S852C6C1Ev),
  NSPAIR(_ZN6S852C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S852C6[];
extern void _ZN6S852C6D1Ev();
extern void _ZN6S852C6D0Ev();
extern void _ZN6S852C63v15Ev();
static  VTBL_ENTRY vtc_S852C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S852C6[0]),
  (VTBL_ENTRY)&_ZN6S852C6D1Ev,
  (VTBL_ENTRY)&_ZN6S852C6D0Ev,
  (VTBL_ENTRY)&_ZN6S852C63v15Ev,
};
extern VTBL_ENTRY _ZTI6S852C6[];
extern  VTBL_ENTRY _ZTV6S852C6[];
Class_Descriptor cd_S852C6 = {  "S852C6", // class name
  0,0,//no base classes
  &(vtc_S852C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S852C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S852C6),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  S852C4  : S852C5 , S852C6 {
  virtual  ~S852C4(); // _ZN6S852C4D1Ev
  virtual void  v16(); // _ZN6S852C43v16Ev
  virtual void  v17(); // _ZN6S852C43v17Ev
  virtual void  v18(); // _ZN6S852C43v18Ev
  virtual void  v19(); // _ZN6S852C43v19Ev
  virtual void  v20(); // _ZN6S852C43v20Ev
  virtual void  v21(); // _ZN6S852C43v21Ev
  virtual void  v22(); // _ZN6S852C43v22Ev
  virtual void  v23(); // _ZN6S852C43v23Ev
  virtual void  v24(); // _ZN6S852C43v24Ev
  virtual void  v25(); // _ZN6S852C43v25Ev
  virtual void  v26(); // _ZN6S852C43v26Ev
  virtual void  v27(); // _ZN6S852C43v27Ev
  virtual void  v28(); // _ZN6S852C43v28Ev
  virtual void  v29(); // _ZN6S852C43v29Ev
  virtual void  v30(); // _ZN6S852C43v30Ev
  virtual void  v31(); // _ZN6S852C43v31Ev
  virtual void  v32(); // _ZN6S852C43v32Ev
  virtual void  v33(); // _ZN6S852C43v33Ev
  virtual void  v34(); // _ZN6S852C43v34Ev
  virtual void  v35(); // _ZN6S852C43v35Ev
  virtual void  v36(); // _ZN6S852C43v36Ev
  virtual void  v37(); // _ZN6S852C43v37Ev
  S852C4(); // tgen
};
//SIG(-1 S852C4) C1{ BC2{ vd v23 v24 v25} BC3{ vd v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S852C4 ::~S852C4(){ note_dtor("S852C4", this);}
void  S852C4 ::v16(){vfunc_called(this, "_ZN6S852C43v16Ev");}
void  S852C4 ::v17(){vfunc_called(this, "_ZN6S852C43v17Ev");}
void  S852C4 ::v18(){vfunc_called(this, "_ZN6S852C43v18Ev");}
void  S852C4 ::v19(){vfunc_called(this, "_ZN6S852C43v19Ev");}
void  S852C4 ::v20(){vfunc_called(this, "_ZN6S852C43v20Ev");}
void  S852C4 ::v21(){vfunc_called(this, "_ZN6S852C43v21Ev");}
void  S852C4 ::v22(){vfunc_called(this, "_ZN6S852C43v22Ev");}
void  S852C4 ::v23(){vfunc_called(this, "_ZN6S852C43v23Ev");}
void  S852C4 ::v24(){vfunc_called(this, "_ZN6S852C43v24Ev");}
void  S852C4 ::v25(){vfunc_called(this, "_ZN6S852C43v25Ev");}
void  S852C4 ::v26(){vfunc_called(this, "_ZN6S852C43v26Ev");}
void  S852C4 ::v27(){vfunc_called(this, "_ZN6S852C43v27Ev");}
void  S852C4 ::v28(){vfunc_called(this, "_ZN6S852C43v28Ev");}
void  S852C4 ::v29(){vfunc_called(this, "_ZN6S852C43v29Ev");}
void  S852C4 ::v30(){vfunc_called(this, "_ZN6S852C43v30Ev");}
void  S852C4 ::v31(){vfunc_called(this, "_ZN6S852C43v31Ev");}
void  S852C4 ::v32(){vfunc_called(this, "_ZN6S852C43v32Ev");}
void  S852C4 ::v33(){vfunc_called(this, "_ZN6S852C43v33Ev");}
void  S852C4 ::v34(){vfunc_called(this, "_ZN6S852C43v34Ev");}
void  S852C4 ::v35(){vfunc_called(this, "_ZN6S852C43v35Ev");}
void  S852C4 ::v36(){vfunc_called(this, "_ZN6S852C43v36Ev");}
void  S852C4 ::v37(){vfunc_called(this, "_ZN6S852C43v37Ev");}
S852C4 ::S852C4(){ note_ctor("S852C4", this);} // tgen

static void Test_S852C4()
{
  extern Class_Descriptor cd_S852C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S852C4, buf);
    S852C4 *dp, &lv = *(dp=new (buf) S852C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S852C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S852C4)");
    check_base_class_offset(lv, (S852C5*), 0, "S852C4");
    check_base_class_offset(lv, (S852C6*), ABISELECT(8,4), "S852C4");
    test_class_info(&lv, &cd_S852C4);
    dp->~S852C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS852C4(Test_S852C4, "S852C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S852C4C1Ev();
extern void _ZN6S852C4D1Ev();
Name_Map name_map_S852C4[] = {
  NSPAIR(_ZN6S852C4C1Ev),
  NSPAIR(_ZN6S852C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S852C5;
extern VTBL_ENTRY _ZTI6S852C5[];
extern  VTBL_ENTRY _ZTV6S852C5[];
extern Class_Descriptor cd_S852C6;
extern VTBL_ENTRY _ZTI6S852C6[];
extern  VTBL_ENTRY _ZTV6S852C6[];
static Base_Class bases_S852C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S852C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S852C6,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S852C4[];
extern void _ZN6S852C4D1Ev();
extern void _ZN6S852C4D0Ev();
extern void _ZN6S852C53v12Ev();
extern void _ZN6S852C53v13Ev();
extern void _ZN6S852C53v14Ev();
extern void _ZN6S852C43v16Ev();
extern void _ZN6S852C43v17Ev();
extern void _ZN6S852C43v18Ev();
extern void _ZN6S852C43v19Ev();
extern void _ZN6S852C43v20Ev();
extern void _ZN6S852C43v21Ev();
extern void _ZN6S852C43v22Ev();
extern void _ZN6S852C43v23Ev();
extern void _ZN6S852C43v24Ev();
extern void _ZN6S852C43v25Ev();
extern void _ZN6S852C43v26Ev();
extern void _ZN6S852C43v27Ev();
extern void _ZN6S852C43v28Ev();
extern void _ZN6S852C43v29Ev();
extern void _ZN6S852C43v30Ev();
extern void _ZN6S852C43v31Ev();
extern void _ZN6S852C43v32Ev();
extern void _ZN6S852C43v33Ev();
extern void _ZN6S852C43v34Ev();
extern void _ZN6S852C43v35Ev();
extern void _ZN6S852C43v36Ev();
extern void _ZN6S852C43v37Ev();
extern void ABISELECT(_ZThn8_N6S852C4D1Ev,_ZThn4_N6S852C4D1Ev)();
extern void ABISELECT(_ZThn8_N6S852C4D0Ev,_ZThn4_N6S852C4D0Ev)();
extern void _ZN6S852C63v15Ev();
static  VTBL_ENTRY vtc_S852C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S852C4[0]),
  (VTBL_ENTRY)&_ZN6S852C4D1Ev,
  (VTBL_ENTRY)&_ZN6S852C4D0Ev,
  (VTBL_ENTRY)&_ZN6S852C53v12Ev,
  (VTBL_ENTRY)&_ZN6S852C53v13Ev,
  (VTBL_ENTRY)&_ZN6S852C53v14Ev,
  (VTBL_ENTRY)&_ZN6S852C43v16Ev,
  (VTBL_ENTRY)&_ZN6S852C43v17Ev,
  (VTBL_ENTRY)&_ZN6S852C43v18Ev,
  (VTBL_ENTRY)&_ZN6S852C43v19Ev,
  (VTBL_ENTRY)&_ZN6S852C43v20Ev,
  (VTBL_ENTRY)&_ZN6S852C43v21Ev,
  (VTBL_ENTRY)&_ZN6S852C43v22Ev,
  (VTBL_ENTRY)&_ZN6S852C43v23Ev,
  (VTBL_ENTRY)&_ZN6S852C43v24Ev,
  (VTBL_ENTRY)&_ZN6S852C43v25Ev,
  (VTBL_ENTRY)&_ZN6S852C43v26Ev,
  (VTBL_ENTRY)&_ZN6S852C43v27Ev,
  (VTBL_ENTRY)&_ZN6S852C43v28Ev,
  (VTBL_ENTRY)&_ZN6S852C43v29Ev,
  (VTBL_ENTRY)&_ZN6S852C43v30Ev,
  (VTBL_ENTRY)&_ZN6S852C43v31Ev,
  (VTBL_ENTRY)&_ZN6S852C43v32Ev,
  (VTBL_ENTRY)&_ZN6S852C43v33Ev,
  (VTBL_ENTRY)&_ZN6S852C43v34Ev,
  (VTBL_ENTRY)&_ZN6S852C43v35Ev,
  (VTBL_ENTRY)&_ZN6S852C43v36Ev,
  (VTBL_ENTRY)&_ZN6S852C43v37Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S852C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S852C4D1Ev,_ZThn4_N6S852C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S852C4D0Ev,_ZThn4_N6S852C4D0Ev),
  (VTBL_ENTRY)&_ZN6S852C63v15Ev,
};
extern VTBL_ENTRY _ZTI6S852C4[];
extern  VTBL_ENTRY _ZTV6S852C4[];
Class_Descriptor cd_S852C4 = {  "S852C4", // class name
  bases_S852C4, 2,
  &(vtc_S852C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S852C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S852C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S852C3  : S852C4 {
  ::S857C7_nt s852c3f0;
  ::S856C9_nt s852c3f1;
  char s852c3f2;
  virtual  ~S852C3(); // _ZN6S852C3D1Ev
  virtual void  v38(); // _ZN6S852C33v38Ev
  virtual void  v39(); // _ZN6S852C33v39Ev
  virtual void  v40(); // _ZN6S852C33v40Ev
  S852C3(); // tgen
};
//SIG(-1 S852C3) C1{ BC2{ BC3{ vd v4 v5 v6} BC4{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ Fl[4]}} Fc}


 S852C3 ::~S852C3(){ note_dtor("S852C3", this);}
void  S852C3 ::v38(){vfunc_called(this, "_ZN6S852C33v38Ev");}
void  S852C3 ::v39(){vfunc_called(this, "_ZN6S852C33v39Ev");}
void  S852C3 ::v40(){vfunc_called(this, "_ZN6S852C33v40Ev");}
S852C3 ::S852C3(){ note_ctor("S852C3", this);} // tgen

static void Test_S852C3()
{
  extern Class_Descriptor cd_S852C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S852C3, buf);
    S852C3 *dp, &lv = *(dp=new (buf) S852C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S852C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S852C3)");
    check_base_class_offset(lv, (S852C5*)(S852C4*), 0, "S852C3");
    check_base_class_offset(lv, (S852C6*)(S852C4*), ABISELECT(8,4), "S852C3");
    check_base_class_offset(lv, (S852C4*), 0, "S852C3");
    check_field_offset(lv, s852c3f0, ABISELECT(16,8), "S852C3.s852c3f0");
    check_field_offset(lv, s852c3f1, ABISELECT(40,24), "S852C3.s852c3f1");
    check_field_offset(lv, s852c3f2, ABISELECT(72,40), "S852C3.s852c3f2");
    test_class_info(&lv, &cd_S852C3);
    dp->~S852C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS852C3(Test_S852C3, "S852C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S852C3C1Ev();
extern void _ZN6S852C3D1Ev();
Name_Map name_map_S852C3[] = {
  NSPAIR(_ZN6S852C3C1Ev),
  NSPAIR(_ZN6S852C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S852C5;
extern VTBL_ENTRY _ZTI6S852C5[];
extern  VTBL_ENTRY _ZTV6S852C5[];
extern Class_Descriptor cd_S852C6;
extern VTBL_ENTRY _ZTI6S852C6[];
extern  VTBL_ENTRY _ZTV6S852C6[];
extern Class_Descriptor cd_S852C4;
extern VTBL_ENTRY _ZTI6S852C4[];
extern  VTBL_ENTRY _ZTV6S852C4[];
static Base_Class bases_S852C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S852C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S852C6,    ABISELECT(8,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S852C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S852C3[];
extern void _ZN6S852C3D1Ev();
extern void _ZN6S852C3D0Ev();
extern void _ZN6S852C53v12Ev();
extern void _ZN6S852C53v13Ev();
extern void _ZN6S852C53v14Ev();
extern void _ZN6S852C43v16Ev();
extern void _ZN6S852C43v17Ev();
extern void _ZN6S852C43v18Ev();
extern void _ZN6S852C43v19Ev();
extern void _ZN6S852C43v20Ev();
extern void _ZN6S852C43v21Ev();
extern void _ZN6S852C43v22Ev();
extern void _ZN6S852C43v23Ev();
extern void _ZN6S852C43v24Ev();
extern void _ZN6S852C43v25Ev();
extern void _ZN6S852C43v26Ev();
extern void _ZN6S852C43v27Ev();
extern void _ZN6S852C43v28Ev();
extern void _ZN6S852C43v29Ev();
extern void _ZN6S852C43v30Ev();
extern void _ZN6S852C43v31Ev();
extern void _ZN6S852C43v32Ev();
extern void _ZN6S852C43v33Ev();
extern void _ZN6S852C43v34Ev();
extern void _ZN6S852C43v35Ev();
extern void _ZN6S852C43v36Ev();
extern void _ZN6S852C43v37Ev();
extern void _ZN6S852C33v38Ev();
extern void _ZN6S852C33v39Ev();
extern void _ZN6S852C33v40Ev();
extern void ABISELECT(_ZThn8_N6S852C3D1Ev,_ZThn4_N6S852C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S852C3D0Ev,_ZThn4_N6S852C3D0Ev)();
extern void _ZN6S852C63v15Ev();
static  VTBL_ENTRY vtc_S852C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S852C3[0]),
  (VTBL_ENTRY)&_ZN6S852C3D1Ev,
  (VTBL_ENTRY)&_ZN6S852C3D0Ev,
  (VTBL_ENTRY)&_ZN6S852C53v12Ev,
  (VTBL_ENTRY)&_ZN6S852C53v13Ev,
  (VTBL_ENTRY)&_ZN6S852C53v14Ev,
  (VTBL_ENTRY)&_ZN6S852C43v16Ev,
  (VTBL_ENTRY)&_ZN6S852C43v17Ev,
  (VTBL_ENTRY)&_ZN6S852C43v18Ev,
  (VTBL_ENTRY)&_ZN6S852C43v19Ev,
  (VTBL_ENTRY)&_ZN6S852C43v20Ev,
  (VTBL_ENTRY)&_ZN6S852C43v21Ev,
  (VTBL_ENTRY)&_ZN6S852C43v22Ev,
  (VTBL_ENTRY)&_ZN6S852C43v23Ev,
  (VTBL_ENTRY)&_ZN6S852C43v24Ev,
  (VTBL_ENTRY)&_ZN6S852C43v25Ev,
  (VTBL_ENTRY)&_ZN6S852C43v26Ev,
  (VTBL_ENTRY)&_ZN6S852C43v27Ev,
  (VTBL_ENTRY)&_ZN6S852C43v28Ev,
  (VTBL_ENTRY)&_ZN6S852C43v29Ev,
  (VTBL_ENTRY)&_ZN6S852C43v30Ev,
  (VTBL_ENTRY)&_ZN6S852C43v31Ev,
  (VTBL_ENTRY)&_ZN6S852C43v32Ev,
  (VTBL_ENTRY)&_ZN6S852C43v33Ev,
  (VTBL_ENTRY)&_ZN6S852C43v34Ev,
  (VTBL_ENTRY)&_ZN6S852C43v35Ev,
  (VTBL_ENTRY)&_ZN6S852C43v36Ev,
  (VTBL_ENTRY)&_ZN6S852C43v37Ev,
  (VTBL_ENTRY)&_ZN6S852C33v38Ev,
  (VTBL_ENTRY)&_ZN6S852C33v39Ev,
  (VTBL_ENTRY)&_ZN6S852C33v40Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S852C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S852C3D1Ev,_ZThn4_N6S852C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S852C3D0Ev,_ZThn4_N6S852C3D0Ev),
  (VTBL_ENTRY)&_ZN6S852C63v15Ev,
};
extern VTBL_ENTRY _ZTI6S852C3[];
extern  VTBL_ENTRY _ZTV6S852C3[];
Class_Descriptor cd_S852C3 = {  "S852C3", // class name
  bases_S852C3, 3,
  &(vtc_S852C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S852C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S852C3),37, //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  S852C11  {
  virtual  ~S852C11(); // _ZN7S852C11D1Ev
  virtual void  v41(); // _ZN7S852C113v41Ev
  S852C11(); // tgen
};
//SIG(-1 S852C11) C1{ vd v1}


 S852C11 ::~S852C11(){ note_dtor("S852C11", this);}
void  S852C11 ::v41(){vfunc_called(this, "_ZN7S852C113v41Ev");}
S852C11 ::S852C11(){ note_ctor("S852C11", this);} // tgen

static void Test_S852C11()
{
  extern Class_Descriptor cd_S852C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S852C11, buf);
    S852C11 *dp, &lv = *(dp=new (buf) S852C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S852C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S852C11)");
    test_class_info(&lv, &cd_S852C11);
    dp->~S852C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS852C11(Test_S852C11, "S852C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S852C11C1Ev();
extern void _ZN7S852C11D1Ev();
Name_Map name_map_S852C11[] = {
  NSPAIR(_ZN7S852C11C1Ev),
  NSPAIR(_ZN7S852C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S852C11[];
extern void _ZN7S852C11D1Ev();
extern void _ZN7S852C11D0Ev();
extern void _ZN7S852C113v41Ev();
static  VTBL_ENTRY vtc_S852C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S852C11[0]),
  (VTBL_ENTRY)&_ZN7S852C11D1Ev,
  (VTBL_ENTRY)&_ZN7S852C11D0Ev,
  (VTBL_ENTRY)&_ZN7S852C113v41Ev,
};
extern VTBL_ENTRY _ZTI7S852C11[];
extern  VTBL_ENTRY _ZTV7S852C11[];
Class_Descriptor cd_S852C11 = {  "S852C11", // class name
  0,0,//no base classes
  &(vtc_S852C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S852C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S852C11),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  S852C12  {
  ::S856C10_nt s852c12f0;
  void  mf852c12(); // _ZN7S852C128mf852c12Ev
};
//SIG(-1 S852C12) C1{ m FC2{ Fl[4]}}


void  S852C12 ::mf852c12(){}

static void Test_S852C12()
{
  {
    init_simple_test("S852C12");
    S852C12 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S852C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S852C12)");
    check_field_offset(lv, s852c12f0, 0, "S852C12.s852c12f0");
  }
}
static Arrange_To_Call_Me vS852C12(Test_S852C12, "S852C12", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S852C2  : S852C3 , S852C11 {
  ::S852C12 s852c2f0;
  ::S856C13_nt s852c2f1;
  char s852c2f2[3];
  void *s852c2f3;
  ::S857C16 s852c2f4;
  void *s852c2f5;
  virtual  ~S852C2(); // _ZN6S852C2D1Ev
  virtual void  v42(); // _ZN6S852C23v42Ev
  virtual void  v43(); // _ZN6S852C23v43Ev
  virtual void  v44(); // _ZN6S852C23v44Ev
  virtual void  v45(); // _ZN6S852C23v45Ev
  virtual void  v46(); // _ZN6S852C23v46Ev
  virtual void  v47(); // _ZN6S852C23v47Ev
  virtual void  v48(); // _ZN6S852C23v48Ev
  virtual void  v49(); // _ZN6S852C23v49Ev
  virtual void  v50(); // _ZN6S852C23v50Ev
  virtual void  v51(); // _ZN6S852C23v51Ev
  virtual void  v52(); // _ZN6S852C23v52Ev
  virtual void  v53(); // _ZN6S852C23v53Ev
  virtual void  v54(); // _ZN6S852C23v54Ev
  virtual void  v55(); // _ZN6S852C23v55Ev
  virtual void  v56(); // _ZN6S852C23v56Ev
  virtual void  v57(); // _ZN6S852C23v57Ev
  virtual void  v58(); // _ZN6S852C23v58Ev
  virtual void  v59(); // _ZN6S852C23v59Ev
  virtual void  v60(); // _ZN6S852C23v60Ev
  virtual void  v61(); // _ZN6S852C23v61Ev
  virtual void  v62(); // _ZN6S852C23v62Ev
  virtual void  v63(); // _ZN6S852C23v63Ev
  virtual void  v64(); // _ZN6S852C23v64Ev
  virtual void  v65(); // _ZN6S852C23v65Ev
  virtual void  v66(); // _ZN6S852C23v66Ev
  virtual void  v67(); // _ZN6S852C23v67Ev
  virtual void  v68(); // _ZN6S852C23v68Ev
  virtual void  v69(); // _ZN6S852C23v69Ev
  virtual void  v70(); // _ZN6S852C23v70Ev
  virtual void  v71(); // _ZN6S852C23v71Ev
  virtual void  v72(); // _ZN6S852C23v72Ev
  virtual void  v73(); // _ZN6S852C23v73Ev
  virtual void  v74(); // _ZN6S852C23v74Ev
  virtual void  v75(); // _ZN6S852C23v75Ev
  virtual void  v76(); // _ZN6S852C23v76Ev
  virtual void  v77(); // _ZN6S852C23v77Ev
  virtual void  v78(); // _ZN6S852C23v78Ev
  virtual void  v79(); // _ZN6S852C23v79Ev
  virtual void  v80(); // _ZN6S852C23v80Ev
  virtual void  v81(); // _ZN6S852C23v81Ev
  virtual void  v82(); // _ZN6S852C23v82Ev
  S852C2(); // tgen
};
//SIG(-1 S852C2) C1{ BC2{ BC3{ BC4{ vd v42 v43 v44} BC5{ vd v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67} vd v68 v69 v70 FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ Fl[4]}} Fc} BC10{ vd v71} 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 FC11{ m FC9} FC12{ m Fp FC8 FC13{ m Fp FC14{ Fi[4]}} Fi Fc} Fc[3] Fp FC15{ BC16{ vd v74} BC17{ vd v75} vd v72 v73 Fp[2]} Fp}


 S852C2 ::~S852C2(){ note_dtor("S852C2", this);}
void  S852C2 ::v42(){vfunc_called(this, "_ZN6S852C23v42Ev");}
void  S852C2 ::v43(){vfunc_called(this, "_ZN6S852C23v43Ev");}
void  S852C2 ::v44(){vfunc_called(this, "_ZN6S852C23v44Ev");}
void  S852C2 ::v45(){vfunc_called(this, "_ZN6S852C23v45Ev");}
void  S852C2 ::v46(){vfunc_called(this, "_ZN6S852C23v46Ev");}
void  S852C2 ::v47(){vfunc_called(this, "_ZN6S852C23v47Ev");}
void  S852C2 ::v48(){vfunc_called(this, "_ZN6S852C23v48Ev");}
void  S852C2 ::v49(){vfunc_called(this, "_ZN6S852C23v49Ev");}
void  S852C2 ::v50(){vfunc_called(this, "_ZN6S852C23v50Ev");}
void  S852C2 ::v51(){vfunc_called(this, "_ZN6S852C23v51Ev");}
void  S852C2 ::v52(){vfunc_called(this, "_ZN6S852C23v52Ev");}
void  S852C2 ::v53(){vfunc_called(this, "_ZN6S852C23v53Ev");}
void  S852C2 ::v54(){vfunc_called(this, "_ZN6S852C23v54Ev");}
void  S852C2 ::v55(){vfunc_called(this, "_ZN6S852C23v55Ev");}
void  S852C2 ::v56(){vfunc_called(this, "_ZN6S852C23v56Ev");}
void  S852C2 ::v57(){vfunc_called(this, "_ZN6S852C23v57Ev");}
void  S852C2 ::v58(){vfunc_called(this, "_ZN6S852C23v58Ev");}
void  S852C2 ::v59(){vfunc_called(this, "_ZN6S852C23v59Ev");}
void  S852C2 ::v60(){vfunc_called(this, "_ZN6S852C23v60Ev");}
void  S852C2 ::v61(){vfunc_called(this, "_ZN6S852C23v61Ev");}
void  S852C2 ::v62(){vfunc_called(this, "_ZN6S852C23v62Ev");}
void  S852C2 ::v63(){vfunc_called(this, "_ZN6S852C23v63Ev");}
void  S852C2 ::v64(){vfunc_called(this, "_ZN6S852C23v64Ev");}
void  S852C2 ::v65(){vfunc_called(this, "_ZN6S852C23v65Ev");}
void  S852C2 ::v66(){vfunc_called(this, "_ZN6S852C23v66Ev");}
void  S852C2 ::v67(){vfunc_called(this, "_ZN6S852C23v67Ev");}
void  S852C2 ::v68(){vfunc_called(this, "_ZN6S852C23v68Ev");}
void  S852C2 ::v69(){vfunc_called(this, "_ZN6S852C23v69Ev");}
void  S852C2 ::v70(){vfunc_called(this, "_ZN6S852C23v70Ev");}
void  S852C2 ::v71(){vfunc_called(this, "_ZN6S852C23v71Ev");}
void  S852C2 ::v72(){vfunc_called(this, "_ZN6S852C23v72Ev");}
void  S852C2 ::v73(){vfunc_called(this, "_ZN6S852C23v73Ev");}
void  S852C2 ::v74(){vfunc_called(this, "_ZN6S852C23v74Ev");}
void  S852C2 ::v75(){vfunc_called(this, "_ZN6S852C23v75Ev");}
void  S852C2 ::v76(){vfunc_called(this, "_ZN6S852C23v76Ev");}
void  S852C2 ::v77(){vfunc_called(this, "_ZN6S852C23v77Ev");}
void  S852C2 ::v78(){vfunc_called(this, "_ZN6S852C23v78Ev");}
void  S852C2 ::v79(){vfunc_called(this, "_ZN6S852C23v79Ev");}
void  S852C2 ::v80(){vfunc_called(this, "_ZN6S852C23v80Ev");}
void  S852C2 ::v81(){vfunc_called(this, "_ZN6S852C23v81Ev");}
void  S852C2 ::v82(){vfunc_called(this, "_ZN6S852C23v82Ev");}
S852C2 ::S852C2(){ note_ctor("S852C2", this);} // tgen

static void Test_S852C2()
{
  extern Class_Descriptor cd_S852C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,36)];
    init_test(&cd_S852C2, buf);
    S852C2 *dp, &lv = *(dp=new (buf) S852C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,140), "sizeof(S852C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S852C2)");
    check_base_class_offset(lv, (S852C5*)(S852C4*)(S852C3*), 0, "S852C2");
    check_base_class_offset(lv, (S852C6*)(S852C4*)(S852C3*), ABISELECT(8,4), "S852C2");
    check_base_class_offset(lv, (S852C4*)(S852C3*), 0, "S852C2");
    check_base_class_offset(lv, (S852C3*), 0, "S852C2");
    check_base_class_offset(lv, (S852C11*), ABISELECT(80,44), "S852C2");
    check_field_offset(lv, s852c2f0, ABISELECT(88,48), "S852C2.s852c2f0");
    check_field_offset(lv, s852c2f1, ABISELECT(120,64), "S852C2.s852c2f1");
    check_field_offset(lv, s852c2f2, ABISELECT(192,112), "S852C2.s852c2f2");
    check_field_offset(lv, s852c2f3, ABISELECT(200,116), "S852C2.s852c2f3");
    check_field_offset(lv, s852c2f4, ABISELECT(208,120), "S852C2.s852c2f4");
    check_field_offset(lv, s852c2f5, ABISELECT(240,136), "S852C2.s852c2f5");
    test_class_info(&lv, &cd_S852C2);
    dp->~S852C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS852C2(Test_S852C2, "S852C2", ABISELECT(248,140));

#else // __cplusplus

extern void _ZN6S852C2C1Ev();
extern void _ZN6S852C2D1Ev();
Name_Map name_map_S852C2[] = {
  NSPAIR(_ZN6S852C2C1Ev),
  NSPAIR(_ZN6S852C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S852C5;
extern VTBL_ENTRY _ZTI6S852C5[];
extern  VTBL_ENTRY _ZTV6S852C5[];
extern Class_Descriptor cd_S852C6;
extern VTBL_ENTRY _ZTI6S852C6[];
extern  VTBL_ENTRY _ZTV6S852C6[];
extern Class_Descriptor cd_S852C4;
extern VTBL_ENTRY _ZTI6S852C4[];
extern  VTBL_ENTRY _ZTV6S852C4[];
extern Class_Descriptor cd_S852C3;
extern VTBL_ENTRY _ZTI6S852C3[];
extern  VTBL_ENTRY _ZTV6S852C3[];
extern Class_Descriptor cd_S852C11;
extern VTBL_ENTRY _ZTI7S852C11[];
extern  VTBL_ENTRY _ZTV7S852C11[];
static Base_Class bases_S852C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S852C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S852C6,    ABISELECT(8,4), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_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_S852C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S852C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S852C11,    ABISELECT(80,44), //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},
  {0}};
extern VTBL_ENTRY _ZTI6S852C2[];
extern void _ZN6S852C2D1Ev();
extern void _ZN6S852C2D0Ev();
extern void _ZN6S852C53v12Ev();
extern void _ZN6S852C53v13Ev();
extern void _ZN6S852C53v14Ev();
extern void _ZN6S852C43v16Ev();
extern void _ZN6S852C43v17Ev();
extern void _ZN6S852C43v18Ev();
extern void _ZN6S852C43v19Ev();
extern void _ZN6S852C43v20Ev();
extern void _ZN6S852C43v21Ev();
extern void _ZN6S852C43v22Ev();
extern void _ZN6S852C43v23Ev();
extern void _ZN6S852C43v24Ev();
extern void _ZN6S852C43v25Ev();
extern void _ZN6S852C43v26Ev();
extern void _ZN6S852C43v27Ev();
extern void _ZN6S852C43v28Ev();
extern void _ZN6S852C43v29Ev();
extern void _ZN6S852C43v30Ev();
extern void _ZN6S852C43v31Ev();
extern void _ZN6S852C43v32Ev();
extern void _ZN6S852C43v33Ev();
extern void _ZN6S852C43v34Ev();
extern void _ZN6S852C43v35Ev();
extern void _ZN6S852C43v36Ev();
extern void _ZN6S852C43v37Ev();
extern void _ZN6S852C33v38Ev();
extern void _ZN6S852C33v39Ev();
extern void _ZN6S852C33v40Ev();
extern void _ZN6S852C23v42Ev();
extern void _ZN6S852C23v43Ev();
extern void _ZN6S852C23v44Ev();
extern void _ZN6S852C23v45Ev();
extern void _ZN6S852C23v46Ev();
extern void _ZN6S852C23v47Ev();
extern void _ZN6S852C23v48Ev();
extern void _ZN6S852C23v49Ev();
extern void _ZN6S852C23v50Ev();
extern void _ZN6S852C23v51Ev();
extern void _ZN6S852C23v52Ev();
extern void _ZN6S852C23v53Ev();
extern void _ZN6S852C23v54Ev();
extern void _ZN6S852C23v55Ev();
extern void _ZN6S852C23v56Ev();
extern void _ZN6S852C23v57Ev();
extern void _ZN6S852C23v58Ev();
extern void _ZN6S852C23v59Ev();
extern void _ZN6S852C23v60Ev();
extern void _ZN6S852C23v61Ev();
extern void _ZN6S852C23v62Ev();
extern void _ZN6S852C23v63Ev();
extern void _ZN6S852C23v64Ev();
extern void _ZN6S852C23v65Ev();
extern void _ZN6S852C23v66Ev();
extern void _ZN6S852C23v67Ev();
extern void _ZN6S852C23v68Ev();
extern void _ZN6S852C23v69Ev();
extern void _ZN6S852C23v70Ev();
extern void _ZN6S852C23v71Ev();
extern void _ZN6S852C23v72Ev();
extern void _ZN6S852C23v73Ev();
extern void _ZN6S852C23v74Ev();
extern void _ZN6S852C23v75Ev();
extern void _ZN6S852C23v76Ev();
extern void _ZN6S852C23v77Ev();
extern void _ZN6S852C23v78Ev();
extern void _ZN6S852C23v79Ev();
extern void _ZN6S852C23v80Ev();
extern void _ZN6S852C23v81Ev();
extern void _ZN6S852C23v82Ev();
extern void ABISELECT(_ZThn8_N6S852C2D1Ev,_ZThn4_N6S852C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S852C2D0Ev,_ZThn4_N6S852C2D0Ev)();
extern void _ZN6S852C63v15Ev();
extern void ABISELECT(_ZThn80_N6S852C2D1Ev,_ZThn44_N6S852C2D1Ev)();
extern void ABISELECT(_ZThn80_N6S852C2D0Ev,_ZThn44_N6S852C2D0Ev)();
extern void _ZN7S852C113v41Ev();
static  VTBL_ENTRY vtc_S852C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S852C2[0]),
  (VTBL_ENTRY)&_ZN6S852C2D1Ev,
  (VTBL_ENTRY)&_ZN6S852C2D0Ev,
  (VTBL_ENTRY)&_ZN6S852C53v12Ev,
  (VTBL_ENTRY)&_ZN6S852C53v13Ev,
  (VTBL_ENTRY)&_ZN6S852C53v14Ev,
  (VTBL_ENTRY)&_ZN6S852C43v16Ev,
  (VTBL_ENTRY)&_ZN6S852C43v17Ev,
  (VTBL_ENTRY)&_ZN6S852C43v18Ev,
  (VTBL_ENTRY)&_ZN6S852C43v19Ev,
  (VTBL_ENTRY)&_ZN6S852C43v20Ev,
  (VTBL_ENTRY)&_ZN6S852C43v21Ev,
  (VTBL_ENTRY)&_ZN6S852C43v22Ev,
  (VTBL_ENTRY)&_ZN6S852C43v23Ev,
  (VTBL_ENTRY)&_ZN6S852C43v24Ev,
  (VTBL_ENTRY)&_ZN6S852C43v25Ev,
  (VTBL_ENTRY)&_ZN6S852C43v26Ev,
  (VTBL_ENTRY)&_ZN6S852C43v27Ev,
  (VTBL_ENTRY)&_ZN6S852C43v28Ev,
  (VTBL_ENTRY)&_ZN6S852C43v29Ev,
  (VTBL_ENTRY)&_ZN6S852C43v30Ev,
  (VTBL_ENTRY)&_ZN6S852C43v31Ev,
  (VTBL_ENTRY)&_ZN6S852C43v32Ev,
  (VTBL_ENTRY)&_ZN6S852C43v33Ev,
  (VTBL_ENTRY)&_ZN6S852C43v34Ev,
  (VTBL_ENTRY)&_ZN6S852C43v35Ev,
  (VTBL_ENTRY)&_ZN6S852C43v36Ev,
  (VTBL_ENTRY)&_ZN6S852C43v37Ev,
  (VTBL_ENTRY)&_ZN6S852C33v38Ev,
  (VTBL_ENTRY)&_ZN6S852C33v39Ev,
  (VTBL_ENTRY)&_ZN6S852C33v40Ev,
  (VTBL_ENTRY)&_ZN6S852C23v42Ev,
  (VTBL_ENTRY)&_ZN6S852C23v43Ev,
  (VTBL_ENTRY)&_ZN6S852C23v44Ev,
  (VTBL_ENTRY)&_ZN6S852C23v45Ev,
  (VTBL_ENTRY)&_ZN6S852C23v46Ev,
  (VTBL_ENTRY)&_ZN6S852C23v47Ev,
  (VTBL_ENTRY)&_ZN6S852C23v48Ev,
  (VTBL_ENTRY)&_ZN6S852C23v49Ev,
  (VTBL_ENTRY)&_ZN6S852C23v50Ev,
  (VTBL_ENTRY)&_ZN6S852C23v51Ev,
  (VTBL_ENTRY)&_ZN6S852C23v52Ev,
  (VTBL_ENTRY)&_ZN6S852C23v53Ev,
  (VTBL_ENTRY)&_ZN6S852C23v54Ev,
  (VTBL_ENTRY)&_ZN6S852C23v55Ev,
  (VTBL_ENTRY)&_ZN6S852C23v56Ev,
  (VTBL_ENTRY)&_ZN6S852C23v57Ev,
  (VTBL_ENTRY)&_ZN6S852C23v58Ev,
  (VTBL_ENTRY)&_ZN6S852C23v59Ev,
  (VTBL_ENTRY)&_ZN6S852C23v60Ev,
  (VTBL_ENTRY)&_ZN6S852C23v61Ev,
  (VTBL_ENTRY)&_ZN6S852C23v62Ev,
  (VTBL_ENTRY)&_ZN6S852C23v63Ev,
  (VTBL_ENTRY)&_ZN6S852C23v64Ev,
  (VTBL_ENTRY)&_ZN6S852C23v65Ev,
  (VTBL_ENTRY)&_ZN6S852C23v66Ev,
  (VTBL_ENTRY)&_ZN6S852C23v67Ev,
  (VTBL_ENTRY)&_ZN6S852C23v68Ev,
  (VTBL_ENTRY)&_ZN6S852C23v69Ev,
  (VTBL_ENTRY)&_ZN6S852C23v70Ev,
  (VTBL_ENTRY)&_ZN6S852C23v71Ev,
  (VTBL_ENTRY)&_ZN6S852C23v72Ev,
  (VTBL_ENTRY)&_ZN6S852C23v73Ev,
  (VTBL_ENTRY)&_ZN6S852C23v74Ev,
  (VTBL_ENTRY)&_ZN6S852C23v75Ev,
  (VTBL_ENTRY)&_ZN6S852C23v76Ev,
  (VTBL_ENTRY)&_ZN6S852C23v77Ev,
  (VTBL_ENTRY)&_ZN6S852C23v78Ev,
  (VTBL_ENTRY)&_ZN6S852C23v79Ev,
  (VTBL_ENTRY)&_ZN6S852C23v80Ev,
  (VTBL_ENTRY)&_ZN6S852C23v81Ev,
  (VTBL_ENTRY)&_ZN6S852C23v82Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S852C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S852C2D1Ev,_ZThn4_N6S852C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S852C2D0Ev,_ZThn4_N6S852C2D0Ev),
  (VTBL_ENTRY)&_ZN6S852C63v15Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI6S852C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S852C2D1Ev,_ZThn44_N6S852C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S852C2D0Ev,_ZThn44_N6S852C2D0Ev),
  (VTBL_ENTRY)&_ZN7S852C113v41Ev,
};
extern VTBL_ENTRY _ZTI6S852C2[];
extern  VTBL_ENTRY _ZTV6S852C2[];
Class_Descriptor cd_S852C2 = {  "S852C2", // class name
  bases_S852C2, 5,
  &(vtc_S852C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,140), // object size
  NSPAIRA(_ZTI6S852C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S852C2),83, //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  S852C1  : S852C2 {
  virtual  ~S852C1(); // _ZN6S852C1D1Ev
  virtual void  v1(); // _ZN6S852C12v1Ev
  virtual void  v2(); // _ZN6S852C12v2Ev
  virtual void  v3(); // _ZN6S852C12v3Ev
  virtual void  v4(); // _ZN6S852C12v4Ev
  virtual void  v5(); // _ZN6S852C12v5Ev
  virtual void  v6(); // _ZN6S852C12v6Ev
  virtual void  v7(); // _ZN6S852C12v7Ev
  virtual void  v8(); // _ZN6S852C12v8Ev
  virtual void  v9(); // _ZN6S852C12v9Ev
  virtual void  v10(); // _ZN6S852C13v10Ev
  virtual void  v11(); // _ZN6S852C13v11Ev
  S852C1(); // tgen
};
//SIG(1 S852C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14} BC6{ vd v15} vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37} vd v38 v39 v40 FC7{ m Fp Fi[2] FC8{ m}} FC9{ m FC10{ Fl[4]}} Fc} BC11{ vd v41} vd 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 FC12{ m FC10} FC13{ m Fp FC9 FC14{ m Fp FC15{ Fi[4]}} Fi Fc} Fc[3] Fp FC16{ BC17{ vd v85} BC18{ vd v86} vd v83 v84 Fp[2]} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11}


 S852C1 ::~S852C1(){ note_dtor("S852C1", this);}
void  S852C1 ::v1(){vfunc_called(this, "_ZN6S852C12v1Ev");}
void  S852C1 ::v2(){vfunc_called(this, "_ZN6S852C12v2Ev");}
void  S852C1 ::v3(){vfunc_called(this, "_ZN6S852C12v3Ev");}
void  S852C1 ::v4(){vfunc_called(this, "_ZN6S852C12v4Ev");}
void  S852C1 ::v5(){vfunc_called(this, "_ZN6S852C12v5Ev");}
void  S852C1 ::v6(){vfunc_called(this, "_ZN6S852C12v6Ev");}
void  S852C1 ::v7(){vfunc_called(this, "_ZN6S852C12v7Ev");}
void  S852C1 ::v8(){vfunc_called(this, "_ZN6S852C12v8Ev");}
void  S852C1 ::v9(){vfunc_called(this, "_ZN6S852C12v9Ev");}
void  S852C1 ::v10(){vfunc_called(this, "_ZN6S852C13v10Ev");}
void  S852C1 ::v11(){vfunc_called(this, "_ZN6S852C13v11Ev");}
S852C1 ::S852C1(){ note_ctor("S852C1", this);} // tgen

static void Test_S852C1()
{
  extern Class_Descriptor cd_S852C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,36)];
    init_test(&cd_S852C1, buf);
    S852C1 *dp, &lv = *(dp=new (buf) S852C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,140), "sizeof(S852C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S852C1)");
    check_base_class_offset(lv, (S852C5*)(S852C4*)(S852C3*)(S852C2*), 0, "S852C1");
    check_base_class_offset(lv, (S852C6*)(S852C4*)(S852C3*)(S852C2*), ABISELECT(8,4), "S852C1");
    check_base_class_offset(lv, (S852C4*)(S852C3*)(S852C2*), 0, "S852C1");
    check_base_class_offset(lv, (S852C3*)(S852C2*), 0, "S852C1");
    check_base_class_offset(lv, (S852C11*)(S852C2*), ABISELECT(80,44), "S852C1");
    check_base_class_offset(lv, (S852C2*), 0, "S852C1");
    test_class_info(&lv, &cd_S852C1);
    dp->~S852C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS852C1(Test_S852C1, "S852C1", ABISELECT(248,140));

#else // __cplusplus

extern void _ZN6S852C1C1Ev();
extern void _ZN6S852C1D1Ev();
Name_Map name_map_S852C1[] = {
  NSPAIR(_ZN6S852C1C1Ev),
  NSPAIR(_ZN6S852C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S852C5;
extern VTBL_ENTRY _ZTI6S852C5[];
extern  VTBL_ENTRY _ZTV6S852C5[];
extern Class_Descriptor cd_S852C6;
extern VTBL_ENTRY _ZTI6S852C6[];
extern  VTBL_ENTRY _ZTV6S852C6[];
extern Class_Descriptor cd_S852C4;
extern VTBL_ENTRY _ZTI6S852C4[];
extern  VTBL_ENTRY _ZTV6S852C4[];
extern Class_Descriptor cd_S852C3;
extern VTBL_ENTRY _ZTI6S852C3[];
extern  VTBL_ENTRY _ZTV6S852C3[];
extern Class_Descriptor cd_S852C11;
extern VTBL_ENTRY _ZTI7S852C11[];
extern  VTBL_ENTRY _ZTV7S852C11[];
extern Class_Descriptor cd_S852C2;
extern VTBL_ENTRY _ZTI6S852C2[];
extern  VTBL_ENTRY _ZTV6S852C2[];
static Base_Class bases_S852C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S852C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S852C6,    ABISELECT(8,4), //bcp->offset
    84, //bcp->virtual_function_table_offset
    2, //num_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_S852C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S852C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S852C11,    ABISELECT(80,44), //bcp->offset
    89, //bcp->virtual_function_table_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_S852C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S852C1[];
extern void _ZN6S852C1D1Ev();
extern void _ZN6S852C1D0Ev();
extern void _ZN6S852C53v12Ev();
extern void _ZN6S852C53v13Ev();
extern void _ZN6S852C53v14Ev();
extern void _ZN6S852C43v16Ev();
extern void _ZN6S852C43v17Ev();
extern void _ZN6S852C43v18Ev();
extern void _ZN6S852C43v19Ev();
extern void _ZN6S852C43v20Ev();
extern void _ZN6S852C43v21Ev();
extern void _ZN6S852C43v22Ev();
extern void _ZN6S852C43v23Ev();
extern void _ZN6S852C43v24Ev();
extern void _ZN6S852C43v25Ev();
extern void _ZN6S852C43v26Ev();
extern void _ZN6S852C43v27Ev();
extern void _ZN6S852C43v28Ev();
extern void _ZN6S852C43v29Ev();
extern void _ZN6S852C43v30Ev();
extern void _ZN6S852C43v31Ev();
extern void _ZN6S852C43v32Ev();
extern void _ZN6S852C43v33Ev();
extern void _ZN6S852C43v34Ev();
extern void _ZN6S852C43v35Ev();
extern void _ZN6S852C43v36Ev();
extern void _ZN6S852C43v37Ev();
extern void _ZN6S852C33v38Ev();
extern void _ZN6S852C33v39Ev();
extern void _ZN6S852C33v40Ev();
extern void _ZN6S852C23v42Ev();
extern void _ZN6S852C23v43Ev();
extern void _ZN6S852C23v44Ev();
extern void _ZN6S852C23v45Ev();
extern void _ZN6S852C23v46Ev();
extern void _ZN6S852C23v47Ev();
extern void _ZN6S852C23v48Ev();
extern void _ZN6S852C23v49Ev();
extern void _ZN6S852C23v50Ev();
extern void _ZN6S852C23v51Ev();
extern void _ZN6S852C23v52Ev();
extern void _ZN6S852C23v53Ev();
extern void _ZN6S852C23v54Ev();
extern void _ZN6S852C23v55Ev();
extern void _ZN6S852C23v56Ev();
extern void _ZN6S852C23v57Ev();
extern void _ZN6S852C23v58Ev();
extern void _ZN6S852C23v59Ev();
extern void _ZN6S852C23v60Ev();
extern void _ZN6S852C23v61Ev();
extern void _ZN6S852C23v62Ev();
extern void _ZN6S852C23v63Ev();
extern void _ZN6S852C23v64Ev();
extern void _ZN6S852C23v65Ev();
extern void _ZN6S852C23v66Ev();
extern void _ZN6S852C23v67Ev();
extern void _ZN6S852C23v68Ev();
extern void _ZN6S852C23v69Ev();
extern void _ZN6S852C23v70Ev();
extern void _ZN6S852C23v71Ev();
extern void _ZN6S852C23v72Ev();
extern void _ZN6S852C23v73Ev();
extern void _ZN6S852C23v74Ev();
extern void _ZN6S852C23v75Ev();
extern void _ZN6S852C23v76Ev();
extern void _ZN6S852C23v77Ev();
extern void _ZN6S852C23v78Ev();
extern void _ZN6S852C23v79Ev();
extern void _ZN6S852C23v80Ev();
extern void _ZN6S852C23v81Ev();
extern void _ZN6S852C23v82Ev();
extern void _ZN6S852C12v1Ev();
extern void _ZN6S852C12v2Ev();
extern void _ZN6S852C12v3Ev();
extern void _ZN6S852C12v4Ev();
extern void _ZN6S852C12v5Ev();
extern void _ZN6S852C12v6Ev();
extern void _ZN6S852C12v7Ev();
extern void _ZN6S852C12v8Ev();
extern void _ZN6S852C12v9Ev();
extern void _ZN6S852C13v10Ev();
extern void _ZN6S852C13v11Ev();
extern void ABISELECT(_ZThn8_N6S852C1D1Ev,_ZThn4_N6S852C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S852C1D0Ev,_ZThn4_N6S852C1D0Ev)();
extern void _ZN6S852C63v15Ev();
extern void ABISELECT(_ZThn80_N6S852C1D1Ev,_ZThn44_N6S852C1D1Ev)();
extern void ABISELECT(_ZThn80_N6S852C1D0Ev,_ZThn44_N6S852C1D0Ev)();
extern void _ZN7S852C113v41Ev();
static  VTBL_ENTRY vtc_S852C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S852C1[0]),
  (VTBL_ENTRY)&_ZN6S852C1D1Ev,
  (VTBL_ENTRY)&_ZN6S852C1D0Ev,
  (VTBL_ENTRY)&_ZN6S852C53v12Ev,
  (VTBL_ENTRY)&_ZN6S852C53v13Ev,
  (VTBL_ENTRY)&_ZN6S852C53v14Ev,
  (VTBL_ENTRY)&_ZN6S852C43v16Ev,
  (VTBL_ENTRY)&_ZN6S852C43v17Ev,
  (VTBL_ENTRY)&_ZN6S852C43v18Ev,
  (VTBL_ENTRY)&_ZN6S852C43v19Ev,
  (VTBL_ENTRY)&_ZN6S852C43v20Ev,
  (VTBL_ENTRY)&_ZN6S852C43v21Ev,
  (VTBL_ENTRY)&_ZN6S852C43v22Ev,
  (VTBL_ENTRY)&_ZN6S852C43v23Ev,
  (VTBL_ENTRY)&_ZN6S852C43v24Ev,
  (VTBL_ENTRY)&_ZN6S852C43v25Ev,
  (VTBL_ENTRY)&_ZN6S852C43v26Ev,
  (VTBL_ENTRY)&_ZN6S852C43v27Ev,
  (VTBL_ENTRY)&_ZN6S852C43v28Ev,
  (VTBL_ENTRY)&_ZN6S852C43v29Ev,
  (VTBL_ENTRY)&_ZN6S852C43v30Ev,
  (VTBL_ENTRY)&_ZN6S852C43v31Ev,
  (VTBL_ENTRY)&_ZN6S852C43v32Ev,
  (VTBL_ENTRY)&_ZN6S852C43v33Ev,
  (VTBL_ENTRY)&_ZN6S852C43v34Ev,
  (VTBL_ENTRY)&_ZN6S852C43v35Ev,
  (VTBL_ENTRY)&_ZN6S852C43v36Ev,
  (VTBL_ENTRY)&_ZN6S852C43v37Ev,
  (VTBL_ENTRY)&_ZN6S852C33v38Ev,
  (VTBL_ENTRY)&_ZN6S852C33v39Ev,
  (VTBL_ENTRY)&_ZN6S852C33v40Ev,
  (VTBL_ENTRY)&_ZN6S852C23v42Ev,
  (VTBL_ENTRY)&_ZN6S852C23v43Ev,
  (VTBL_ENTRY)&_ZN6S852C23v44Ev,
  (VTBL_ENTRY)&_ZN6S852C23v45Ev,
  (VTBL_ENTRY)&_ZN6S852C23v46Ev,
  (VTBL_ENTRY)&_ZN6S852C23v47Ev,
  (VTBL_ENTRY)&_ZN6S852C23v48Ev,
  (VTBL_ENTRY)&_ZN6S852C23v49Ev,
  (VTBL_ENTRY)&_ZN6S852C23v50Ev,
  (VTBL_ENTRY)&_ZN6S852C23v51Ev,
  (VTBL_ENTRY)&_ZN6S852C23v52Ev,
  (VTBL_ENTRY)&_ZN6S852C23v53Ev,
  (VTBL_ENTRY)&_ZN6S852C23v54Ev,
  (VTBL_ENTRY)&_ZN6S852C23v55Ev,
  (VTBL_ENTRY)&_ZN6S852C23v56Ev,
  (VTBL_ENTRY)&_ZN6S852C23v57Ev,
  (VTBL_ENTRY)&_ZN6S852C23v58Ev,
  (VTBL_ENTRY)&_ZN6S852C23v59Ev,
  (VTBL_ENTRY)&_ZN6S852C23v60Ev,
  (VTBL_ENTRY)&_ZN6S852C23v61Ev,
  (VTBL_ENTRY)&_ZN6S852C23v62Ev,
  (VTBL_ENTRY)&_ZN6S852C23v63Ev,
  (VTBL_ENTRY)&_ZN6S852C23v64Ev,
  (VTBL_ENTRY)&_ZN6S852C23v65Ev,
  (VTBL_ENTRY)&_ZN6S852C23v66Ev,
  (VTBL_ENTRY)&_ZN6S852C23v67Ev,
  (VTBL_ENTRY)&_ZN6S852C23v68Ev,
  (VTBL_ENTRY)&_ZN6S852C23v69Ev,
  (VTBL_ENTRY)&_ZN6S852C23v70Ev,
  (VTBL_ENTRY)&_ZN6S852C23v71Ev,
  (VTBL_ENTRY)&_ZN6S852C23v72Ev,
  (VTBL_ENTRY)&_ZN6S852C23v73Ev,
  (VTBL_ENTRY)&_ZN6S852C23v74Ev,
  (VTBL_ENTRY)&_ZN6S852C23v75Ev,
  (VTBL_ENTRY)&_ZN6S852C23v76Ev,
  (VTBL_ENTRY)&_ZN6S852C23v77Ev,
  (VTBL_ENTRY)&_ZN6S852C23v78Ev,
  (VTBL_ENTRY)&_ZN6S852C23v79Ev,
  (VTBL_ENTRY)&_ZN6S852C23v80Ev,
  (VTBL_ENTRY)&_ZN6S852C23v81Ev,
  (VTBL_ENTRY)&_ZN6S852C23v82Ev,
  (VTBL_ENTRY)&_ZN6S852C12v1Ev,
  (VTBL_ENTRY)&_ZN6S852C12v2Ev,
  (VTBL_ENTRY)&_ZN6S852C12v3Ev,
  (VTBL_ENTRY)&_ZN6S852C12v4Ev,
  (VTBL_ENTRY)&_ZN6S852C12v5Ev,
  (VTBL_ENTRY)&_ZN6S852C12v6Ev,
  (VTBL_ENTRY)&_ZN6S852C12v7Ev,
  (VTBL_ENTRY)&_ZN6S852C12v8Ev,
  (VTBL_ENTRY)&_ZN6S852C12v9Ev,
  (VTBL_ENTRY)&_ZN6S852C13v10Ev,
  (VTBL_ENTRY)&_ZN6S852C13v11Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S852C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S852C1D1Ev,_ZThn4_N6S852C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S852C1D0Ev,_ZThn4_N6S852C1D0Ev),
  (VTBL_ENTRY)&_ZN6S852C63v15Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI6S852C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S852C1D1Ev,_ZThn44_N6S852C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S852C1D0Ev,_ZThn44_N6S852C1D0Ev),
  (VTBL_ENTRY)&_ZN7S852C113v41Ev,
};
extern VTBL_ENTRY _ZTI6S852C1[];
extern  VTBL_ENTRY _ZTV6S852C1[];
Class_Descriptor cd_S852C1 = {  "S852C1", // class name
  bases_S852C1, 6,
  &(vtc_S852C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,140), // object size
  NSPAIRA(_ZTI6S852C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S852C1),94, //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  S851C5  {
  virtual  ~S851C5(); // _ZN6S851C5D1Ev
  virtual void  v12(); // _ZN6S851C53v12Ev
  virtual void  v13(); // _ZN6S851C53v13Ev
  virtual void  v14(); // _ZN6S851C53v14Ev
  S851C5(); // tgen
};
//SIG(-1 S851C5) C1{ vd v1 v2 v3}


 S851C5 ::~S851C5(){ note_dtor("S851C5", this);}
void  S851C5 ::v12(){vfunc_called(this, "_ZN6S851C53v12Ev");}
void  S851C5 ::v13(){vfunc_called(this, "_ZN6S851C53v13Ev");}
void  S851C5 ::v14(){vfunc_called(this, "_ZN6S851C53v14Ev");}
S851C5 ::S851C5(){ note_ctor("S851C5", this);} // tgen

static void Test_S851C5()
{
  extern Class_Descriptor cd_S851C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S851C5, buf);
    S851C5 *dp, &lv = *(dp=new (buf) S851C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S851C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S851C5)");
    test_class_info(&lv, &cd_S851C5);
    dp->~S851C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS851C5(Test_S851C5, "S851C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S851C5C1Ev();
extern void _ZN6S851C5D1Ev();
Name_Map name_map_S851C5[] = {
  NSPAIR(_ZN6S851C5C1Ev),
  NSPAIR(_ZN6S851C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S851C5[];
extern void _ZN6S851C5D1Ev();
extern void _ZN6S851C5D0Ev();
extern void _ZN6S851C53v12Ev();
extern void _ZN6S851C53v13Ev();
extern void _ZN6S851C53v14Ev();
static  VTBL_ENTRY vtc_S851C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S851C5[0]),
  (VTBL_ENTRY)&_ZN6S851C5D1Ev,
  (VTBL_ENTRY)&_ZN6S851C5D0Ev,
  (VTBL_ENTRY)&_ZN6S851C53v12Ev,
  (VTBL_ENTRY)&_ZN6S851C53v13Ev,
  (VTBL_ENTRY)&_ZN6S851C53v14Ev,
};
extern VTBL_ENTRY _ZTI6S851C5[];
extern  VTBL_ENTRY _ZTV6S851C5[];
Class_Descriptor cd_S851C5 = {  "S851C5", // class name
  0,0,//no base classes
  &(vtc_S851C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S851C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S851C5),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  S851C6  {
  virtual  ~S851C6(); // _ZN6S851C6D1Ev
  virtual void  v15(); // _ZN6S851C63v15Ev
  S851C6(); // tgen
};
//SIG(-1 S851C6) C1{ vd v1}


 S851C6 ::~S851C6(){ note_dtor("S851C6", this);}
void  S851C6 ::v15(){vfunc_called(this, "_ZN6S851C63v15Ev");}
S851C6 ::S851C6(){ note_ctor("S851C6", this);} // tgen

static void Test_S851C6()
{
  extern Class_Descriptor cd_S851C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S851C6, buf);
    S851C6 *dp, &lv = *(dp=new (buf) S851C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S851C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S851C6)");
    test_class_info(&lv, &cd_S851C6);
    dp->~S851C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS851C6(Test_S851C6, "S851C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S851C6C1Ev();
extern void _ZN6S851C6D1Ev();
Name_Map name_map_S851C6[] = {
  NSPAIR(_ZN6S851C6C1Ev),
  NSPAIR(_ZN6S851C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S851C6[];
extern void _ZN6S851C6D1Ev();
extern void _ZN6S851C6D0Ev();
extern void _ZN6S851C63v15Ev();
static  VTBL_ENTRY vtc_S851C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S851C6[0]),
  (VTBL_ENTRY)&_ZN6S851C6D1Ev,
  (VTBL_ENTRY)&_ZN6S851C6D0Ev,
  (VTBL_ENTRY)&_ZN6S851C63v15Ev,
};
extern VTBL_ENTRY _ZTI6S851C6[];
extern  VTBL_ENTRY _ZTV6S851C6[];
Class_Descriptor cd_S851C6 = {  "S851C6", // class name
  0,0,//no base classes
  &(vtc_S851C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S851C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S851C6),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  S851C4  : S851C5 , S851C6 {
  virtual  ~S851C4(); // _ZN6S851C4D1Ev
  virtual void  v16(); // _ZN6S851C43v16Ev
  virtual void  v17(); // _ZN6S851C43v17Ev
  virtual void  v18(); // _ZN6S851C43v18Ev
  virtual void  v19(); // _ZN6S851C43v19Ev
  virtual void  v20(); // _ZN6S851C43v20Ev
  virtual void  v21(); // _ZN6S851C43v21Ev
  virtual void  v22(); // _ZN6S851C43v22Ev
  virtual void  v23(); // _ZN6S851C43v23Ev
  virtual void  v24(); // _ZN6S851C43v24Ev
  virtual void  v25(); // _ZN6S851C43v25Ev
  virtual void  v26(); // _ZN6S851C43v26Ev
  virtual void  v27(); // _ZN6S851C43v27Ev
  virtual void  v28(); // _ZN6S851C43v28Ev
  virtual void  v29(); // _ZN6S851C43v29Ev
  virtual void  v30(); // _ZN6S851C43v30Ev
  virtual void  v31(); // _ZN6S851C43v31Ev
  virtual void  v32(); // _ZN6S851C43v32Ev
  virtual void  v33(); // _ZN6S851C43v33Ev
  virtual void  v34(); // _ZN6S851C43v34Ev
  virtual void  v35(); // _ZN6S851C43v35Ev
  virtual void  v36(); // _ZN6S851C43v36Ev
  virtual void  v37(); // _ZN6S851C43v37Ev
  S851C4(); // tgen
};
//SIG(-1 S851C4) C1{ BC2{ vd v23 v24 v25} BC3{ vd v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S851C4 ::~S851C4(){ note_dtor("S851C4", this);}
void  S851C4 ::v16(){vfunc_called(this, "_ZN6S851C43v16Ev");}
void  S851C4 ::v17(){vfunc_called(this, "_ZN6S851C43v17Ev");}
void  S851C4 ::v18(){vfunc_called(this, "_ZN6S851C43v18Ev");}
void  S851C4 ::v19(){vfunc_called(this, "_ZN6S851C43v19Ev");}
void  S851C4 ::v20(){vfunc_called(this, "_ZN6S851C43v20Ev");}
void  S851C4 ::v21(){vfunc_called(this, "_ZN6S851C43v21Ev");}
void  S851C4 ::v22(){vfunc_called(this, "_ZN6S851C43v22Ev");}
void  S851C4 ::v23(){vfunc_called(this, "_ZN6S851C43v23Ev");}
void  S851C4 ::v24(){vfunc_called(this, "_ZN6S851C43v24Ev");}
void  S851C4 ::v25(){vfunc_called(this, "_ZN6S851C43v25Ev");}
void  S851C4 ::v26(){vfunc_called(this, "_ZN6S851C43v26Ev");}
void  S851C4 ::v27(){vfunc_called(this, "_ZN6S851C43v27Ev");}
void  S851C4 ::v28(){vfunc_called(this, "_ZN6S851C43v28Ev");}
void  S851C4 ::v29(){vfunc_called(this, "_ZN6S851C43v29Ev");}
void  S851C4 ::v30(){vfunc_called(this, "_ZN6S851C43v30Ev");}
void  S851C4 ::v31(){vfunc_called(this, "_ZN6S851C43v31Ev");}
void  S851C4 ::v32(){vfunc_called(this, "_ZN6S851C43v32Ev");}
void  S851C4 ::v33(){vfunc_called(this, "_ZN6S851C43v33Ev");}
void  S851C4 ::v34(){vfunc_called(this, "_ZN6S851C43v34Ev");}
void  S851C4 ::v35(){vfunc_called(this, "_ZN6S851C43v35Ev");}
void  S851C4 ::v36(){vfunc_called(this, "_ZN6S851C43v36Ev");}
void  S851C4 ::v37(){vfunc_called(this, "_ZN6S851C43v37Ev");}
S851C4 ::S851C4(){ note_ctor("S851C4", this);} // tgen

static void Test_S851C4()
{
  extern Class_Descriptor cd_S851C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S851C4, buf);
    S851C4 *dp, &lv = *(dp=new (buf) S851C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S851C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S851C4)");
    check_base_class_offset(lv, (S851C5*), 0, "S851C4");
    check_base_class_offset(lv, (S851C6*), ABISELECT(8,4), "S851C4");
    test_class_info(&lv, &cd_S851C4);
    dp->~S851C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS851C4(Test_S851C4, "S851C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S851C4C1Ev();
extern void _ZN6S851C4D1Ev();
Name_Map name_map_S851C4[] = {
  NSPAIR(_ZN6S851C4C1Ev),
  NSPAIR(_ZN6S851C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S851C5;
extern VTBL_ENTRY _ZTI6S851C5[];
extern  VTBL_ENTRY _ZTV6S851C5[];
extern Class_Descriptor cd_S851C6;
extern VTBL_ENTRY _ZTI6S851C6[];
extern  VTBL_ENTRY _ZTV6S851C6[];
static Base_Class bases_S851C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S851C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S851C6,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S851C4[];
extern void _ZN6S851C4D1Ev();
extern void _ZN6S851C4D0Ev();
extern void _ZN6S851C53v12Ev();
extern void _ZN6S851C53v13Ev();
extern void _ZN6S851C53v14Ev();
extern void _ZN6S851C43v16Ev();
extern void _ZN6S851C43v17Ev();
extern void _ZN6S851C43v18Ev();
extern void _ZN6S851C43v19Ev();
extern void _ZN6S851C43v20Ev();
extern void _ZN6S851C43v21Ev();
extern void _ZN6S851C43v22Ev();
extern void _ZN6S851C43v23Ev();
extern void _ZN6S851C43v24Ev();
extern void _ZN6S851C43v25Ev();
extern void _ZN6S851C43v26Ev();
extern void _ZN6S851C43v27Ev();
extern void _ZN6S851C43v28Ev();
extern void _ZN6S851C43v29Ev();
extern void _ZN6S851C43v30Ev();
extern void _ZN6S851C43v31Ev();
extern void _ZN6S851C43v32Ev();
extern void _ZN6S851C43v33Ev();
extern void _ZN6S851C43v34Ev();
extern void _ZN6S851C43v35Ev();
extern void _ZN6S851C43v36Ev();
extern void _ZN6S851C43v37Ev();
extern void ABISELECT(_ZThn8_N6S851C4D1Ev,_ZThn4_N6S851C4D1Ev)();
extern void ABISELECT(_ZThn8_N6S851C4D0Ev,_ZThn4_N6S851C4D0Ev)();
extern void _ZN6S851C63v15Ev();
static  VTBL_ENTRY vtc_S851C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S851C4[0]),
  (VTBL_ENTRY)&_ZN6S851C4D1Ev,
  (VTBL_ENTRY)&_ZN6S851C4D0Ev,
  (VTBL_ENTRY)&_ZN6S851C53v12Ev,
  (VTBL_ENTRY)&_ZN6S851C53v13Ev,
  (VTBL_ENTRY)&_ZN6S851C53v14Ev,
  (VTBL_ENTRY)&_ZN6S851C43v16Ev,
  (VTBL_ENTRY)&_ZN6S851C43v17Ev,
  (VTBL_ENTRY)&_ZN6S851C43v18Ev,
  (VTBL_ENTRY)&_ZN6S851C43v19Ev,
  (VTBL_ENTRY)&_ZN6S851C43v20Ev,
  (VTBL_ENTRY)&_ZN6S851C43v21Ev,
  (VTBL_ENTRY)&_ZN6S851C43v22Ev,
  (VTBL_ENTRY)&_ZN6S851C43v23Ev,
  (VTBL_ENTRY)&_ZN6S851C43v24Ev,
  (VTBL_ENTRY)&_ZN6S851C43v25Ev,
  (VTBL_ENTRY)&_ZN6S851C43v26Ev,
  (VTBL_ENTRY)&_ZN6S851C43v27Ev,
  (VTBL_ENTRY)&_ZN6S851C43v28Ev,
  (VTBL_ENTRY)&_ZN6S851C43v29Ev,
  (VTBL_ENTRY)&_ZN6S851C43v30Ev,
  (VTBL_ENTRY)&_ZN6S851C43v31Ev,
  (VTBL_ENTRY)&_ZN6S851C43v32Ev,
  (VTBL_ENTRY)&_ZN6S851C43v33Ev,
  (VTBL_ENTRY)&_ZN6S851C43v34Ev,
  (VTBL_ENTRY)&_ZN6S851C43v35Ev,
  (VTBL_ENTRY)&_ZN6S851C43v36Ev,
  (VTBL_ENTRY)&_ZN6S851C43v37Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S851C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S851C4D1Ev,_ZThn4_N6S851C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S851C4D0Ev,_ZThn4_N6S851C4D0Ev),
  (VTBL_ENTRY)&_ZN6S851C63v15Ev,
};
extern VTBL_ENTRY _ZTI6S851C4[];
extern  VTBL_ENTRY _ZTV6S851C4[];
Class_Descriptor cd_S851C4 = {  "S851C4", // class name
  bases_S851C4, 2,
  &(vtc_S851C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S851C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S851C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S851C3  : S851C4 {
  ::S857C7_nt s851c3f0;
  ::S857C9_nt s851c3f1;
  char s851c3f2;
  virtual  ~S851C3(); // _ZN6S851C3D1Ev
  virtual void  v38(); // _ZN6S851C33v38Ev
  virtual void  v39(); // _ZN6S851C33v39Ev
  virtual void  v40(); // _ZN6S851C33v40Ev
  S851C3(); // tgen
};
//SIG(-1 S851C3) C1{ BC2{ BC3{ vd v4 v5 v6} BC4{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ FL[4]}} Fc}


 S851C3 ::~S851C3(){ note_dtor("S851C3", this);}
void  S851C3 ::v38(){vfunc_called(this, "_ZN6S851C33v38Ev");}
void  S851C3 ::v39(){vfunc_called(this, "_ZN6S851C33v39Ev");}
void  S851C3 ::v40(){vfunc_called(this, "_ZN6S851C33v40Ev");}
S851C3 ::S851C3(){ note_ctor("S851C3", this);} // tgen

static void Test_S851C3()
{
  extern Class_Descriptor cd_S851C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S851C3, buf);
    S851C3 *dp, &lv = *(dp=new (buf) S851C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S851C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S851C3)");
    check_base_class_offset(lv, (S851C5*)(S851C4*), 0, "S851C3");
    check_base_class_offset(lv, (S851C6*)(S851C4*), ABISELECT(8,4), "S851C3");
    check_base_class_offset(lv, (S851C4*), 0, "S851C3");
    check_field_offset(lv, s851c3f0, ABISELECT(16,8), "S851C3.s851c3f0");
    check_field_offset(lv, s851c3f1, ABISELECT(40,24), "S851C3.s851c3f1");
    check_field_offset(lv, s851c3f2, ABISELECT(72,56), "S851C3.s851c3f2");
    test_class_info(&lv, &cd_S851C3);
    dp->~S851C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS851C3(Test_S851C3, "S851C3", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN6S851C3C1Ev();
extern void _ZN6S851C3D1Ev();
Name_Map name_map_S851C3[] = {
  NSPAIR(_ZN6S851C3C1Ev),
  NSPAIR(_ZN6S851C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S851C5;
extern VTBL_ENTRY _ZTI6S851C5[];
extern  VTBL_ENTRY _ZTV6S851C5[];
extern Class_Descriptor cd_S851C6;
extern VTBL_ENTRY _ZTI6S851C6[];
extern  VTBL_ENTRY _ZTV6S851C6[];
extern Class_Descriptor cd_S851C4;
extern VTBL_ENTRY _ZTI6S851C4[];
extern  VTBL_ENTRY _ZTV6S851C4[];
static Base_Class bases_S851C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S851C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S851C6,    ABISELECT(8,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S851C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S851C3[];
extern void _ZN6S851C3D1Ev();
extern void _ZN6S851C3D0Ev();
extern void _ZN6S851C53v12Ev();
extern void _ZN6S851C53v13Ev();
extern void _ZN6S851C53v14Ev();
extern void _ZN6S851C43v16Ev();
extern void _ZN6S851C43v17Ev();
extern void _ZN6S851C43v18Ev();
extern void _ZN6S851C43v19Ev();
extern void _ZN6S851C43v20Ev();
extern void _ZN6S851C43v21Ev();
extern void _ZN6S851C43v22Ev();
extern void _ZN6S851C43v23Ev();
extern void _ZN6S851C43v24Ev();
extern void _ZN6S851C43v25Ev();
extern void _ZN6S851C43v26Ev();
extern void _ZN6S851C43v27Ev();
extern void _ZN6S851C43v28Ev();
extern void _ZN6S851C43v29Ev();
extern void _ZN6S851C43v30Ev();
extern void _ZN6S851C43v31Ev();
extern void _ZN6S851C43v32Ev();
extern void _ZN6S851C43v33Ev();
extern void _ZN6S851C43v34Ev();
extern void _ZN6S851C43v35Ev();
extern void _ZN6S851C43v36Ev();
extern void _ZN6S851C43v37Ev();
extern void _ZN6S851C33v38Ev();
extern void _ZN6S851C33v39Ev();
extern void _ZN6S851C33v40Ev();
extern void ABISELECT(_ZThn8_N6S851C3D1Ev,_ZThn4_N6S851C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S851C3D0Ev,_ZThn4_N6S851C3D0Ev)();
extern void _ZN6S851C63v15Ev();
static  VTBL_ENTRY vtc_S851C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S851C3[0]),
  (VTBL_ENTRY)&_ZN6S851C3D1Ev,
  (VTBL_ENTRY)&_ZN6S851C3D0Ev,
  (VTBL_ENTRY)&_ZN6S851C53v12Ev,
  (VTBL_ENTRY)&_ZN6S851C53v13Ev,
  (VTBL_ENTRY)&_ZN6S851C53v14Ev,
  (VTBL_ENTRY)&_ZN6S851C43v16Ev,
  (VTBL_ENTRY)&_ZN6S851C43v17Ev,
  (VTBL_ENTRY)&_ZN6S851C43v18Ev,
  (VTBL_ENTRY)&_ZN6S851C43v19Ev,
  (VTBL_ENTRY)&_ZN6S851C43v20Ev,
  (VTBL_ENTRY)&_ZN6S851C43v21Ev,
  (VTBL_ENTRY)&_ZN6S851C43v22Ev,
  (VTBL_ENTRY)&_ZN6S851C43v23Ev,
  (VTBL_ENTRY)&_ZN6S851C43v24Ev,
  (VTBL_ENTRY)&_ZN6S851C43v25Ev,
  (VTBL_ENTRY)&_ZN6S851C43v26Ev,
  (VTBL_ENTRY)&_ZN6S851C43v27Ev,
  (VTBL_ENTRY)&_ZN6S851C43v28Ev,
  (VTBL_ENTRY)&_ZN6S851C43v29Ev,
  (VTBL_ENTRY)&_ZN6S851C43v30Ev,
  (VTBL_ENTRY)&_ZN6S851C43v31Ev,
  (VTBL_ENTRY)&_ZN6S851C43v32Ev,
  (VTBL_ENTRY)&_ZN6S851C43v33Ev,
  (VTBL_ENTRY)&_ZN6S851C43v34Ev,
  (VTBL_ENTRY)&_ZN6S851C43v35Ev,
  (VTBL_ENTRY)&_ZN6S851C43v36Ev,
  (VTBL_ENTRY)&_ZN6S851C43v37Ev,
  (VTBL_ENTRY)&_ZN6S851C33v38Ev,
  (VTBL_ENTRY)&_ZN6S851C33v39Ev,
  (VTBL_ENTRY)&_ZN6S851C33v40Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S851C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S851C3D1Ev,_ZThn4_N6S851C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S851C3D0Ev,_ZThn4_N6S851C3D0Ev),
  (VTBL_ENTRY)&_ZN6S851C63v15Ev,
};
extern VTBL_ENTRY _ZTI6S851C3[];
extern  VTBL_ENTRY _ZTV6S851C3[];
Class_Descriptor cd_S851C3 = {  "S851C3", // class name
  bases_S851C3, 3,
  &(vtc_S851C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI6S851C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S851C3),37, //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  S851C11  {
  virtual  ~S851C11(); // _ZN7S851C11D1Ev
  virtual void  v41(); // _ZN7S851C113v41Ev
  S851C11(); // tgen
};
//SIG(-1 S851C11) C1{ vd v1}


 S851C11 ::~S851C11(){ note_dtor("S851C11", this);}
void  S851C11 ::v41(){vfunc_called(this, "_ZN7S851C113v41Ev");}
S851C11 ::S851C11(){ note_ctor("S851C11", this);} // tgen

static void Test_S851C11()
{
  extern Class_Descriptor cd_S851C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S851C11, buf);
    S851C11 *dp, &lv = *(dp=new (buf) S851C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S851C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S851C11)");
    test_class_info(&lv, &cd_S851C11);
    dp->~S851C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS851C11(Test_S851C11, "S851C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S851C11C1Ev();
extern void _ZN7S851C11D1Ev();
Name_Map name_map_S851C11[] = {
  NSPAIR(_ZN7S851C11C1Ev),
  NSPAIR(_ZN7S851C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S851C11[];
extern void _ZN7S851C11D1Ev();
extern void _ZN7S851C11D0Ev();
extern void _ZN7S851C113v41Ev();
static  VTBL_ENTRY vtc_S851C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S851C11[0]),
  (VTBL_ENTRY)&_ZN7S851C11D1Ev,
  (VTBL_ENTRY)&_ZN7S851C11D0Ev,
  (VTBL_ENTRY)&_ZN7S851C113v41Ev,
};
extern VTBL_ENTRY _ZTI7S851C11[];
extern  VTBL_ENTRY _ZTV7S851C11[];
Class_Descriptor cd_S851C11 = {  "S851C11", // class name
  0,0,//no base classes
  &(vtc_S851C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S851C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S851C11),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  S851C2  : S851C3 , S851C11 {
  ::S853C12 s851c2f0;
  ::S857C13_nt s851c2f1;
  char s851c2f2[2];
  void *s851c2f3;
  ::S857C16 s851c2f4;
  void *s851c2f5;
  virtual  ~S851C2(); // _ZN6S851C2D1Ev
  virtual void  v42(); // _ZN6S851C23v42Ev
  virtual void  v43(); // _ZN6S851C23v43Ev
  virtual void  v44(); // _ZN6S851C23v44Ev
  virtual void  v45(); // _ZN6S851C23v45Ev
  virtual void  v46(); // _ZN6S851C23v46Ev
  virtual void  v47(); // _ZN6S851C23v47Ev
  virtual void  v48(); // _ZN6S851C23v48Ev
  virtual void  v49(); // _ZN6S851C23v49Ev
  virtual void  v50(); // _ZN6S851C23v50Ev
  virtual void  v51(); // _ZN6S851C23v51Ev
  virtual void  v52(); // _ZN6S851C23v52Ev
  virtual void  v53(); // _ZN6S851C23v53Ev
  virtual void  v54(); // _ZN6S851C23v54Ev
  virtual void  v55(); // _ZN6S851C23v55Ev
  virtual void  v56(); // _ZN6S851C23v56Ev
  virtual void  v57(); // _ZN6S851C23v57Ev
  virtual void  v58(); // _ZN6S851C23v58Ev
  virtual void  v59(); // _ZN6S851C23v59Ev
  virtual void  v60(); // _ZN6S851C23v60Ev
  virtual void  v61(); // _ZN6S851C23v61Ev
  virtual void  v62(); // _ZN6S851C23v62Ev
  virtual void  v63(); // _ZN6S851C23v63Ev
  virtual void  v64(); // _ZN6S851C23v64Ev
  virtual void  v65(); // _ZN6S851C23v65Ev
  virtual void  v66(); // _ZN6S851C23v66Ev
  virtual void  v67(); // _ZN6S851C23v67Ev
  virtual void  v68(); // _ZN6S851C23v68Ev
  virtual void  v69(); // _ZN6S851C23v69Ev
  virtual void  v70(); // _ZN6S851C23v70Ev
  virtual void  v71(); // _ZN6S851C23v71Ev
  virtual void  v72(); // _ZN6S851C23v72Ev
  virtual void  v73(); // _ZN6S851C23v73Ev
  virtual void  v74(); // _ZN6S851C23v74Ev
  virtual void  v75(); // _ZN6S851C23v75Ev
  virtual void  v76(); // _ZN6S851C23v76Ev
  virtual void  v77(); // _ZN6S851C23v77Ev
  virtual void  v78(); // _ZN6S851C23v78Ev
  virtual void  v79(); // _ZN6S851C23v79Ev
  virtual void  v80(); // _ZN6S851C23v80Ev
  virtual void  v81(); // _ZN6S851C23v81Ev
  virtual void  v82(); // _ZN6S851C23v82Ev
  S851C2(); // tgen
};
//SIG(-1 S851C2) C1{ BC2{ BC3{ BC4{ vd v42 v43 v44} BC5{ vd v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67} vd v68 v69 v70 FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ FL[4]}} Fc} BC10{ vd v71} 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 FC11{ m FC9} FC12{ m Fp FC8 FC13{ m Fp FC14{ Fi[4]}} Fi Fc} Fc[2] Fp FC15{ BC16{ vd v74} BC17{ vd v75} vd v72 v73 Fp[2]} Fp}


 S851C2 ::~S851C2(){ note_dtor("S851C2", this);}
void  S851C2 ::v42(){vfunc_called(this, "_ZN6S851C23v42Ev");}
void  S851C2 ::v43(){vfunc_called(this, "_ZN6S851C23v43Ev");}
void  S851C2 ::v44(){vfunc_called(this, "_ZN6S851C23v44Ev");}
void  S851C2 ::v45(){vfunc_called(this, "_ZN6S851C23v45Ev");}
void  S851C2 ::v46(){vfunc_called(this, "_ZN6S851C23v46Ev");}
void  S851C2 ::v47(){vfunc_called(this, "_ZN6S851C23v47Ev");}
void  S851C2 ::v48(){vfunc_called(this, "_ZN6S851C23v48Ev");}
void  S851C2 ::v49(){vfunc_called(this, "_ZN6S851C23v49Ev");}
void  S851C2 ::v50(){vfunc_called(this, "_ZN6S851C23v50Ev");}
void  S851C2 ::v51(){vfunc_called(this, "_ZN6S851C23v51Ev");}
void  S851C2 ::v52(){vfunc_called(this, "_ZN6S851C23v52Ev");}
void  S851C2 ::v53(){vfunc_called(this, "_ZN6S851C23v53Ev");}
void  S851C2 ::v54(){vfunc_called(this, "_ZN6S851C23v54Ev");}
void  S851C2 ::v55(){vfunc_called(this, "_ZN6S851C23v55Ev");}
void  S851C2 ::v56(){vfunc_called(this, "_ZN6S851C23v56Ev");}
void  S851C2 ::v57(){vfunc_called(this, "_ZN6S851C23v57Ev");}
void  S851C2 ::v58(){vfunc_called(this, "_ZN6S851C23v58Ev");}
void  S851C2 ::v59(){vfunc_called(this, "_ZN6S851C23v59Ev");}
void  S851C2 ::v60(){vfunc_called(this, "_ZN6S851C23v60Ev");}
void  S851C2 ::v61(){vfunc_called(this, "_ZN6S851C23v61Ev");}
void  S851C2 ::v62(){vfunc_called(this, "_ZN6S851C23v62Ev");}
void  S851C2 ::v63(){vfunc_called(this, "_ZN6S851C23v63Ev");}
void  S851C2 ::v64(){vfunc_called(this, "_ZN6S851C23v64Ev");}
void  S851C2 ::v65(){vfunc_called(this, "_ZN6S851C23v65Ev");}
void  S851C2 ::v66(){vfunc_called(this, "_ZN6S851C23v66Ev");}
void  S851C2 ::v67(){vfunc_called(this, "_ZN6S851C23v67Ev");}
void  S851C2 ::v68(){vfunc_called(this, "_ZN6S851C23v68Ev");}
void  S851C2 ::v69(){vfunc_called(this, "_ZN6S851C23v69Ev");}
void  S851C2 ::v70(){vfunc_called(this, "_ZN6S851C23v70Ev");}
void  S851C2 ::v71(){vfunc_called(this, "_ZN6S851C23v71Ev");}
void  S851C2 ::v72(){vfunc_called(this, "_ZN6S851C23v72Ev");}
void  S851C2 ::v73(){vfunc_called(this, "_ZN6S851C23v73Ev");}
void  S851C2 ::v74(){vfunc_called(this, "_ZN6S851C23v74Ev");}
void  S851C2 ::v75(){vfunc_called(this, "_ZN6S851C23v75Ev");}
void  S851C2 ::v76(){vfunc_called(this, "_ZN6S851C23v76Ev");}
void  S851C2 ::v77(){vfunc_called(this, "_ZN6S851C23v77Ev");}
void  S851C2 ::v78(){vfunc_called(this, "_ZN6S851C23v78Ev");}
void  S851C2 ::v79(){vfunc_called(this, "_ZN6S851C23v79Ev");}
void  S851C2 ::v80(){vfunc_called(this, "_ZN6S851C23v80Ev");}
void  S851C2 ::v81(){vfunc_called(this, "_ZN6S851C23v81Ev");}
void  S851C2 ::v82(){vfunc_called(this, "_ZN6S851C23v82Ev");}
S851C2 ::S851C2(){ note_ctor("S851C2", this);} // tgen

static void Test_S851C2()
{
  extern Class_Descriptor cd_S851C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,48)];
    init_test(&cd_S851C2, buf);
    S851C2 *dp, &lv = *(dp=new (buf) S851C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,188), "sizeof(S851C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S851C2)");
    check_base_class_offset(lv, (S851C5*)(S851C4*)(S851C3*), 0, "S851C2");
    check_base_class_offset(lv, (S851C6*)(S851C4*)(S851C3*), ABISELECT(8,4), "S851C2");
    check_base_class_offset(lv, (S851C4*)(S851C3*), 0, "S851C2");
    check_base_class_offset(lv, (S851C3*), 0, "S851C2");
    check_base_class_offset(lv, (S851C11*), ABISELECT(80,60), "S851C2");
    check_field_offset(lv, s851c2f0, ABISELECT(88,64), "S851C2.s851c2f0");
    check_field_offset(lv, s851c2f1, ABISELECT(120,96), "S851C2.s851c2f1");
    check_field_offset(lv, s851c2f2, ABISELECT(192,160), "S851C2.s851c2f2");
    check_field_offset(lv, s851c2f3, ABISELECT(200,164), "S851C2.s851c2f3");
    check_field_offset(lv, s851c2f4, ABISELECT(208,168), "S851C2.s851c2f4");
    check_field_offset(lv, s851c2f5, ABISELECT(240,184), "S851C2.s851c2f5");
    test_class_info(&lv, &cd_S851C2);
    dp->~S851C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS851C2(Test_S851C2, "S851C2", ABISELECT(248,188));

#else // __cplusplus

extern void _ZN6S851C2C1Ev();
extern void _ZN6S851C2D1Ev();
Name_Map name_map_S851C2[] = {
  NSPAIR(_ZN6S851C2C1Ev),
  NSPAIR(_ZN6S851C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S851C5;
extern VTBL_ENTRY _ZTI6S851C5[];
extern  VTBL_ENTRY _ZTV6S851C5[];
extern Class_Descriptor cd_S851C6;
extern VTBL_ENTRY _ZTI6S851C6[];
extern  VTBL_ENTRY _ZTV6S851C6[];
extern Class_Descriptor cd_S851C4;
extern VTBL_ENTRY _ZTI6S851C4[];
extern  VTBL_ENTRY _ZTV6S851C4[];
extern Class_Descriptor cd_S851C3;
extern VTBL_ENTRY _ZTI6S851C3[];
extern  VTBL_ENTRY _ZTV6S851C3[];
extern Class_Descriptor cd_S851C11;
extern VTBL_ENTRY _ZTI7S851C11[];
extern  VTBL_ENTRY _ZTV7S851C11[];
static Base_Class bases_S851C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S851C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S851C6,    ABISELECT(8,4), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_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_S851C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S851C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S851C11,    ABISELECT(80,60), //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},
  {0}};
extern VTBL_ENTRY _ZTI6S851C2[];
extern void _ZN6S851C2D1Ev();
extern void _ZN6S851C2D0Ev();
extern void _ZN6S851C53v12Ev();
extern void _ZN6S851C53v13Ev();
extern void _ZN6S851C53v14Ev();
extern void _ZN6S851C43v16Ev();
extern void _ZN6S851C43v17Ev();
extern void _ZN6S851C43v18Ev();
extern void _ZN6S851C43v19Ev();
extern void _ZN6S851C43v20Ev();
extern void _ZN6S851C43v21Ev();
extern void _ZN6S851C43v22Ev();
extern void _ZN6S851C43v23Ev();
extern void _ZN6S851C43v24Ev();
extern void _ZN6S851C43v25Ev();
extern void _ZN6S851C43v26Ev();
extern void _ZN6S851C43v27Ev();
extern void _ZN6S851C43v28Ev();
extern void _ZN6S851C43v29Ev();
extern void _ZN6S851C43v30Ev();
extern void _ZN6S851C43v31Ev();
extern void _ZN6S851C43v32Ev();
extern void _ZN6S851C43v33Ev();
extern void _ZN6S851C43v34Ev();
extern void _ZN6S851C43v35Ev();
extern void _ZN6S851C43v36Ev();
extern void _ZN6S851C43v37Ev();
extern void _ZN6S851C33v38Ev();
extern void _ZN6S851C33v39Ev();
extern void _ZN6S851C33v40Ev();
extern void _ZN6S851C23v42Ev();
extern void _ZN6S851C23v43Ev();
extern void _ZN6S851C23v44Ev();
extern void _ZN6S851C23v45Ev();
extern void _ZN6S851C23v46Ev();
extern void _ZN6S851C23v47Ev();
extern void _ZN6S851C23v48Ev();
extern void _ZN6S851C23v49Ev();
extern void _ZN6S851C23v50Ev();
extern void _ZN6S851C23v51Ev();
extern void _ZN6S851C23v52Ev();
extern void _ZN6S851C23v53Ev();
extern void _ZN6S851C23v54Ev();
extern void _ZN6S851C23v55Ev();
extern void _ZN6S851C23v56Ev();
extern void _ZN6S851C23v57Ev();
extern void _ZN6S851C23v58Ev();
extern void _ZN6S851C23v59Ev();
extern void _ZN6S851C23v60Ev();
extern void _ZN6S851C23v61Ev();
extern void _ZN6S851C23v62Ev();
extern void _ZN6S851C23v63Ev();
extern void _ZN6S851C23v64Ev();
extern void _ZN6S851C23v65Ev();
extern void _ZN6S851C23v66Ev();
extern void _ZN6S851C23v67Ev();
extern void _ZN6S851C23v68Ev();
extern void _ZN6S851C23v69Ev();
extern void _ZN6S851C23v70Ev();
extern void _ZN6S851C23v71Ev();
extern void _ZN6S851C23v72Ev();
extern void _ZN6S851C23v73Ev();
extern void _ZN6S851C23v74Ev();
extern void _ZN6S851C23v75Ev();
extern void _ZN6S851C23v76Ev();
extern void _ZN6S851C23v77Ev();
extern void _ZN6S851C23v78Ev();
extern void _ZN6S851C23v79Ev();
extern void _ZN6S851C23v80Ev();
extern void _ZN6S851C23v81Ev();
extern void _ZN6S851C23v82Ev();
extern void ABISELECT(_ZThn8_N6S851C2D1Ev,_ZThn4_N6S851C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S851C2D0Ev,_ZThn4_N6S851C2D0Ev)();
extern void _ZN6S851C63v15Ev();
extern void ABISELECT(_ZThn80_N6S851C2D1Ev,_ZThn60_N6S851C2D1Ev)();
extern void ABISELECT(_ZThn80_N6S851C2D0Ev,_ZThn60_N6S851C2D0Ev)();
extern void _ZN7S851C113v41Ev();
static  VTBL_ENTRY vtc_S851C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S851C2[0]),
  (VTBL_ENTRY)&_ZN6S851C2D1Ev,
  (VTBL_ENTRY)&_ZN6S851C2D0Ev,
  (VTBL_ENTRY)&_ZN6S851C53v12Ev,
  (VTBL_ENTRY)&_ZN6S851C53v13Ev,
  (VTBL_ENTRY)&_ZN6S851C53v14Ev,
  (VTBL_ENTRY)&_ZN6S851C43v16Ev,
  (VTBL_ENTRY)&_ZN6S851C43v17Ev,
  (VTBL_ENTRY)&_ZN6S851C43v18Ev,
  (VTBL_ENTRY)&_ZN6S851C43v19Ev,
  (VTBL_ENTRY)&_ZN6S851C43v20Ev,
  (VTBL_ENTRY)&_ZN6S851C43v21Ev,
  (VTBL_ENTRY)&_ZN6S851C43v22Ev,
  (VTBL_ENTRY)&_ZN6S851C43v23Ev,
  (VTBL_ENTRY)&_ZN6S851C43v24Ev,
  (VTBL_ENTRY)&_ZN6S851C43v25Ev,
  (VTBL_ENTRY)&_ZN6S851C43v26Ev,
  (VTBL_ENTRY)&_ZN6S851C43v27Ev,
  (VTBL_ENTRY)&_ZN6S851C43v28Ev,
  (VTBL_ENTRY)&_ZN6S851C43v29Ev,
  (VTBL_ENTRY)&_ZN6S851C43v30Ev,
  (VTBL_ENTRY)&_ZN6S851C43v31Ev,
  (VTBL_ENTRY)&_ZN6S851C43v32Ev,
  (VTBL_ENTRY)&_ZN6S851C43v33Ev,
  (VTBL_ENTRY)&_ZN6S851C43v34Ev,
  (VTBL_ENTRY)&_ZN6S851C43v35Ev,
  (VTBL_ENTRY)&_ZN6S851C43v36Ev,
  (VTBL_ENTRY)&_ZN6S851C43v37Ev,
  (VTBL_ENTRY)&_ZN6S851C33v38Ev,
  (VTBL_ENTRY)&_ZN6S851C33v39Ev,
  (VTBL_ENTRY)&_ZN6S851C33v40Ev,
  (VTBL_ENTRY)&_ZN6S851C23v42Ev,
  (VTBL_ENTRY)&_ZN6S851C23v43Ev,
  (VTBL_ENTRY)&_ZN6S851C23v44Ev,
  (VTBL_ENTRY)&_ZN6S851C23v45Ev,
  (VTBL_ENTRY)&_ZN6S851C23v46Ev,
  (VTBL_ENTRY)&_ZN6S851C23v47Ev,
  (VTBL_ENTRY)&_ZN6S851C23v48Ev,
  (VTBL_ENTRY)&_ZN6S851C23v49Ev,
  (VTBL_ENTRY)&_ZN6S851C23v50Ev,
  (VTBL_ENTRY)&_ZN6S851C23v51Ev,
  (VTBL_ENTRY)&_ZN6S851C23v52Ev,
  (VTBL_ENTRY)&_ZN6S851C23v53Ev,
  (VTBL_ENTRY)&_ZN6S851C23v54Ev,
  (VTBL_ENTRY)&_ZN6S851C23v55Ev,
  (VTBL_ENTRY)&_ZN6S851C23v56Ev,
  (VTBL_ENTRY)&_ZN6S851C23v57Ev,
  (VTBL_ENTRY)&_ZN6S851C23v58Ev,
  (VTBL_ENTRY)&_ZN6S851C23v59Ev,
  (VTBL_ENTRY)&_ZN6S851C23v60Ev,
  (VTBL_ENTRY)&_ZN6S851C23v61Ev,
  (VTBL_ENTRY)&_ZN6S851C23v62Ev,
  (VTBL_ENTRY)&_ZN6S851C23v63Ev,
  (VTBL_ENTRY)&_ZN6S851C23v64Ev,
  (VTBL_ENTRY)&_ZN6S851C23v65Ev,
  (VTBL_ENTRY)&_ZN6S851C23v66Ev,
  (VTBL_ENTRY)&_ZN6S851C23v67Ev,
  (VTBL_ENTRY)&_ZN6S851C23v68Ev,
  (VTBL_ENTRY)&_ZN6S851C23v69Ev,
  (VTBL_ENTRY)&_ZN6S851C23v70Ev,
  (VTBL_ENTRY)&_ZN6S851C23v71Ev,
  (VTBL_ENTRY)&_ZN6S851C23v72Ev,
  (VTBL_ENTRY)&_ZN6S851C23v73Ev,
  (VTBL_ENTRY)&_ZN6S851C23v74Ev,
  (VTBL_ENTRY)&_ZN6S851C23v75Ev,
  (VTBL_ENTRY)&_ZN6S851C23v76Ev,
  (VTBL_ENTRY)&_ZN6S851C23v77Ev,
  (VTBL_ENTRY)&_ZN6S851C23v78Ev,
  (VTBL_ENTRY)&_ZN6S851C23v79Ev,
  (VTBL_ENTRY)&_ZN6S851C23v80Ev,
  (VTBL_ENTRY)&_ZN6S851C23v81Ev,
  (VTBL_ENTRY)&_ZN6S851C23v82Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S851C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S851C2D1Ev,_ZThn4_N6S851C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S851C2D0Ev,_ZThn4_N6S851C2D0Ev),
  (VTBL_ENTRY)&_ZN6S851C63v15Ev,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI6S851C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S851C2D1Ev,_ZThn60_N6S851C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S851C2D0Ev,_ZThn60_N6S851C2D0Ev),
  (VTBL_ENTRY)&_ZN7S851C113v41Ev,
};
extern VTBL_ENTRY _ZTI6S851C2[];
extern  VTBL_ENTRY _ZTV6S851C2[];
Class_Descriptor cd_S851C2 = {  "S851C2", // class name
  bases_S851C2, 5,
  &(vtc_S851C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,188), // object size
  NSPAIRA(_ZTI6S851C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S851C2),83, //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  S851C1  : S851C2 {
  virtual  ~S851C1(); // _ZN6S851C1D1Ev
  virtual void  v1(); // _ZN6S851C12v1Ev
  virtual void  v2(); // _ZN6S851C12v2Ev
  virtual void  v3(); // _ZN6S851C12v3Ev
  virtual void  v4(); // _ZN6S851C12v4Ev
  virtual void  v5(); // _ZN6S851C12v5Ev
  virtual void  v6(); // _ZN6S851C12v6Ev
  virtual void  v7(); // _ZN6S851C12v7Ev
  virtual void  v8(); // _ZN6S851C12v8Ev
  virtual void  v9(); // _ZN6S851C12v9Ev
  virtual void  v10(); // _ZN6S851C13v10Ev
  virtual void  v11(); // _ZN6S851C13v11Ev
  S851C1(); // tgen
};
//SIG(1 S851C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14} BC6{ vd v15} vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37} vd v38 v39 v40 FC7{ m Fp Fi[2] FC8{ m}} FC9{ m FC10{ FL[4]}} Fc} BC11{ vd v41} vd 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 FC12{ m FC10} FC13{ m Fp FC9 FC14{ m Fp FC15{ Fi[4]}} Fi Fc} Fc[2] Fp FC16{ BC17{ vd v85} BC18{ vd v86} vd v83 v84 Fp[2]} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11}


 S851C1 ::~S851C1(){ note_dtor("S851C1", this);}
void  S851C1 ::v1(){vfunc_called(this, "_ZN6S851C12v1Ev");}
void  S851C1 ::v2(){vfunc_called(this, "_ZN6S851C12v2Ev");}
void  S851C1 ::v3(){vfunc_called(this, "_ZN6S851C12v3Ev");}
void  S851C1 ::v4(){vfunc_called(this, "_ZN6S851C12v4Ev");}
void  S851C1 ::v5(){vfunc_called(this, "_ZN6S851C12v5Ev");}
void  S851C1 ::v6(){vfunc_called(this, "_ZN6S851C12v6Ev");}
void  S851C1 ::v7(){vfunc_called(this, "_ZN6S851C12v7Ev");}
void  S851C1 ::v8(){vfunc_called(this, "_ZN6S851C12v8Ev");}
void  S851C1 ::v9(){vfunc_called(this, "_ZN6S851C12v9Ev");}
void  S851C1 ::v10(){vfunc_called(this, "_ZN6S851C13v10Ev");}
void  S851C1 ::v11(){vfunc_called(this, "_ZN6S851C13v11Ev");}
S851C1 ::S851C1(){ note_ctor("S851C1", this);} // tgen

static void Test_S851C1()
{
  extern Class_Descriptor cd_S851C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,48)];
    init_test(&cd_S851C1, buf);
    S851C1 *dp, &lv = *(dp=new (buf) S851C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,188), "sizeof(S851C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S851C1)");
    check_base_class_offset(lv, (S851C5*)(S851C4*)(S851C3*)(S851C2*), 0, "S851C1");
    check_base_class_offset(lv, (S851C6*)(S851C4*)(S851C3*)(S851C2*), ABISELECT(8,4), "S851C1");
    check_base_class_offset(lv, (S851C4*)(S851C3*)(S851C2*), 0, "S851C1");
    check_base_class_offset(lv, (S851C3*)(S851C2*), 0, "S851C1");
    check_base_class_offset(lv, (S851C11*)(S851C2*), ABISELECT(80,60), "S851C1");
    check_base_class_offset(lv, (S851C2*), 0, "S851C1");
    test_class_info(&lv, &cd_S851C1);
    dp->~S851C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS851C1(Test_S851C1, "S851C1", ABISELECT(248,188));

#else // __cplusplus

extern void _ZN6S851C1C1Ev();
extern void _ZN6S851C1D1Ev();
Name_Map name_map_S851C1[] = {
  NSPAIR(_ZN6S851C1C1Ev),
  NSPAIR(_ZN6S851C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S851C5;
extern VTBL_ENTRY _ZTI6S851C5[];
extern  VTBL_ENTRY _ZTV6S851C5[];
extern Class_Descriptor cd_S851C6;
extern VTBL_ENTRY _ZTI6S851C6[];
extern  VTBL_ENTRY _ZTV6S851C6[];
extern Class_Descriptor cd_S851C4;
extern VTBL_ENTRY _ZTI6S851C4[];
extern  VTBL_ENTRY _ZTV6S851C4[];
extern Class_Descriptor cd_S851C3;
extern VTBL_ENTRY _ZTI6S851C3[];
extern  VTBL_ENTRY _ZTV6S851C3[];
extern Class_Descriptor cd_S851C11;
extern VTBL_ENTRY _ZTI7S851C11[];
extern  VTBL_ENTRY _ZTV7S851C11[];
extern Class_Descriptor cd_S851C2;
extern VTBL_ENTRY _ZTI6S851C2[];
extern  VTBL_ENTRY _ZTV6S851C2[];
static Base_Class bases_S851C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S851C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S851C6,    ABISELECT(8,4), //bcp->offset
    84, //bcp->virtual_function_table_offset
    2, //num_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_S851C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S851C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S851C11,    ABISELECT(80,60), //bcp->offset
    89, //bcp->virtual_function_table_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_S851C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S851C1[];
extern void _ZN6S851C1D1Ev();
extern void _ZN6S851C1D0Ev();
extern void _ZN6S851C53v12Ev();
extern void _ZN6S851C53v13Ev();
extern void _ZN6S851C53v14Ev();
extern void _ZN6S851C43v16Ev();
extern void _ZN6S851C43v17Ev();
extern void _ZN6S851C43v18Ev();
extern void _ZN6S851C43v19Ev();
extern void _ZN6S851C43v20Ev();
extern void _ZN6S851C43v21Ev();
extern void _ZN6S851C43v22Ev();
extern void _ZN6S851C43v23Ev();
extern void _ZN6S851C43v24Ev();
extern void _ZN6S851C43v25Ev();
extern void _ZN6S851C43v26Ev();
extern void _ZN6S851C43v27Ev();
extern void _ZN6S851C43v28Ev();
extern void _ZN6S851C43v29Ev();
extern void _ZN6S851C43v30Ev();
extern void _ZN6S851C43v31Ev();
extern void _ZN6S851C43v32Ev();
extern void _ZN6S851C43v33Ev();
extern void _ZN6S851C43v34Ev();
extern void _ZN6S851C43v35Ev();
extern void _ZN6S851C43v36Ev();
extern void _ZN6S851C43v37Ev();
extern void _ZN6S851C33v38Ev();
extern void _ZN6S851C33v39Ev();
extern void _ZN6S851C33v40Ev();
extern void _ZN6S851C23v42Ev();
extern void _ZN6S851C23v43Ev();
extern void _ZN6S851C23v44Ev();
extern void _ZN6S851C23v45Ev();
extern void _ZN6S851C23v46Ev();
extern void _ZN6S851C23v47Ev();
extern void _ZN6S851C23v48Ev();
extern void _ZN6S851C23v49Ev();
extern void _ZN6S851C23v50Ev();
extern void _ZN6S851C23v51Ev();
extern void _ZN6S851C23v52Ev();
extern void _ZN6S851C23v53Ev();
extern void _ZN6S851C23v54Ev();
extern void _ZN6S851C23v55Ev();
extern void _ZN6S851C23v56Ev();
extern void _ZN6S851C23v57Ev();
extern void _ZN6S851C23v58Ev();
extern void _ZN6S851C23v59Ev();
extern void _ZN6S851C23v60Ev();
extern void _ZN6S851C23v61Ev();
extern void _ZN6S851C23v62Ev();
extern void _ZN6S851C23v63Ev();
extern void _ZN6S851C23v64Ev();
extern void _ZN6S851C23v65Ev();
extern void _ZN6S851C23v66Ev();
extern void _ZN6S851C23v67Ev();
extern void _ZN6S851C23v68Ev();
extern void _ZN6S851C23v69Ev();
extern void _ZN6S851C23v70Ev();
extern void _ZN6S851C23v71Ev();
extern void _ZN6S851C23v72Ev();
extern void _ZN6S851C23v73Ev();
extern void _ZN6S851C23v74Ev();
extern void _ZN6S851C23v75Ev();
extern void _ZN6S851C23v76Ev();
extern void _ZN6S851C23v77Ev();
extern void _ZN6S851C23v78Ev();
extern void _ZN6S851C23v79Ev();
extern void _ZN6S851C23v80Ev();
extern void _ZN6S851C23v81Ev();
extern void _ZN6S851C23v82Ev();
extern void _ZN6S851C12v1Ev();
extern void _ZN6S851C12v2Ev();
extern void _ZN6S851C12v3Ev();
extern void _ZN6S851C12v4Ev();
extern void _ZN6S851C12v5Ev();
extern void _ZN6S851C12v6Ev();
extern void _ZN6S851C12v7Ev();
extern void _ZN6S851C12v8Ev();
extern void _ZN6S851C12v9Ev();
extern void _ZN6S851C13v10Ev();
extern void _ZN6S851C13v11Ev();
extern void ABISELECT(_ZThn8_N6S851C1D1Ev,_ZThn4_N6S851C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S851C1D0Ev,_ZThn4_N6S851C1D0Ev)();
extern void _ZN6S851C63v15Ev();
extern void ABISELECT(_ZThn80_N6S851C1D1Ev,_ZThn60_N6S851C1D1Ev)();
extern void ABISELECT(_ZThn80_N6S851C1D0Ev,_ZThn60_N6S851C1D0Ev)();
extern void _ZN7S851C113v41Ev();
static  VTBL_ENTRY vtc_S851C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S851C1[0]),
  (VTBL_ENTRY)&_ZN6S851C1D1Ev,
  (VTBL_ENTRY)&_ZN6S851C1D0Ev,
  (VTBL_ENTRY)&_ZN6S851C53v12Ev,
  (VTBL_ENTRY)&_ZN6S851C53v13Ev,
  (VTBL_ENTRY)&_ZN6S851C53v14Ev,
  (VTBL_ENTRY)&_ZN6S851C43v16Ev,
  (VTBL_ENTRY)&_ZN6S851C43v17Ev,
  (VTBL_ENTRY)&_ZN6S851C43v18Ev,
  (VTBL_ENTRY)&_ZN6S851C43v19Ev,
  (VTBL_ENTRY)&_ZN6S851C43v20Ev,
  (VTBL_ENTRY)&_ZN6S851C43v21Ev,
  (VTBL_ENTRY)&_ZN6S851C43v22Ev,
  (VTBL_ENTRY)&_ZN6S851C43v23Ev,
  (VTBL_ENTRY)&_ZN6S851C43v24Ev,
  (VTBL_ENTRY)&_ZN6S851C43v25Ev,
  (VTBL_ENTRY)&_ZN6S851C43v26Ev,
  (VTBL_ENTRY)&_ZN6S851C43v27Ev,
  (VTBL_ENTRY)&_ZN6S851C43v28Ev,
  (VTBL_ENTRY)&_ZN6S851C43v29Ev,
  (VTBL_ENTRY)&_ZN6S851C43v30Ev,
  (VTBL_ENTRY)&_ZN6S851C43v31Ev,
  (VTBL_ENTRY)&_ZN6S851C43v32Ev,
  (VTBL_ENTRY)&_ZN6S851C43v33Ev,
  (VTBL_ENTRY)&_ZN6S851C43v34Ev,
  (VTBL_ENTRY)&_ZN6S851C43v35Ev,
  (VTBL_ENTRY)&_ZN6S851C43v36Ev,
  (VTBL_ENTRY)&_ZN6S851C43v37Ev,
  (VTBL_ENTRY)&_ZN6S851C33v38Ev,
  (VTBL_ENTRY)&_ZN6S851C33v39Ev,
  (VTBL_ENTRY)&_ZN6S851C33v40Ev,
  (VTBL_ENTRY)&_ZN6S851C23v42Ev,
  (VTBL_ENTRY)&_ZN6S851C23v43Ev,
  (VTBL_ENTRY)&_ZN6S851C23v44Ev,
  (VTBL_ENTRY)&_ZN6S851C23v45Ev,
  (VTBL_ENTRY)&_ZN6S851C23v46Ev,
  (VTBL_ENTRY)&_ZN6S851C23v47Ev,
  (VTBL_ENTRY)&_ZN6S851C23v48Ev,
  (VTBL_ENTRY)&_ZN6S851C23v49Ev,
  (VTBL_ENTRY)&_ZN6S851C23v50Ev,
  (VTBL_ENTRY)&_ZN6S851C23v51Ev,
  (VTBL_ENTRY)&_ZN6S851C23v52Ev,
  (VTBL_ENTRY)&_ZN6S851C23v53Ev,
  (VTBL_ENTRY)&_ZN6S851C23v54Ev,
  (VTBL_ENTRY)&_ZN6S851C23v55Ev,
  (VTBL_ENTRY)&_ZN6S851C23v56Ev,
  (VTBL_ENTRY)&_ZN6S851C23v57Ev,
  (VTBL_ENTRY)&_ZN6S851C23v58Ev,
  (VTBL_ENTRY)&_ZN6S851C23v59Ev,
  (VTBL_ENTRY)&_ZN6S851C23v60Ev,
  (VTBL_ENTRY)&_ZN6S851C23v61Ev,
  (VTBL_ENTRY)&_ZN6S851C23v62Ev,
  (VTBL_ENTRY)&_ZN6S851C23v63Ev,
  (VTBL_ENTRY)&_ZN6S851C23v64Ev,
  (VTBL_ENTRY)&_ZN6S851C23v65Ev,
  (VTBL_ENTRY)&_ZN6S851C23v66Ev,
  (VTBL_ENTRY)&_ZN6S851C23v67Ev,
  (VTBL_ENTRY)&_ZN6S851C23v68Ev,
  (VTBL_ENTRY)&_ZN6S851C23v69Ev,
  (VTBL_ENTRY)&_ZN6S851C23v70Ev,
  (VTBL_ENTRY)&_ZN6S851C23v71Ev,
  (VTBL_ENTRY)&_ZN6S851C23v72Ev,
  (VTBL_ENTRY)&_ZN6S851C23v73Ev,
  (VTBL_ENTRY)&_ZN6S851C23v74Ev,
  (VTBL_ENTRY)&_ZN6S851C23v75Ev,
  (VTBL_ENTRY)&_ZN6S851C23v76Ev,
  (VTBL_ENTRY)&_ZN6S851C23v77Ev,
  (VTBL_ENTRY)&_ZN6S851C23v78Ev,
  (VTBL_ENTRY)&_ZN6S851C23v79Ev,
  (VTBL_ENTRY)&_ZN6S851C23v80Ev,
  (VTBL_ENTRY)&_ZN6S851C23v81Ev,
  (VTBL_ENTRY)&_ZN6S851C23v82Ev,
  (VTBL_ENTRY)&_ZN6S851C12v1Ev,
  (VTBL_ENTRY)&_ZN6S851C12v2Ev,
  (VTBL_ENTRY)&_ZN6S851C12v3Ev,
  (VTBL_ENTRY)&_ZN6S851C12v4Ev,
  (VTBL_ENTRY)&_ZN6S851C12v5Ev,
  (VTBL_ENTRY)&_ZN6S851C12v6Ev,
  (VTBL_ENTRY)&_ZN6S851C12v7Ev,
  (VTBL_ENTRY)&_ZN6S851C12v8Ev,
  (VTBL_ENTRY)&_ZN6S851C12v9Ev,
  (VTBL_ENTRY)&_ZN6S851C13v10Ev,
  (VTBL_ENTRY)&_ZN6S851C13v11Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S851C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S851C1D1Ev,_ZThn4_N6S851C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S851C1D0Ev,_ZThn4_N6S851C1D0Ev),
  (VTBL_ENTRY)&_ZN6S851C63v15Ev,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI6S851C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S851C1D1Ev,_ZThn60_N6S851C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S851C1D0Ev,_ZThn60_N6S851C1D0Ev),
  (VTBL_ENTRY)&_ZN7S851C113v41Ev,
};
extern VTBL_ENTRY _ZTI6S851C1[];
extern  VTBL_ENTRY _ZTV6S851C1[];
Class_Descriptor cd_S851C1 = {  "S851C1", // class name
  bases_S851C1, 6,
  &(vtc_S851C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,188), // object size
  NSPAIRA(_ZTI6S851C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S851C1),94, //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  S850C5  {
  virtual  ~S850C5(); // _ZN6S850C5D1Ev
  virtual void  v12(); // _ZN6S850C53v12Ev
  virtual void  v13(); // _ZN6S850C53v13Ev
  virtual void  v14(); // _ZN6S850C53v14Ev
  S850C5(); // tgen
};
//SIG(-1 S850C5) C1{ vd v1 v2 v3}


 S850C5 ::~S850C5(){ note_dtor("S850C5", this);}
void  S850C5 ::v12(){vfunc_called(this, "_ZN6S850C53v12Ev");}
void  S850C5 ::v13(){vfunc_called(this, "_ZN6S850C53v13Ev");}
void  S850C5 ::v14(){vfunc_called(this, "_ZN6S850C53v14Ev");}
S850C5 ::S850C5(){ note_ctor("S850C5", this);} // tgen

static void Test_S850C5()
{
  extern Class_Descriptor cd_S850C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S850C5, buf);
    S850C5 *dp, &lv = *(dp=new (buf) S850C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S850C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S850C5)");
    test_class_info(&lv, &cd_S850C5);
    dp->~S850C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS850C5(Test_S850C5, "S850C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S850C5C1Ev();
extern void _ZN6S850C5D1Ev();
Name_Map name_map_S850C5[] = {
  NSPAIR(_ZN6S850C5C1Ev),
  NSPAIR(_ZN6S850C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S850C5[];
extern void _ZN6S850C5D1Ev();
extern void _ZN6S850C5D0Ev();
extern void _ZN6S850C53v12Ev();
extern void _ZN6S850C53v13Ev();
extern void _ZN6S850C53v14Ev();
static  VTBL_ENTRY vtc_S850C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S850C5[0]),
  (VTBL_ENTRY)&_ZN6S850C5D1Ev,
  (VTBL_ENTRY)&_ZN6S850C5D0Ev,
  (VTBL_ENTRY)&_ZN6S850C53v12Ev,
  (VTBL_ENTRY)&_ZN6S850C53v13Ev,
  (VTBL_ENTRY)&_ZN6S850C53v14Ev,
};
extern VTBL_ENTRY _ZTI6S850C5[];
extern  VTBL_ENTRY _ZTV6S850C5[];
Class_Descriptor cd_S850C5 = {  "S850C5", // class name
  0,0,//no base classes
  &(vtc_S850C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S850C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S850C5),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  S850C6  {
  virtual  ~S850C6(); // _ZN6S850C6D1Ev
  virtual void  v15(); // _ZN6S850C63v15Ev
  S850C6(); // tgen
};
//SIG(-1 S850C6) C1{ vd v1}


 S850C6 ::~S850C6(){ note_dtor("S850C6", this);}
void  S850C6 ::v15(){vfunc_called(this, "_ZN6S850C63v15Ev");}
S850C6 ::S850C6(){ note_ctor("S850C6", this);} // tgen

static void Test_S850C6()
{
  extern Class_Descriptor cd_S850C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S850C6, buf);
    S850C6 *dp, &lv = *(dp=new (buf) S850C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S850C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S850C6)");
    test_class_info(&lv, &cd_S850C6);
    dp->~S850C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS850C6(Test_S850C6, "S850C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S850C6C1Ev();
extern void _ZN6S850C6D1Ev();
Name_Map name_map_S850C6[] = {
  NSPAIR(_ZN6S850C6C1Ev),
  NSPAIR(_ZN6S850C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S850C6[];
extern void _ZN6S850C6D1Ev();
extern void _ZN6S850C6D0Ev();
extern void _ZN6S850C63v15Ev();
static  VTBL_ENTRY vtc_S850C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S850C6[0]),
  (VTBL_ENTRY)&_ZN6S850C6D1Ev,
  (VTBL_ENTRY)&_ZN6S850C6D0Ev,
  (VTBL_ENTRY)&_ZN6S850C63v15Ev,
};
extern VTBL_ENTRY _ZTI6S850C6[];
extern  VTBL_ENTRY _ZTV6S850C6[];
Class_Descriptor cd_S850C6 = {  "S850C6", // class name
  0,0,//no base classes
  &(vtc_S850C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S850C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S850C6),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  S850C4  : S850C5 , S850C6 {
  virtual  ~S850C4(); // _ZN6S850C4D1Ev
  virtual void  v16(); // _ZN6S850C43v16Ev
  virtual void  v17(); // _ZN6S850C43v17Ev
  virtual void  v18(); // _ZN6S850C43v18Ev
  virtual void  v19(); // _ZN6S850C43v19Ev
  virtual void  v20(); // _ZN6S850C43v20Ev
  virtual void  v21(); // _ZN6S850C43v21Ev
  virtual void  v22(); // _ZN6S850C43v22Ev
  virtual void  v23(); // _ZN6S850C43v23Ev
  virtual void  v24(); // _ZN6S850C43v24Ev
  virtual void  v25(); // _ZN6S850C43v25Ev
  virtual void  v26(); // _ZN6S850C43v26Ev
  virtual void  v27(); // _ZN6S850C43v27Ev
  virtual void  v28(); // _ZN6S850C43v28Ev
  virtual void  v29(); // _ZN6S850C43v29Ev
  virtual void  v30(); // _ZN6S850C43v30Ev
  virtual void  v31(); // _ZN6S850C43v31Ev
  virtual void  v32(); // _ZN6S850C43v32Ev
  virtual void  v33(); // _ZN6S850C43v33Ev
  virtual void  v34(); // _ZN6S850C43v34Ev
  virtual void  v35(); // _ZN6S850C43v35Ev
  virtual void  v36(); // _ZN6S850C43v36Ev
  virtual void  v37(); // _ZN6S850C43v37Ev
  S850C4(); // tgen
};
//SIG(-1 S850C4) C1{ BC2{ vd v23 v24 v25} BC3{ vd v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S850C4 ::~S850C4(){ note_dtor("S850C4", this);}
void  S850C4 ::v16(){vfunc_called(this, "_ZN6S850C43v16Ev");}
void  S850C4 ::v17(){vfunc_called(this, "_ZN6S850C43v17Ev");}
void  S850C4 ::v18(){vfunc_called(this, "_ZN6S850C43v18Ev");}
void  S850C4 ::v19(){vfunc_called(this, "_ZN6S850C43v19Ev");}
void  S850C4 ::v20(){vfunc_called(this, "_ZN6S850C43v20Ev");}
void  S850C4 ::v21(){vfunc_called(this, "_ZN6S850C43v21Ev");}
void  S850C4 ::v22(){vfunc_called(this, "_ZN6S850C43v22Ev");}
void  S850C4 ::v23(){vfunc_called(this, "_ZN6S850C43v23Ev");}
void  S850C4 ::v24(){vfunc_called(this, "_ZN6S850C43v24Ev");}
void  S850C4 ::v25(){vfunc_called(this, "_ZN6S850C43v25Ev");}
void  S850C4 ::v26(){vfunc_called(this, "_ZN6S850C43v26Ev");}
void  S850C4 ::v27(){vfunc_called(this, "_ZN6S850C43v27Ev");}
void  S850C4 ::v28(){vfunc_called(this, "_ZN6S850C43v28Ev");}
void  S850C4 ::v29(){vfunc_called(this, "_ZN6S850C43v29Ev");}
void  S850C4 ::v30(){vfunc_called(this, "_ZN6S850C43v30Ev");}
void  S850C4 ::v31(){vfunc_called(this, "_ZN6S850C43v31Ev");}
void  S850C4 ::v32(){vfunc_called(this, "_ZN6S850C43v32Ev");}
void  S850C4 ::v33(){vfunc_called(this, "_ZN6S850C43v33Ev");}
void  S850C4 ::v34(){vfunc_called(this, "_ZN6S850C43v34Ev");}
void  S850C4 ::v35(){vfunc_called(this, "_ZN6S850C43v35Ev");}
void  S850C4 ::v36(){vfunc_called(this, "_ZN6S850C43v36Ev");}
void  S850C4 ::v37(){vfunc_called(this, "_ZN6S850C43v37Ev");}
S850C4 ::S850C4(){ note_ctor("S850C4", this);} // tgen

static void Test_S850C4()
{
  extern Class_Descriptor cd_S850C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S850C4, buf);
    S850C4 *dp, &lv = *(dp=new (buf) S850C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S850C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S850C4)");
    check_base_class_offset(lv, (S850C5*), 0, "S850C4");
    check_base_class_offset(lv, (S850C6*), ABISELECT(8,4), "S850C4");
    test_class_info(&lv, &cd_S850C4);
    dp->~S850C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS850C4(Test_S850C4, "S850C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S850C4C1Ev();
extern void _ZN6S850C4D1Ev();
Name_Map name_map_S850C4[] = {
  NSPAIR(_ZN6S850C4C1Ev),
  NSPAIR(_ZN6S850C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S850C5;
extern VTBL_ENTRY _ZTI6S850C5[];
extern  VTBL_ENTRY _ZTV6S850C5[];
extern Class_Descriptor cd_S850C6;
extern VTBL_ENTRY _ZTI6S850C6[];
extern  VTBL_ENTRY _ZTV6S850C6[];
static Base_Class bases_S850C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S850C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S850C6,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S850C4[];
extern void _ZN6S850C4D1Ev();
extern void _ZN6S850C4D0Ev();
extern void _ZN6S850C53v12Ev();
extern void _ZN6S850C53v13Ev();
extern void _ZN6S850C53v14Ev();
extern void _ZN6S850C43v16Ev();
extern void _ZN6S850C43v17Ev();
extern void _ZN6S850C43v18Ev();
extern void _ZN6S850C43v19Ev();
extern void _ZN6S850C43v20Ev();
extern void _ZN6S850C43v21Ev();
extern void _ZN6S850C43v22Ev();
extern void _ZN6S850C43v23Ev();
extern void _ZN6S850C43v24Ev();
extern void _ZN6S850C43v25Ev();
extern void _ZN6S850C43v26Ev();
extern void _ZN6S850C43v27Ev();
extern void _ZN6S850C43v28Ev();
extern void _ZN6S850C43v29Ev();
extern void _ZN6S850C43v30Ev();
extern void _ZN6S850C43v31Ev();
extern void _ZN6S850C43v32Ev();
extern void _ZN6S850C43v33Ev();
extern void _ZN6S850C43v34Ev();
extern void _ZN6S850C43v35Ev();
extern void _ZN6S850C43v36Ev();
extern void _ZN6S850C43v37Ev();
extern void ABISELECT(_ZThn8_N6S850C4D1Ev,_ZThn4_N6S850C4D1Ev)();
extern void ABISELECT(_ZThn8_N6S850C4D0Ev,_ZThn4_N6S850C4D0Ev)();
extern void _ZN6S850C63v15Ev();
static  VTBL_ENTRY vtc_S850C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S850C4[0]),
  (VTBL_ENTRY)&_ZN6S850C4D1Ev,
  (VTBL_ENTRY)&_ZN6S850C4D0Ev,
  (VTBL_ENTRY)&_ZN6S850C53v12Ev,
  (VTBL_ENTRY)&_ZN6S850C53v13Ev,
  (VTBL_ENTRY)&_ZN6S850C53v14Ev,
  (VTBL_ENTRY)&_ZN6S850C43v16Ev,
  (VTBL_ENTRY)&_ZN6S850C43v17Ev,
  (VTBL_ENTRY)&_ZN6S850C43v18Ev,
  (VTBL_ENTRY)&_ZN6S850C43v19Ev,
  (VTBL_ENTRY)&_ZN6S850C43v20Ev,
  (VTBL_ENTRY)&_ZN6S850C43v21Ev,
  (VTBL_ENTRY)&_ZN6S850C43v22Ev,
  (VTBL_ENTRY)&_ZN6S850C43v23Ev,
  (VTBL_ENTRY)&_ZN6S850C43v24Ev,
  (VTBL_ENTRY)&_ZN6S850C43v25Ev,
  (VTBL_ENTRY)&_ZN6S850C43v26Ev,
  (VTBL_ENTRY)&_ZN6S850C43v27Ev,
  (VTBL_ENTRY)&_ZN6S850C43v28Ev,
  (VTBL_ENTRY)&_ZN6S850C43v29Ev,
  (VTBL_ENTRY)&_ZN6S850C43v30Ev,
  (VTBL_ENTRY)&_ZN6S850C43v31Ev,
  (VTBL_ENTRY)&_ZN6S850C43v32Ev,
  (VTBL_ENTRY)&_ZN6S850C43v33Ev,
  (VTBL_ENTRY)&_ZN6S850C43v34Ev,
  (VTBL_ENTRY)&_ZN6S850C43v35Ev,
  (VTBL_ENTRY)&_ZN6S850C43v36Ev,
  (VTBL_ENTRY)&_ZN6S850C43v37Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S850C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S850C4D1Ev,_ZThn4_N6S850C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S850C4D0Ev,_ZThn4_N6S850C4D0Ev),
  (VTBL_ENTRY)&_ZN6S850C63v15Ev,
};
extern VTBL_ENTRY _ZTI6S850C4[];
extern  VTBL_ENTRY _ZTV6S850C4[];
Class_Descriptor cd_S850C4 = {  "S850C4", // class name
  bases_S850C4, 2,
  &(vtc_S850C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S850C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S850C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S850C3  : S850C4 {
  ::S857C7_nt s850c3f0;
  ::S856C9_nt s850c3f1;
  char s850c3f2;
  virtual  ~S850C3(); // _ZN6S850C3D1Ev
  virtual void  v38(); // _ZN6S850C33v38Ev
  virtual void  v39(); // _ZN6S850C33v39Ev
  virtual void  v40(); // _ZN6S850C33v40Ev
  S850C3(); // tgen
};
//SIG(-1 S850C3) C1{ BC2{ BC3{ vd v4 v5 v6} BC4{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ Fl[4]}} Fc}


 S850C3 ::~S850C3(){ note_dtor("S850C3", this);}
void  S850C3 ::v38(){vfunc_called(this, "_ZN6S850C33v38Ev");}
void  S850C3 ::v39(){vfunc_called(this, "_ZN6S850C33v39Ev");}
void  S850C3 ::v40(){vfunc_called(this, "_ZN6S850C33v40Ev");}
S850C3 ::S850C3(){ note_ctor("S850C3", this);} // tgen

static void Test_S850C3()
{
  extern Class_Descriptor cd_S850C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S850C3, buf);
    S850C3 *dp, &lv = *(dp=new (buf) S850C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S850C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S850C3)");
    check_base_class_offset(lv, (S850C5*)(S850C4*), 0, "S850C3");
    check_base_class_offset(lv, (S850C6*)(S850C4*), ABISELECT(8,4), "S850C3");
    check_base_class_offset(lv, (S850C4*), 0, "S850C3");
    check_field_offset(lv, s850c3f0, ABISELECT(16,8), "S850C3.s850c3f0");
    check_field_offset(lv, s850c3f1, ABISELECT(40,24), "S850C3.s850c3f1");
    check_field_offset(lv, s850c3f2, ABISELECT(72,40), "S850C3.s850c3f2");
    test_class_info(&lv, &cd_S850C3);
    dp->~S850C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS850C3(Test_S850C3, "S850C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S850C3C1Ev();
extern void _ZN6S850C3D1Ev();
Name_Map name_map_S850C3[] = {
  NSPAIR(_ZN6S850C3C1Ev),
  NSPAIR(_ZN6S850C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S850C5;
extern VTBL_ENTRY _ZTI6S850C5[];
extern  VTBL_ENTRY _ZTV6S850C5[];
extern Class_Descriptor cd_S850C6;
extern VTBL_ENTRY _ZTI6S850C6[];
extern  VTBL_ENTRY _ZTV6S850C6[];
extern Class_Descriptor cd_S850C4;
extern VTBL_ENTRY _ZTI6S850C4[];
extern  VTBL_ENTRY _ZTV6S850C4[];
static Base_Class bases_S850C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S850C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S850C6,    ABISELECT(8,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S850C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S850C3[];
extern void _ZN6S850C3D1Ev();
extern void _ZN6S850C3D0Ev();
extern void _ZN6S850C53v12Ev();
extern void _ZN6S850C53v13Ev();
extern void _ZN6S850C53v14Ev();
extern void _ZN6S850C43v16Ev();
extern void _ZN6S850C43v17Ev();
extern void _ZN6S850C43v18Ev();
extern void _ZN6S850C43v19Ev();
extern void _ZN6S850C43v20Ev();
extern void _ZN6S850C43v21Ev();
extern void _ZN6S850C43v22Ev();
extern void _ZN6S850C43v23Ev();
extern void _ZN6S850C43v24Ev();
extern void _ZN6S850C43v25Ev();
extern void _ZN6S850C43v26Ev();
extern void _ZN6S850C43v27Ev();
extern void _ZN6S850C43v28Ev();
extern void _ZN6S850C43v29Ev();
extern void _ZN6S850C43v30Ev();
extern void _ZN6S850C43v31Ev();
extern void _ZN6S850C43v32Ev();
extern void _ZN6S850C43v33Ev();
extern void _ZN6S850C43v34Ev();
extern void _ZN6S850C43v35Ev();
extern void _ZN6S850C43v36Ev();
extern void _ZN6S850C43v37Ev();
extern void _ZN6S850C33v38Ev();
extern void _ZN6S850C33v39Ev();
extern void _ZN6S850C33v40Ev();
extern void ABISELECT(_ZThn8_N6S850C3D1Ev,_ZThn4_N6S850C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S850C3D0Ev,_ZThn4_N6S850C3D0Ev)();
extern void _ZN6S850C63v15Ev();
static  VTBL_ENTRY vtc_S850C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S850C3[0]),
  (VTBL_ENTRY)&_ZN6S850C3D1Ev,
  (VTBL_ENTRY)&_ZN6S850C3D0Ev,
  (VTBL_ENTRY)&_ZN6S850C53v12Ev,
  (VTBL_ENTRY)&_ZN6S850C53v13Ev,
  (VTBL_ENTRY)&_ZN6S850C53v14Ev,
  (VTBL_ENTRY)&_ZN6S850C43v16Ev,
  (VTBL_ENTRY)&_ZN6S850C43v17Ev,
  (VTBL_ENTRY)&_ZN6S850C43v18Ev,
  (VTBL_ENTRY)&_ZN6S850C43v19Ev,
  (VTBL_ENTRY)&_ZN6S850C43v20Ev,
  (VTBL_ENTRY)&_ZN6S850C43v21Ev,
  (VTBL_ENTRY)&_ZN6S850C43v22Ev,
  (VTBL_ENTRY)&_ZN6S850C43v23Ev,
  (VTBL_ENTRY)&_ZN6S850C43v24Ev,
  (VTBL_ENTRY)&_ZN6S850C43v25Ev,
  (VTBL_ENTRY)&_ZN6S850C43v26Ev,
  (VTBL_ENTRY)&_ZN6S850C43v27Ev,
  (VTBL_ENTRY)&_ZN6S850C43v28Ev,
  (VTBL_ENTRY)&_ZN6S850C43v29Ev,
  (VTBL_ENTRY)&_ZN6S850C43v30Ev,
  (VTBL_ENTRY)&_ZN6S850C43v31Ev,
  (VTBL_ENTRY)&_ZN6S850C43v32Ev,
  (VTBL_ENTRY)&_ZN6S850C43v33Ev,
  (VTBL_ENTRY)&_ZN6S850C43v34Ev,
  (VTBL_ENTRY)&_ZN6S850C43v35Ev,
  (VTBL_ENTRY)&_ZN6S850C43v36Ev,
  (VTBL_ENTRY)&_ZN6S850C43v37Ev,
  (VTBL_ENTRY)&_ZN6S850C33v38Ev,
  (VTBL_ENTRY)&_ZN6S850C33v39Ev,
  (VTBL_ENTRY)&_ZN6S850C33v40Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S850C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S850C3D1Ev,_ZThn4_N6S850C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S850C3D0Ev,_ZThn4_N6S850C3D0Ev),
  (VTBL_ENTRY)&_ZN6S850C63v15Ev,
};
extern VTBL_ENTRY _ZTI6S850C3[];
extern  VTBL_ENTRY _ZTV6S850C3[];
Class_Descriptor cd_S850C3 = {  "S850C3", // class name
  bases_S850C3, 3,
  &(vtc_S850C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S850C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S850C3),37, //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  S850C11  {
  virtual  ~S850C11(); // _ZN7S850C11D1Ev
  virtual void  v41(); // _ZN7S850C113v41Ev
  S850C11(); // tgen
};
//SIG(-1 S850C11) C1{ vd v1}


 S850C11 ::~S850C11(){ note_dtor("S850C11", this);}
void  S850C11 ::v41(){vfunc_called(this, "_ZN7S850C113v41Ev");}
S850C11 ::S850C11(){ note_ctor("S850C11", this);} // tgen

static void Test_S850C11()
{
  extern Class_Descriptor cd_S850C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S850C11, buf);
    S850C11 *dp, &lv = *(dp=new (buf) S850C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S850C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S850C11)");
    test_class_info(&lv, &cd_S850C11);
    dp->~S850C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS850C11(Test_S850C11, "S850C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S850C11C1Ev();
extern void _ZN7S850C11D1Ev();
Name_Map name_map_S850C11[] = {
  NSPAIR(_ZN7S850C11C1Ev),
  NSPAIR(_ZN7S850C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S850C11[];
extern void _ZN7S850C11D1Ev();
extern void _ZN7S850C11D0Ev();
extern void _ZN7S850C113v41Ev();
static  VTBL_ENTRY vtc_S850C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S850C11[0]),
  (VTBL_ENTRY)&_ZN7S850C11D1Ev,
  (VTBL_ENTRY)&_ZN7S850C11D0Ev,
  (VTBL_ENTRY)&_ZN7S850C113v41Ev,
};
extern VTBL_ENTRY _ZTI7S850C11[];
extern  VTBL_ENTRY _ZTV7S850C11[];
Class_Descriptor cd_S850C11 = {  "S850C11", // class name
  0,0,//no base classes
  &(vtc_S850C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S850C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S850C11),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  S850C2  : S850C3 , S850C11 {
  ::S852C12 s850c2f0;
  ::S856C13_nt s850c2f1;
  char s850c2f2[2];
  void *s850c2f3;
  ::S857C16 s850c2f4;
  void *s850c2f5;
  virtual  ~S850C2(); // _ZN6S850C2D1Ev
  virtual void  v42(); // _ZN6S850C23v42Ev
  virtual void  v43(); // _ZN6S850C23v43Ev
  virtual void  v44(); // _ZN6S850C23v44Ev
  virtual void  v45(); // _ZN6S850C23v45Ev
  virtual void  v46(); // _ZN6S850C23v46Ev
  virtual void  v47(); // _ZN6S850C23v47Ev
  virtual void  v48(); // _ZN6S850C23v48Ev
  virtual void  v49(); // _ZN6S850C23v49Ev
  virtual void  v50(); // _ZN6S850C23v50Ev
  virtual void  v51(); // _ZN6S850C23v51Ev
  virtual void  v52(); // _ZN6S850C23v52Ev
  virtual void  v53(); // _ZN6S850C23v53Ev
  virtual void  v54(); // _ZN6S850C23v54Ev
  virtual void  v55(); // _ZN6S850C23v55Ev
  virtual void  v56(); // _ZN6S850C23v56Ev
  virtual void  v57(); // _ZN6S850C23v57Ev
  virtual void  v58(); // _ZN6S850C23v58Ev
  virtual void  v59(); // _ZN6S850C23v59Ev
  virtual void  v60(); // _ZN6S850C23v60Ev
  virtual void  v61(); // _ZN6S850C23v61Ev
  virtual void  v62(); // _ZN6S850C23v62Ev
  virtual void  v63(); // _ZN6S850C23v63Ev
  virtual void  v64(); // _ZN6S850C23v64Ev
  virtual void  v65(); // _ZN6S850C23v65Ev
  virtual void  v66(); // _ZN6S850C23v66Ev
  virtual void  v67(); // _ZN6S850C23v67Ev
  virtual void  v68(); // _ZN6S850C23v68Ev
  virtual void  v69(); // _ZN6S850C23v69Ev
  virtual void  v70(); // _ZN6S850C23v70Ev
  virtual void  v71(); // _ZN6S850C23v71Ev
  virtual void  v72(); // _ZN6S850C23v72Ev
  virtual void  v73(); // _ZN6S850C23v73Ev
  virtual void  v74(); // _ZN6S850C23v74Ev
  virtual void  v75(); // _ZN6S850C23v75Ev
  virtual void  v76(); // _ZN6S850C23v76Ev
  virtual void  v77(); // _ZN6S850C23v77Ev
  virtual void  v78(); // _ZN6S850C23v78Ev
  virtual void  v79(); // _ZN6S850C23v79Ev
  virtual void  v80(); // _ZN6S850C23v80Ev
  virtual void  v81(); // _ZN6S850C23v81Ev
  virtual void  v82(); // _ZN6S850C23v82Ev
  S850C2(); // tgen
};
//SIG(-1 S850C2) C1{ BC2{ BC3{ BC4{ vd v42 v43 v44} BC5{ vd v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67} vd v68 v69 v70 FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ Fl[4]}} Fc} BC10{ vd v71} 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 FC11{ m FC9} FC12{ m Fp FC8 FC13{ m Fp FC14{ Fi[4]}} Fi Fc} Fc[2] Fp FC15{ BC16{ vd v74} BC17{ vd v75} vd v72 v73 Fp[2]} Fp}


 S850C2 ::~S850C2(){ note_dtor("S850C2", this);}
void  S850C2 ::v42(){vfunc_called(this, "_ZN6S850C23v42Ev");}
void  S850C2 ::v43(){vfunc_called(this, "_ZN6S850C23v43Ev");}
void  S850C2 ::v44(){vfunc_called(this, "_ZN6S850C23v44Ev");}
void  S850C2 ::v45(){vfunc_called(this, "_ZN6S850C23v45Ev");}
void  S850C2 ::v46(){vfunc_called(this, "_ZN6S850C23v46Ev");}
void  S850C2 ::v47(){vfunc_called(this, "_ZN6S850C23v47Ev");}
void  S850C2 ::v48(){vfunc_called(this, "_ZN6S850C23v48Ev");}
void  S850C2 ::v49(){vfunc_called(this, "_ZN6S850C23v49Ev");}
void  S850C2 ::v50(){vfunc_called(this, "_ZN6S850C23v50Ev");}
void  S850C2 ::v51(){vfunc_called(this, "_ZN6S850C23v51Ev");}
void  S850C2 ::v52(){vfunc_called(this, "_ZN6S850C23v52Ev");}
void  S850C2 ::v53(){vfunc_called(this, "_ZN6S850C23v53Ev");}
void  S850C2 ::v54(){vfunc_called(this, "_ZN6S850C23v54Ev");}
void  S850C2 ::v55(){vfunc_called(this, "_ZN6S850C23v55Ev");}
void  S850C2 ::v56(){vfunc_called(this, "_ZN6S850C23v56Ev");}
void  S850C2 ::v57(){vfunc_called(this, "_ZN6S850C23v57Ev");}
void  S850C2 ::v58(){vfunc_called(this, "_ZN6S850C23v58Ev");}
void  S850C2 ::v59(){vfunc_called(this, "_ZN6S850C23v59Ev");}
void  S850C2 ::v60(){vfunc_called(this, "_ZN6S850C23v60Ev");}
void  S850C2 ::v61(){vfunc_called(this, "_ZN6S850C23v61Ev");}
void  S850C2 ::v62(){vfunc_called(this, "_ZN6S850C23v62Ev");}
void  S850C2 ::v63(){vfunc_called(this, "_ZN6S850C23v63Ev");}
void  S850C2 ::v64(){vfunc_called(this, "_ZN6S850C23v64Ev");}
void  S850C2 ::v65(){vfunc_called(this, "_ZN6S850C23v65Ev");}
void  S850C2 ::v66(){vfunc_called(this, "_ZN6S850C23v66Ev");}
void  S850C2 ::v67(){vfunc_called(this, "_ZN6S850C23v67Ev");}
void  S850C2 ::v68(){vfunc_called(this, "_ZN6S850C23v68Ev");}
void  S850C2 ::v69(){vfunc_called(this, "_ZN6S850C23v69Ev");}
void  S850C2 ::v70(){vfunc_called(this, "_ZN6S850C23v70Ev");}
void  S850C2 ::v71(){vfunc_called(this, "_ZN6S850C23v71Ev");}
void  S850C2 ::v72(){vfunc_called(this, "_ZN6S850C23v72Ev");}
void  S850C2 ::v73(){vfunc_called(this, "_ZN6S850C23v73Ev");}
void  S850C2 ::v74(){vfunc_called(this, "_ZN6S850C23v74Ev");}
void  S850C2 ::v75(){vfunc_called(this, "_ZN6S850C23v75Ev");}
void  S850C2 ::v76(){vfunc_called(this, "_ZN6S850C23v76Ev");}
void  S850C2 ::v77(){vfunc_called(this, "_ZN6S850C23v77Ev");}
void  S850C2 ::v78(){vfunc_called(this, "_ZN6S850C23v78Ev");}
void  S850C2 ::v79(){vfunc_called(this, "_ZN6S850C23v79Ev");}
void  S850C2 ::v80(){vfunc_called(this, "_ZN6S850C23v80Ev");}
void  S850C2 ::v81(){vfunc_called(this, "_ZN6S850C23v81Ev");}
void  S850C2 ::v82(){vfunc_called(this, "_ZN6S850C23v82Ev");}
S850C2 ::S850C2(){ note_ctor("S850C2", this);} // tgen

static void Test_S850C2()
{
  extern Class_Descriptor cd_S850C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,36)];
    init_test(&cd_S850C2, buf);
    S850C2 *dp, &lv = *(dp=new (buf) S850C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,140), "sizeof(S850C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S850C2)");
    check_base_class_offset(lv, (S850C5*)(S850C4*)(S850C3*), 0, "S850C2");
    check_base_class_offset(lv, (S850C6*)(S850C4*)(S850C3*), ABISELECT(8,4), "S850C2");
    check_base_class_offset(lv, (S850C4*)(S850C3*), 0, "S850C2");
    check_base_class_offset(lv, (S850C3*), 0, "S850C2");
    check_base_class_offset(lv, (S850C11*), ABISELECT(80,44), "S850C2");
    check_field_offset(lv, s850c2f0, ABISELECT(88,48), "S850C2.s850c2f0");
    check_field_offset(lv, s850c2f1, ABISELECT(120,64), "S850C2.s850c2f1");
    check_field_offset(lv, s850c2f2, ABISELECT(192,112), "S850C2.s850c2f2");
    check_field_offset(lv, s850c2f3, ABISELECT(200,116), "S850C2.s850c2f3");
    check_field_offset(lv, s850c2f4, ABISELECT(208,120), "S850C2.s850c2f4");
    check_field_offset(lv, s850c2f5, ABISELECT(240,136), "S850C2.s850c2f5");
    test_class_info(&lv, &cd_S850C2);
    dp->~S850C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS850C2(Test_S850C2, "S850C2", ABISELECT(248,140));

#else // __cplusplus

extern void _ZN6S850C2C1Ev();
extern void _ZN6S850C2D1Ev();
Name_Map name_map_S850C2[] = {
  NSPAIR(_ZN6S850C2C1Ev),
  NSPAIR(_ZN6S850C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S850C5;
extern VTBL_ENTRY _ZTI6S850C5[];
extern  VTBL_ENTRY _ZTV6S850C5[];
extern Class_Descriptor cd_S850C6;
extern VTBL_ENTRY _ZTI6S850C6[];
extern  VTBL_ENTRY _ZTV6S850C6[];
extern Class_Descriptor cd_S850C4;
extern VTBL_ENTRY _ZTI6S850C4[];
extern  VTBL_ENTRY _ZTV6S850C4[];
extern Class_Descriptor cd_S850C3;
extern VTBL_ENTRY _ZTI6S850C3[];
extern  VTBL_ENTRY _ZTV6S850C3[];
extern Class_Descriptor cd_S850C11;
extern VTBL_ENTRY _ZTI7S850C11[];
extern  VTBL_ENTRY _ZTV7S850C11[];
static Base_Class bases_S850C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S850C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S850C6,    ABISELECT(8,4), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_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_S850C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S850C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S850C11,    ABISELECT(80,44), //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},
  {0}};
extern VTBL_ENTRY _ZTI6S850C2[];
extern void _ZN6S850C2D1Ev();
extern void _ZN6S850C2D0Ev();
extern void _ZN6S850C53v12Ev();
extern void _ZN6S850C53v13Ev();
extern void _ZN6S850C53v14Ev();
extern void _ZN6S850C43v16Ev();
extern void _ZN6S850C43v17Ev();
extern void _ZN6S850C43v18Ev();
extern void _ZN6S850C43v19Ev();
extern void _ZN6S850C43v20Ev();
extern void _ZN6S850C43v21Ev();
extern void _ZN6S850C43v22Ev();
extern void _ZN6S850C43v23Ev();
extern void _ZN6S850C43v24Ev();
extern void _ZN6S850C43v25Ev();
extern void _ZN6S850C43v26Ev();
extern void _ZN6S850C43v27Ev();
extern void _ZN6S850C43v28Ev();
extern void _ZN6S850C43v29Ev();
extern void _ZN6S850C43v30Ev();
extern void _ZN6S850C43v31Ev();
extern void _ZN6S850C43v32Ev();
extern void _ZN6S850C43v33Ev();
extern void _ZN6S850C43v34Ev();
extern void _ZN6S850C43v35Ev();
extern void _ZN6S850C43v36Ev();
extern void _ZN6S850C43v37Ev();
extern void _ZN6S850C33v38Ev();
extern void _ZN6S850C33v39Ev();
extern void _ZN6S850C33v40Ev();
extern void _ZN6S850C23v42Ev();
extern void _ZN6S850C23v43Ev();
extern void _ZN6S850C23v44Ev();
extern void _ZN6S850C23v45Ev();
extern void _ZN6S850C23v46Ev();
extern void _ZN6S850C23v47Ev();
extern void _ZN6S850C23v48Ev();
extern void _ZN6S850C23v49Ev();
extern void _ZN6S850C23v50Ev();
extern void _ZN6S850C23v51Ev();
extern void _ZN6S850C23v52Ev();
extern void _ZN6S850C23v53Ev();
extern void _ZN6S850C23v54Ev();
extern void _ZN6S850C23v55Ev();
extern void _ZN6S850C23v56Ev();
extern void _ZN6S850C23v57Ev();
extern void _ZN6S850C23v58Ev();
extern void _ZN6S850C23v59Ev();
extern void _ZN6S850C23v60Ev();
extern void _ZN6S850C23v61Ev();
extern void _ZN6S850C23v62Ev();
extern void _ZN6S850C23v63Ev();
extern void _ZN6S850C23v64Ev();
extern void _ZN6S850C23v65Ev();
extern void _ZN6S850C23v66Ev();
extern void _ZN6S850C23v67Ev();
extern void _ZN6S850C23v68Ev();
extern void _ZN6S850C23v69Ev();
extern void _ZN6S850C23v70Ev();
extern void _ZN6S850C23v71Ev();
extern void _ZN6S850C23v72Ev();
extern void _ZN6S850C23v73Ev();
extern void _ZN6S850C23v74Ev();
extern void _ZN6S850C23v75Ev();
extern void _ZN6S850C23v76Ev();
extern void _ZN6S850C23v77Ev();
extern void _ZN6S850C23v78Ev();
extern void _ZN6S850C23v79Ev();
extern void _ZN6S850C23v80Ev();
extern void _ZN6S850C23v81Ev();
extern void _ZN6S850C23v82Ev();
extern void ABISELECT(_ZThn8_N6S850C2D1Ev,_ZThn4_N6S850C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S850C2D0Ev,_ZThn4_N6S850C2D0Ev)();
extern void _ZN6S850C63v15Ev();
extern void ABISELECT(_ZThn80_N6S850C2D1Ev,_ZThn44_N6S850C2D1Ev)();
extern void ABISELECT(_ZThn80_N6S850C2D0Ev,_ZThn44_N6S850C2D0Ev)();
extern void _ZN7S850C113v41Ev();
static  VTBL_ENTRY vtc_S850C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S850C2[0]),
  (VTBL_ENTRY)&_ZN6S850C2D1Ev,
  (VTBL_ENTRY)&_ZN6S850C2D0Ev,
  (VTBL_ENTRY)&_ZN6S850C53v12Ev,
  (VTBL_ENTRY)&_ZN6S850C53v13Ev,
  (VTBL_ENTRY)&_ZN6S850C53v14Ev,
  (VTBL_ENTRY)&_ZN6S850C43v16Ev,
  (VTBL_ENTRY)&_ZN6S850C43v17Ev,
  (VTBL_ENTRY)&_ZN6S850C43v18Ev,
  (VTBL_ENTRY)&_ZN6S850C43v19Ev,
  (VTBL_ENTRY)&_ZN6S850C43v20Ev,
  (VTBL_ENTRY)&_ZN6S850C43v21Ev,
  (VTBL_ENTRY)&_ZN6S850C43v22Ev,
  (VTBL_ENTRY)&_ZN6S850C43v23Ev,
  (VTBL_ENTRY)&_ZN6S850C43v24Ev,
  (VTBL_ENTRY)&_ZN6S850C43v25Ev,
  (VTBL_ENTRY)&_ZN6S850C43v26Ev,
  (VTBL_ENTRY)&_ZN6S850C43v27Ev,
  (VTBL_ENTRY)&_ZN6S850C43v28Ev,
  (VTBL_ENTRY)&_ZN6S850C43v29Ev,
  (VTBL_ENTRY)&_ZN6S850C43v30Ev,
  (VTBL_ENTRY)&_ZN6S850C43v31Ev,
  (VTBL_ENTRY)&_ZN6S850C43v32Ev,
  (VTBL_ENTRY)&_ZN6S850C43v33Ev,
  (VTBL_ENTRY)&_ZN6S850C43v34Ev,
  (VTBL_ENTRY)&_ZN6S850C43v35Ev,
  (VTBL_ENTRY)&_ZN6S850C43v36Ev,
  (VTBL_ENTRY)&_ZN6S850C43v37Ev,
  (VTBL_ENTRY)&_ZN6S850C33v38Ev,
  (VTBL_ENTRY)&_ZN6S850C33v39Ev,
  (VTBL_ENTRY)&_ZN6S850C33v40Ev,
  (VTBL_ENTRY)&_ZN6S850C23v42Ev,
  (VTBL_ENTRY)&_ZN6S850C23v43Ev,
  (VTBL_ENTRY)&_ZN6S850C23v44Ev,
  (VTBL_ENTRY)&_ZN6S850C23v45Ev,
  (VTBL_ENTRY)&_ZN6S850C23v46Ev,
  (VTBL_ENTRY)&_ZN6S850C23v47Ev,
  (VTBL_ENTRY)&_ZN6S850C23v48Ev,
  (VTBL_ENTRY)&_ZN6S850C23v49Ev,
  (VTBL_ENTRY)&_ZN6S850C23v50Ev,
  (VTBL_ENTRY)&_ZN6S850C23v51Ev,
  (VTBL_ENTRY)&_ZN6S850C23v52Ev,
  (VTBL_ENTRY)&_ZN6S850C23v53Ev,
  (VTBL_ENTRY)&_ZN6S850C23v54Ev,
  (VTBL_ENTRY)&_ZN6S850C23v55Ev,
  (VTBL_ENTRY)&_ZN6S850C23v56Ev,
  (VTBL_ENTRY)&_ZN6S850C23v57Ev,
  (VTBL_ENTRY)&_ZN6S850C23v58Ev,
  (VTBL_ENTRY)&_ZN6S850C23v59Ev,
  (VTBL_ENTRY)&_ZN6S850C23v60Ev,
  (VTBL_ENTRY)&_ZN6S850C23v61Ev,
  (VTBL_ENTRY)&_ZN6S850C23v62Ev,
  (VTBL_ENTRY)&_ZN6S850C23v63Ev,
  (VTBL_ENTRY)&_ZN6S850C23v64Ev,
  (VTBL_ENTRY)&_ZN6S850C23v65Ev,
  (VTBL_ENTRY)&_ZN6S850C23v66Ev,
  (VTBL_ENTRY)&_ZN6S850C23v67Ev,
  (VTBL_ENTRY)&_ZN6S850C23v68Ev,
  (VTBL_ENTRY)&_ZN6S850C23v69Ev,
  (VTBL_ENTRY)&_ZN6S850C23v70Ev,
  (VTBL_ENTRY)&_ZN6S850C23v71Ev,
  (VTBL_ENTRY)&_ZN6S850C23v72Ev,
  (VTBL_ENTRY)&_ZN6S850C23v73Ev,
  (VTBL_ENTRY)&_ZN6S850C23v74Ev,
  (VTBL_ENTRY)&_ZN6S850C23v75Ev,
  (VTBL_ENTRY)&_ZN6S850C23v76Ev,
  (VTBL_ENTRY)&_ZN6S850C23v77Ev,
  (VTBL_ENTRY)&_ZN6S850C23v78Ev,
  (VTBL_ENTRY)&_ZN6S850C23v79Ev,
  (VTBL_ENTRY)&_ZN6S850C23v80Ev,
  (VTBL_ENTRY)&_ZN6S850C23v81Ev,
  (VTBL_ENTRY)&_ZN6S850C23v82Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S850C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S850C2D1Ev,_ZThn4_N6S850C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S850C2D0Ev,_ZThn4_N6S850C2D0Ev),
  (VTBL_ENTRY)&_ZN6S850C63v15Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI6S850C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S850C2D1Ev,_ZThn44_N6S850C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S850C2D0Ev,_ZThn44_N6S850C2D0Ev),
  (VTBL_ENTRY)&_ZN7S850C113v41Ev,
};
extern VTBL_ENTRY _ZTI6S850C2[];
extern  VTBL_ENTRY _ZTV6S850C2[];
Class_Descriptor cd_S850C2 = {  "S850C2", // class name
  bases_S850C2, 5,
  &(vtc_S850C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,140), // object size
  NSPAIRA(_ZTI6S850C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S850C2),83, //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  S850C1  : S850C2 {
  virtual  ~S850C1(); // _ZN6S850C1D1Ev
  virtual void  v1(); // _ZN6S850C12v1Ev
  virtual void  v2(); // _ZN6S850C12v2Ev
  virtual void  v3(); // _ZN6S850C12v3Ev
  virtual void  v4(); // _ZN6S850C12v4Ev
  virtual void  v5(); // _ZN6S850C12v5Ev
  virtual void  v6(); // _ZN6S850C12v6Ev
  virtual void  v7(); // _ZN6S850C12v7Ev
  virtual void  v8(); // _ZN6S850C12v8Ev
  virtual void  v9(); // _ZN6S850C12v9Ev
  virtual void  v10(); // _ZN6S850C13v10Ev
  virtual void  v11(); // _ZN6S850C13v11Ev
  S850C1(); // tgen
};
//SIG(1 S850C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14} BC6{ vd v15} vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37} vd v38 v39 v40 FC7{ m Fp Fi[2] FC8{ m}} FC9{ m FC10{ Fl[4]}} Fc} BC11{ vd v41} vd 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 FC12{ m FC10} FC13{ m Fp FC9 FC14{ m Fp FC15{ Fi[4]}} Fi Fc} Fc[2] Fp FC16{ BC17{ vd v85} BC18{ vd v86} vd v83 v84 Fp[2]} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11}


 S850C1 ::~S850C1(){ note_dtor("S850C1", this);}
void  S850C1 ::v1(){vfunc_called(this, "_ZN6S850C12v1Ev");}
void  S850C1 ::v2(){vfunc_called(this, "_ZN6S850C12v2Ev");}
void  S850C1 ::v3(){vfunc_called(this, "_ZN6S850C12v3Ev");}
void  S850C1 ::v4(){vfunc_called(this, "_ZN6S850C12v4Ev");}
void  S850C1 ::v5(){vfunc_called(this, "_ZN6S850C12v5Ev");}
void  S850C1 ::v6(){vfunc_called(this, "_ZN6S850C12v6Ev");}
void  S850C1 ::v7(){vfunc_called(this, "_ZN6S850C12v7Ev");}
void  S850C1 ::v8(){vfunc_called(this, "_ZN6S850C12v8Ev");}
void  S850C1 ::v9(){vfunc_called(this, "_ZN6S850C12v9Ev");}
void  S850C1 ::v10(){vfunc_called(this, "_ZN6S850C13v10Ev");}
void  S850C1 ::v11(){vfunc_called(this, "_ZN6S850C13v11Ev");}
S850C1 ::S850C1(){ note_ctor("S850C1", this);} // tgen

static void Test_S850C1()
{
  extern Class_Descriptor cd_S850C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,36)];
    init_test(&cd_S850C1, buf);
    S850C1 *dp, &lv = *(dp=new (buf) S850C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,140), "sizeof(S850C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S850C1)");
    check_base_class_offset(lv, (S850C5*)(S850C4*)(S850C3*)(S850C2*), 0, "S850C1");
    check_base_class_offset(lv, (S850C6*)(S850C4*)(S850C3*)(S850C2*), ABISELECT(8,4), "S850C1");
    check_base_class_offset(lv, (S850C4*)(S850C3*)(S850C2*), 0, "S850C1");
    check_base_class_offset(lv, (S850C3*)(S850C2*), 0, "S850C1");
    check_base_class_offset(lv, (S850C11*)(S850C2*), ABISELECT(80,44), "S850C1");
    check_base_class_offset(lv, (S850C2*), 0, "S850C1");
    test_class_info(&lv, &cd_S850C1);
    dp->~S850C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS850C1(Test_S850C1, "S850C1", ABISELECT(248,140));

#else // __cplusplus

extern void _ZN6S850C1C1Ev();
extern void _ZN6S850C1D1Ev();
Name_Map name_map_S850C1[] = {
  NSPAIR(_ZN6S850C1C1Ev),
  NSPAIR(_ZN6S850C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S850C5;
extern VTBL_ENTRY _ZTI6S850C5[];
extern  VTBL_ENTRY _ZTV6S850C5[];
extern Class_Descriptor cd_S850C6;
extern VTBL_ENTRY _ZTI6S850C6[];
extern  VTBL_ENTRY _ZTV6S850C6[];
extern Class_Descriptor cd_S850C4;
extern VTBL_ENTRY _ZTI6S850C4[];
extern  VTBL_ENTRY _ZTV6S850C4[];
extern Class_Descriptor cd_S850C3;
extern VTBL_ENTRY _ZTI6S850C3[];
extern  VTBL_ENTRY _ZTV6S850C3[];
extern Class_Descriptor cd_S850C11;
extern VTBL_ENTRY _ZTI7S850C11[];
extern  VTBL_ENTRY _ZTV7S850C11[];
extern Class_Descriptor cd_S850C2;
extern VTBL_ENTRY _ZTI6S850C2[];
extern  VTBL_ENTRY _ZTV6S850C2[];
static Base_Class bases_S850C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S850C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S850C6,    ABISELECT(8,4), //bcp->offset
    84, //bcp->virtual_function_table_offset
    2, //num_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_S850C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S850C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S850C11,    ABISELECT(80,44), //bcp->offset
    89, //bcp->virtual_function_table_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_S850C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S850C1[];
extern void _ZN6S850C1D1Ev();
extern void _ZN6S850C1D0Ev();
extern void _ZN6S850C53v12Ev();
extern void _ZN6S850C53v13Ev();
extern void _ZN6S850C53v14Ev();
extern void _ZN6S850C43v16Ev();
extern void _ZN6S850C43v17Ev();
extern void _ZN6S850C43v18Ev();
extern void _ZN6S850C43v19Ev();
extern void _ZN6S850C43v20Ev();
extern void _ZN6S850C43v21Ev();
extern void _ZN6S850C43v22Ev();
extern void _ZN6S850C43v23Ev();
extern void _ZN6S850C43v24Ev();
extern void _ZN6S850C43v25Ev();
extern void _ZN6S850C43v26Ev();
extern void _ZN6S850C43v27Ev();
extern void _ZN6S850C43v28Ev();
extern void _ZN6S850C43v29Ev();
extern void _ZN6S850C43v30Ev();
extern void _ZN6S850C43v31Ev();
extern void _ZN6S850C43v32Ev();
extern void _ZN6S850C43v33Ev();
extern void _ZN6S850C43v34Ev();
extern void _ZN6S850C43v35Ev();
extern void _ZN6S850C43v36Ev();
extern void _ZN6S850C43v37Ev();
extern void _ZN6S850C33v38Ev();
extern void _ZN6S850C33v39Ev();
extern void _ZN6S850C33v40Ev();
extern void _ZN6S850C23v42Ev();
extern void _ZN6S850C23v43Ev();
extern void _ZN6S850C23v44Ev();
extern void _ZN6S850C23v45Ev();
extern void _ZN6S850C23v46Ev();
extern void _ZN6S850C23v47Ev();
extern void _ZN6S850C23v48Ev();
extern void _ZN6S850C23v49Ev();
extern void _ZN6S850C23v50Ev();
extern void _ZN6S850C23v51Ev();
extern void _ZN6S850C23v52Ev();
extern void _ZN6S850C23v53Ev();
extern void _ZN6S850C23v54Ev();
extern void _ZN6S850C23v55Ev();
extern void _ZN6S850C23v56Ev();
extern void _ZN6S850C23v57Ev();
extern void _ZN6S850C23v58Ev();
extern void _ZN6S850C23v59Ev();
extern void _ZN6S850C23v60Ev();
extern void _ZN6S850C23v61Ev();
extern void _ZN6S850C23v62Ev();
extern void _ZN6S850C23v63Ev();
extern void _ZN6S850C23v64Ev();
extern void _ZN6S850C23v65Ev();
extern void _ZN6S850C23v66Ev();
extern void _ZN6S850C23v67Ev();
extern void _ZN6S850C23v68Ev();
extern void _ZN6S850C23v69Ev();
extern void _ZN6S850C23v70Ev();
extern void _ZN6S850C23v71Ev();
extern void _ZN6S850C23v72Ev();
extern void _ZN6S850C23v73Ev();
extern void _ZN6S850C23v74Ev();
extern void _ZN6S850C23v75Ev();
extern void _ZN6S850C23v76Ev();
extern void _ZN6S850C23v77Ev();
extern void _ZN6S850C23v78Ev();
extern void _ZN6S850C23v79Ev();
extern void _ZN6S850C23v80Ev();
extern void _ZN6S850C23v81Ev();
extern void _ZN6S850C23v82Ev();
extern void _ZN6S850C12v1Ev();
extern void _ZN6S850C12v2Ev();
extern void _ZN6S850C12v3Ev();
extern void _ZN6S850C12v4Ev();
extern void _ZN6S850C12v5Ev();
extern void _ZN6S850C12v6Ev();
extern void _ZN6S850C12v7Ev();
extern void _ZN6S850C12v8Ev();
extern void _ZN6S850C12v9Ev();
extern void _ZN6S850C13v10Ev();
extern void _ZN6S850C13v11Ev();
extern void ABISELECT(_ZThn8_N6S850C1D1Ev,_ZThn4_N6S850C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S850C1D0Ev,_ZThn4_N6S850C1D0Ev)();
extern void _ZN6S850C63v15Ev();
extern void ABISELECT(_ZThn80_N6S850C1D1Ev,_ZThn44_N6S850C1D1Ev)();
extern void ABISELECT(_ZThn80_N6S850C1D0Ev,_ZThn44_N6S850C1D0Ev)();
extern void _ZN7S850C113v41Ev();
static  VTBL_ENTRY vtc_S850C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S850C1[0]),
  (VTBL_ENTRY)&_ZN6S850C1D1Ev,
  (VTBL_ENTRY)&_ZN6S850C1D0Ev,
  (VTBL_ENTRY)&_ZN6S850C53v12Ev,
  (VTBL_ENTRY)&_ZN6S850C53v13Ev,
  (VTBL_ENTRY)&_ZN6S850C53v14Ev,
  (VTBL_ENTRY)&_ZN6S850C43v16Ev,
  (VTBL_ENTRY)&_ZN6S850C43v17Ev,
  (VTBL_ENTRY)&_ZN6S850C43v18Ev,
  (VTBL_ENTRY)&_ZN6S850C43v19Ev,
  (VTBL_ENTRY)&_ZN6S850C43v20Ev,
  (VTBL_ENTRY)&_ZN6S850C43v21Ev,
  (VTBL_ENTRY)&_ZN6S850C43v22Ev,
  (VTBL_ENTRY)&_ZN6S850C43v23Ev,
  (VTBL_ENTRY)&_ZN6S850C43v24Ev,
  (VTBL_ENTRY)&_ZN6S850C43v25Ev,
  (VTBL_ENTRY)&_ZN6S850C43v26Ev,
  (VTBL_ENTRY)&_ZN6S850C43v27Ev,
  (VTBL_ENTRY)&_ZN6S850C43v28Ev,
  (VTBL_ENTRY)&_ZN6S850C43v29Ev,
  (VTBL_ENTRY)&_ZN6S850C43v30Ev,
  (VTBL_ENTRY)&_ZN6S850C43v31Ev,
  (VTBL_ENTRY)&_ZN6S850C43v32Ev,
  (VTBL_ENTRY)&_ZN6S850C43v33Ev,
  (VTBL_ENTRY)&_ZN6S850C43v34Ev,
  (VTBL_ENTRY)&_ZN6S850C43v35Ev,
  (VTBL_ENTRY)&_ZN6S850C43v36Ev,
  (VTBL_ENTRY)&_ZN6S850C43v37Ev,
  (VTBL_ENTRY)&_ZN6S850C33v38Ev,
  (VTBL_ENTRY)&_ZN6S850C33v39Ev,
  (VTBL_ENTRY)&_ZN6S850C33v40Ev,
  (VTBL_ENTRY)&_ZN6S850C23v42Ev,
  (VTBL_ENTRY)&_ZN6S850C23v43Ev,
  (VTBL_ENTRY)&_ZN6S850C23v44Ev,
  (VTBL_ENTRY)&_ZN6S850C23v45Ev,
  (VTBL_ENTRY)&_ZN6S850C23v46Ev,
  (VTBL_ENTRY)&_ZN6S850C23v47Ev,
  (VTBL_ENTRY)&_ZN6S850C23v48Ev,
  (VTBL_ENTRY)&_ZN6S850C23v49Ev,
  (VTBL_ENTRY)&_ZN6S850C23v50Ev,
  (VTBL_ENTRY)&_ZN6S850C23v51Ev,
  (VTBL_ENTRY)&_ZN6S850C23v52Ev,
  (VTBL_ENTRY)&_ZN6S850C23v53Ev,
  (VTBL_ENTRY)&_ZN6S850C23v54Ev,
  (VTBL_ENTRY)&_ZN6S850C23v55Ev,
  (VTBL_ENTRY)&_ZN6S850C23v56Ev,
  (VTBL_ENTRY)&_ZN6S850C23v57Ev,
  (VTBL_ENTRY)&_ZN6S850C23v58Ev,
  (VTBL_ENTRY)&_ZN6S850C23v59Ev,
  (VTBL_ENTRY)&_ZN6S850C23v60Ev,
  (VTBL_ENTRY)&_ZN6S850C23v61Ev,
  (VTBL_ENTRY)&_ZN6S850C23v62Ev,
  (VTBL_ENTRY)&_ZN6S850C23v63Ev,
  (VTBL_ENTRY)&_ZN6S850C23v64Ev,
  (VTBL_ENTRY)&_ZN6S850C23v65Ev,
  (VTBL_ENTRY)&_ZN6S850C23v66Ev,
  (VTBL_ENTRY)&_ZN6S850C23v67Ev,
  (VTBL_ENTRY)&_ZN6S850C23v68Ev,
  (VTBL_ENTRY)&_ZN6S850C23v69Ev,
  (VTBL_ENTRY)&_ZN6S850C23v70Ev,
  (VTBL_ENTRY)&_ZN6S850C23v71Ev,
  (VTBL_ENTRY)&_ZN6S850C23v72Ev,
  (VTBL_ENTRY)&_ZN6S850C23v73Ev,
  (VTBL_ENTRY)&_ZN6S850C23v74Ev,
  (VTBL_ENTRY)&_ZN6S850C23v75Ev,
  (VTBL_ENTRY)&_ZN6S850C23v76Ev,
  (VTBL_ENTRY)&_ZN6S850C23v77Ev,
  (VTBL_ENTRY)&_ZN6S850C23v78Ev,
  (VTBL_ENTRY)&_ZN6S850C23v79Ev,
  (VTBL_ENTRY)&_ZN6S850C23v80Ev,
  (VTBL_ENTRY)&_ZN6S850C23v81Ev,
  (VTBL_ENTRY)&_ZN6S850C23v82Ev,
  (VTBL_ENTRY)&_ZN6S850C12v1Ev,
  (VTBL_ENTRY)&_ZN6S850C12v2Ev,
  (VTBL_ENTRY)&_ZN6S850C12v3Ev,
  (VTBL_ENTRY)&_ZN6S850C12v4Ev,
  (VTBL_ENTRY)&_ZN6S850C12v5Ev,
  (VTBL_ENTRY)&_ZN6S850C12v6Ev,
  (VTBL_ENTRY)&_ZN6S850C12v7Ev,
  (VTBL_ENTRY)&_ZN6S850C12v8Ev,
  (VTBL_ENTRY)&_ZN6S850C12v9Ev,
  (VTBL_ENTRY)&_ZN6S850C13v10Ev,
  (VTBL_ENTRY)&_ZN6S850C13v11Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S850C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S850C1D1Ev,_ZThn4_N6S850C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S850C1D0Ev,_ZThn4_N6S850C1D0Ev),
  (VTBL_ENTRY)&_ZN6S850C63v15Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI6S850C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S850C1D1Ev,_ZThn44_N6S850C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S850C1D0Ev,_ZThn44_N6S850C1D0Ev),
  (VTBL_ENTRY)&_ZN7S850C113v41Ev,
};
extern VTBL_ENTRY _ZTI6S850C1[];
extern  VTBL_ENTRY _ZTV6S850C1[];
Class_Descriptor cd_S850C1 = {  "S850C1", // class name
  bases_S850C1, 6,
  &(vtc_S850C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,140), // object size
  NSPAIRA(_ZTI6S850C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S850C1),94, //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  S848C5  {
  virtual  ~S848C5(); // _ZN6S848C5D1Ev
  virtual void  v11(); // _ZN6S848C53v11Ev
  virtual void  v12(); // _ZN6S848C53v12Ev
  virtual void  v13(); // _ZN6S848C53v13Ev
  S848C5(); // tgen
};
//SIG(-1 S848C5) C1{ vd v1 v2 v3}


 S848C5 ::~S848C5(){ note_dtor("S848C5", this);}
void  S848C5 ::v11(){vfunc_called(this, "_ZN6S848C53v11Ev");}
void  S848C5 ::v12(){vfunc_called(this, "_ZN6S848C53v12Ev");}
void  S848C5 ::v13(){vfunc_called(this, "_ZN6S848C53v13Ev");}
S848C5 ::S848C5(){ note_ctor("S848C5", this);} // tgen

static void Test_S848C5()
{
  extern Class_Descriptor cd_S848C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S848C5, buf);
    S848C5 *dp, &lv = *(dp=new (buf) S848C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S848C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S848C5)");
    test_class_info(&lv, &cd_S848C5);
    dp->~S848C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS848C5(Test_S848C5, "S848C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S848C5C1Ev();
extern void _ZN6S848C5D1Ev();
Name_Map name_map_S848C5[] = {
  NSPAIR(_ZN6S848C5C1Ev),
  NSPAIR(_ZN6S848C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S848C5[];
extern void _ZN6S848C5D1Ev();
extern void _ZN6S848C5D0Ev();
extern void _ZN6S848C53v11Ev();
extern void _ZN6S848C53v12Ev();
extern void _ZN6S848C53v13Ev();
static  VTBL_ENTRY vtc_S848C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S848C5[0]),
  (VTBL_ENTRY)&_ZN6S848C5D1Ev,
  (VTBL_ENTRY)&_ZN6S848C5D0Ev,
  (VTBL_ENTRY)&_ZN6S848C53v11Ev,
  (VTBL_ENTRY)&_ZN6S848C53v12Ev,
  (VTBL_ENTRY)&_ZN6S848C53v13Ev,
};
extern VTBL_ENTRY _ZTI6S848C5[];
extern  VTBL_ENTRY _ZTV6S848C5[];
Class_Descriptor cd_S848C5 = {  "S848C5", // class name
  0,0,//no base classes
  &(vtc_S848C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S848C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S848C5),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  S848C6  {
  virtual  ~S848C6(); // _ZN6S848C6D1Ev
  virtual void  v14(); // _ZN6S848C63v14Ev
  S848C6(); // tgen
};
//SIG(-1 S848C6) C1{ vd v1}


 S848C6 ::~S848C6(){ note_dtor("S848C6", this);}
void  S848C6 ::v14(){vfunc_called(this, "_ZN6S848C63v14Ev");}
S848C6 ::S848C6(){ note_ctor("S848C6", this);} // tgen

static void Test_S848C6()
{
  extern Class_Descriptor cd_S848C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S848C6, buf);
    S848C6 *dp, &lv = *(dp=new (buf) S848C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S848C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S848C6)");
    test_class_info(&lv, &cd_S848C6);
    dp->~S848C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS848C6(Test_S848C6, "S848C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S848C6C1Ev();
extern void _ZN6S848C6D1Ev();
Name_Map name_map_S848C6[] = {
  NSPAIR(_ZN6S848C6C1Ev),
  NSPAIR(_ZN6S848C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S848C6[];
extern void _ZN6S848C6D1Ev();
extern void _ZN6S848C6D0Ev();
extern void _ZN6S848C63v14Ev();
static  VTBL_ENTRY vtc_S848C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S848C6[0]),
  (VTBL_ENTRY)&_ZN6S848C6D1Ev,
  (VTBL_ENTRY)&_ZN6S848C6D0Ev,
  (VTBL_ENTRY)&_ZN6S848C63v14Ev,
};
extern VTBL_ENTRY _ZTI6S848C6[];
extern  VTBL_ENTRY _ZTV6S848C6[];
Class_Descriptor cd_S848C6 = {  "S848C6", // class name
  0,0,//no base classes
  &(vtc_S848C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S848C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S848C6),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  S848C4  : S848C5 , S848C6 {
  virtual  ~S848C4(); // _ZN6S848C4D1Ev
  virtual void  v15(); // _ZN6S848C43v15Ev
  virtual void  v16(); // _ZN6S848C43v16Ev
  virtual void  v17(); // _ZN6S848C43v17Ev
  virtual void  v18(); // _ZN6S848C43v18Ev
  virtual void  v19(); // _ZN6S848C43v19Ev
  virtual void  v20(); // _ZN6S848C43v20Ev
  virtual void  v21(); // _ZN6S848C43v21Ev
  virtual void  v22(); // _ZN6S848C43v22Ev
  virtual void  v23(); // _ZN6S848C43v23Ev
  virtual void  v24(); // _ZN6S848C43v24Ev
  virtual void  v25(); // _ZN6S848C43v25Ev
  virtual void  v26(); // _ZN6S848C43v26Ev
  virtual void  v27(); // _ZN6S848C43v27Ev
  virtual void  v28(); // _ZN6S848C43v28Ev
  virtual void  v29(); // _ZN6S848C43v29Ev
  virtual void  v30(); // _ZN6S848C43v30Ev
  virtual void  v31(); // _ZN6S848C43v31Ev
  virtual void  v32(); // _ZN6S848C43v32Ev
  virtual void  v33(); // _ZN6S848C43v33Ev
  virtual void  v34(); // _ZN6S848C43v34Ev
  virtual void  v35(); // _ZN6S848C43v35Ev
  virtual void  v36(); // _ZN6S848C43v36Ev
  S848C4(); // tgen
};
//SIG(-1 S848C4) C1{ BC2{ vd v23 v24 v25} BC3{ vd v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S848C4 ::~S848C4(){ note_dtor("S848C4", this);}
void  S848C4 ::v15(){vfunc_called(this, "_ZN6S848C43v15Ev");}
void  S848C4 ::v16(){vfunc_called(this, "_ZN6S848C43v16Ev");}
void  S848C4 ::v17(){vfunc_called(this, "_ZN6S848C43v17Ev");}
void  S848C4 ::v18(){vfunc_called(this, "_ZN6S848C43v18Ev");}
void  S848C4 ::v19(){vfunc_called(this, "_ZN6S848C43v19Ev");}
void  S848C4 ::v20(){vfunc_called(this, "_ZN6S848C43v20Ev");}
void  S848C4 ::v21(){vfunc_called(this, "_ZN6S848C43v21Ev");}
void  S848C4 ::v22(){vfunc_called(this, "_ZN6S848C43v22Ev");}
void  S848C4 ::v23(){vfunc_called(this, "_ZN6S848C43v23Ev");}
void  S848C4 ::v24(){vfunc_called(this, "_ZN6S848C43v24Ev");}
void  S848C4 ::v25(){vfunc_called(this, "_ZN6S848C43v25Ev");}
void  S848C4 ::v26(){vfunc_called(this, "_ZN6S848C43v26Ev");}
void  S848C4 ::v27(){vfunc_called(this, "_ZN6S848C43v27Ev");}
void  S848C4 ::v28(){vfunc_called(this, "_ZN6S848C43v28Ev");}
void  S848C4 ::v29(){vfunc_called(this, "_ZN6S848C43v29Ev");}
void  S848C4 ::v30(){vfunc_called(this, "_ZN6S848C43v30Ev");}
void  S848C4 ::v31(){vfunc_called(this, "_ZN6S848C43v31Ev");}
void  S848C4 ::v32(){vfunc_called(this, "_ZN6S848C43v32Ev");}
void  S848C4 ::v33(){vfunc_called(this, "_ZN6S848C43v33Ev");}
void  S848C4 ::v34(){vfunc_called(this, "_ZN6S848C43v34Ev");}
void  S848C4 ::v35(){vfunc_called(this, "_ZN6S848C43v35Ev");}
void  S848C4 ::v36(){vfunc_called(this, "_ZN6S848C43v36Ev");}
S848C4 ::S848C4(){ note_ctor("S848C4", this);} // tgen

static void Test_S848C4()
{
  extern Class_Descriptor cd_S848C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S848C4, buf);
    S848C4 *dp, &lv = *(dp=new (buf) S848C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S848C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S848C4)");
    check_base_class_offset(lv, (S848C5*), 0, "S848C4");
    check_base_class_offset(lv, (S848C6*), ABISELECT(8,4), "S848C4");
    test_class_info(&lv, &cd_S848C4);
    dp->~S848C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS848C4(Test_S848C4, "S848C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S848C4C1Ev();
extern void _ZN6S848C4D1Ev();
Name_Map name_map_S848C4[] = {
  NSPAIR(_ZN6S848C4C1Ev),
  NSPAIR(_ZN6S848C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S848C5;
extern VTBL_ENTRY _ZTI6S848C5[];
extern  VTBL_ENTRY _ZTV6S848C5[];
extern Class_Descriptor cd_S848C6;
extern VTBL_ENTRY _ZTI6S848C6[];
extern  VTBL_ENTRY _ZTV6S848C6[];
static Base_Class bases_S848C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S848C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S848C6,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S848C4[];
extern void _ZN6S848C4D1Ev();
extern void _ZN6S848C4D0Ev();
extern void _ZN6S848C53v11Ev();
extern void _ZN6S848C53v12Ev();
extern void _ZN6S848C53v13Ev();
extern void _ZN6S848C43v15Ev();
extern void _ZN6S848C43v16Ev();
extern void _ZN6S848C43v17Ev();
extern void _ZN6S848C43v18Ev();
extern void _ZN6S848C43v19Ev();
extern void _ZN6S848C43v20Ev();
extern void _ZN6S848C43v21Ev();
extern void _ZN6S848C43v22Ev();
extern void _ZN6S848C43v23Ev();
extern void _ZN6S848C43v24Ev();
extern void _ZN6S848C43v25Ev();
extern void _ZN6S848C43v26Ev();
extern void _ZN6S848C43v27Ev();
extern void _ZN6S848C43v28Ev();
extern void _ZN6S848C43v29Ev();
extern void _ZN6S848C43v30Ev();
extern void _ZN6S848C43v31Ev();
extern void _ZN6S848C43v32Ev();
extern void _ZN6S848C43v33Ev();
extern void _ZN6S848C43v34Ev();
extern void _ZN6S848C43v35Ev();
extern void _ZN6S848C43v36Ev();
extern void ABISELECT(_ZThn8_N6S848C4D1Ev,_ZThn4_N6S848C4D1Ev)();
extern void ABISELECT(_ZThn8_N6S848C4D0Ev,_ZThn4_N6S848C4D0Ev)();
extern void _ZN6S848C63v14Ev();
static  VTBL_ENTRY vtc_S848C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S848C4[0]),
  (VTBL_ENTRY)&_ZN6S848C4D1Ev,
  (VTBL_ENTRY)&_ZN6S848C4D0Ev,
  (VTBL_ENTRY)&_ZN6S848C53v11Ev,
  (VTBL_ENTRY)&_ZN6S848C53v12Ev,
  (VTBL_ENTRY)&_ZN6S848C53v13Ev,
  (VTBL_ENTRY)&_ZN6S848C43v15Ev,
  (VTBL_ENTRY)&_ZN6S848C43v16Ev,
  (VTBL_ENTRY)&_ZN6S848C43v17Ev,
  (VTBL_ENTRY)&_ZN6S848C43v18Ev,
  (VTBL_ENTRY)&_ZN6S848C43v19Ev,
  (VTBL_ENTRY)&_ZN6S848C43v20Ev,
  (VTBL_ENTRY)&_ZN6S848C43v21Ev,
  (VTBL_ENTRY)&_ZN6S848C43v22Ev,
  (VTBL_ENTRY)&_ZN6S848C43v23Ev,
  (VTBL_ENTRY)&_ZN6S848C43v24Ev,
  (VTBL_ENTRY)&_ZN6S848C43v25Ev,
  (VTBL_ENTRY)&_ZN6S848C43v26Ev,
  (VTBL_ENTRY)&_ZN6S848C43v27Ev,
  (VTBL_ENTRY)&_ZN6S848C43v28Ev,
  (VTBL_ENTRY)&_ZN6S848C43v29Ev,
  (VTBL_ENTRY)&_ZN6S848C43v30Ev,
  (VTBL_ENTRY)&_ZN6S848C43v31Ev,
  (VTBL_ENTRY)&_ZN6S848C43v32Ev,
  (VTBL_ENTRY)&_ZN6S848C43v33Ev,
  (VTBL_ENTRY)&_ZN6S848C43v34Ev,
  (VTBL_ENTRY)&_ZN6S848C43v35Ev,
  (VTBL_ENTRY)&_ZN6S848C43v36Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S848C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S848C4D1Ev,_ZThn4_N6S848C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S848C4D0Ev,_ZThn4_N6S848C4D0Ev),
  (VTBL_ENTRY)&_ZN6S848C63v14Ev,
};
extern VTBL_ENTRY _ZTI6S848C4[];
extern  VTBL_ENTRY _ZTV6S848C4[];
Class_Descriptor cd_S848C4 = {  "S848C4", // class name
  bases_S848C4, 2,
  &(vtc_S848C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S848C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S848C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S848C3  : S848C4 {
  ::S857C7_nt s848c3f0;
  ::S857C9_nt s848c3f1;
  char s848c3f2;
  virtual  ~S848C3(); // _ZN6S848C3D1Ev
  virtual void  v37(); // _ZN6S848C33v37Ev
  virtual void  v38(); // _ZN6S848C33v38Ev
  virtual void  v39(); // _ZN6S848C33v39Ev
  S848C3(); // tgen
};
//SIG(-1 S848C3) C1{ BC2{ BC3{ vd v4 v5 v6} BC4{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ FL[4]}} Fc}


 S848C3 ::~S848C3(){ note_dtor("S848C3", this);}
void  S848C3 ::v37(){vfunc_called(this, "_ZN6S848C33v37Ev");}
void  S848C3 ::v38(){vfunc_called(this, "_ZN6S848C33v38Ev");}
void  S848C3 ::v39(){vfunc_called(this, "_ZN6S848C33v39Ev");}
S848C3 ::S848C3(){ note_ctor("S848C3", this);} // tgen

static void Test_S848C3()
{
  extern Class_Descriptor cd_S848C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S848C3, buf);
    S848C3 *dp, &lv = *(dp=new (buf) S848C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S848C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S848C3)");
    check_base_class_offset(lv, (S848C5*)(S848C4*), 0, "S848C3");
    check_base_class_offset(lv, (S848C6*)(S848C4*), ABISELECT(8,4), "S848C3");
    check_base_class_offset(lv, (S848C4*), 0, "S848C3");
    check_field_offset(lv, s848c3f0, ABISELECT(16,8), "S848C3.s848c3f0");
    check_field_offset(lv, s848c3f1, ABISELECT(40,24), "S848C3.s848c3f1");
    check_field_offset(lv, s848c3f2, ABISELECT(72,56), "S848C3.s848c3f2");
    test_class_info(&lv, &cd_S848C3);
    dp->~S848C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS848C3(Test_S848C3, "S848C3", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN6S848C3C1Ev();
extern void _ZN6S848C3D1Ev();
Name_Map name_map_S848C3[] = {
  NSPAIR(_ZN6S848C3C1Ev),
  NSPAIR(_ZN6S848C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S848C5;
extern VTBL_ENTRY _ZTI6S848C5[];
extern  VTBL_ENTRY _ZTV6S848C5[];
extern Class_Descriptor cd_S848C6;
extern VTBL_ENTRY _ZTI6S848C6[];
extern  VTBL_ENTRY _ZTV6S848C6[];
extern Class_Descriptor cd_S848C4;
extern VTBL_ENTRY _ZTI6S848C4[];
extern  VTBL_ENTRY _ZTV6S848C4[];
static Base_Class bases_S848C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S848C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S848C6,    ABISELECT(8,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S848C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S848C3[];
extern void _ZN6S848C3D1Ev();
extern void _ZN6S848C3D0Ev();
extern void _ZN6S848C53v11Ev();
extern void _ZN6S848C53v12Ev();
extern void _ZN6S848C53v13Ev();
extern void _ZN6S848C43v15Ev();
extern void _ZN6S848C43v16Ev();
extern void _ZN6S848C43v17Ev();
extern void _ZN6S848C43v18Ev();
extern void _ZN6S848C43v19Ev();
extern void _ZN6S848C43v20Ev();
extern void _ZN6S848C43v21Ev();
extern void _ZN6S848C43v22Ev();
extern void _ZN6S848C43v23Ev();
extern void _ZN6S848C43v24Ev();
extern void _ZN6S848C43v25Ev();
extern void _ZN6S848C43v26Ev();
extern void _ZN6S848C43v27Ev();
extern void _ZN6S848C43v28Ev();
extern void _ZN6S848C43v29Ev();
extern void _ZN6S848C43v30Ev();
extern void _ZN6S848C43v31Ev();
extern void _ZN6S848C43v32Ev();
extern void _ZN6S848C43v33Ev();
extern void _ZN6S848C43v34Ev();
extern void _ZN6S848C43v35Ev();
extern void _ZN6S848C43v36Ev();
extern void _ZN6S848C33v37Ev();
extern void _ZN6S848C33v38Ev();
extern void _ZN6S848C33v39Ev();
extern void ABISELECT(_ZThn8_N6S848C3D1Ev,_ZThn4_N6S848C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S848C3D0Ev,_ZThn4_N6S848C3D0Ev)();
extern void _ZN6S848C63v14Ev();
static  VTBL_ENTRY vtc_S848C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S848C3[0]),
  (VTBL_ENTRY)&_ZN6S848C3D1Ev,
  (VTBL_ENTRY)&_ZN6S848C3D0Ev,
  (VTBL_ENTRY)&_ZN6S848C53v11Ev,
  (VTBL_ENTRY)&_ZN6S848C53v12Ev,
  (VTBL_ENTRY)&_ZN6S848C53v13Ev,
  (VTBL_ENTRY)&_ZN6S848C43v15Ev,
  (VTBL_ENTRY)&_ZN6S848C43v16Ev,
  (VTBL_ENTRY)&_ZN6S848C43v17Ev,
  (VTBL_ENTRY)&_ZN6S848C43v18Ev,
  (VTBL_ENTRY)&_ZN6S848C43v19Ev,
  (VTBL_ENTRY)&_ZN6S848C43v20Ev,
  (VTBL_ENTRY)&_ZN6S848C43v21Ev,
  (VTBL_ENTRY)&_ZN6S848C43v22Ev,
  (VTBL_ENTRY)&_ZN6S848C43v23Ev,
  (VTBL_ENTRY)&_ZN6S848C43v24Ev,
  (VTBL_ENTRY)&_ZN6S848C43v25Ev,
  (VTBL_ENTRY)&_ZN6S848C43v26Ev,
  (VTBL_ENTRY)&_ZN6S848C43v27Ev,
  (VTBL_ENTRY)&_ZN6S848C43v28Ev,
  (VTBL_ENTRY)&_ZN6S848C43v29Ev,
  (VTBL_ENTRY)&_ZN6S848C43v30Ev,
  (VTBL_ENTRY)&_ZN6S848C43v31Ev,
  (VTBL_ENTRY)&_ZN6S848C43v32Ev,
  (VTBL_ENTRY)&_ZN6S848C43v33Ev,
  (VTBL_ENTRY)&_ZN6S848C43v34Ev,
  (VTBL_ENTRY)&_ZN6S848C43v35Ev,
  (VTBL_ENTRY)&_ZN6S848C43v36Ev,
  (VTBL_ENTRY)&_ZN6S848C33v37Ev,
  (VTBL_ENTRY)&_ZN6S848C33v38Ev,
  (VTBL_ENTRY)&_ZN6S848C33v39Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S848C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S848C3D1Ev,_ZThn4_N6S848C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S848C3D0Ev,_ZThn4_N6S848C3D0Ev),
  (VTBL_ENTRY)&_ZN6S848C63v14Ev,
};
extern VTBL_ENTRY _ZTI6S848C3[];
extern  VTBL_ENTRY _ZTV6S848C3[];
Class_Descriptor cd_S848C3 = {  "S848C3", // class name
  bases_S848C3, 3,
  &(vtc_S848C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI6S848C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S848C3),37, //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  S848C11  {
  virtual  ~S848C11(); // _ZN7S848C11D1Ev
  virtual void  v40(); // _ZN7S848C113v40Ev
  S848C11(); // tgen
};
//SIG(-1 S848C11) C1{ vd v1}


 S848C11 ::~S848C11(){ note_dtor("S848C11", this);}
void  S848C11 ::v40(){vfunc_called(this, "_ZN7S848C113v40Ev");}
S848C11 ::S848C11(){ note_ctor("S848C11", this);} // tgen

static void Test_S848C11()
{
  extern Class_Descriptor cd_S848C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S848C11, buf);
    S848C11 *dp, &lv = *(dp=new (buf) S848C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S848C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S848C11)");
    test_class_info(&lv, &cd_S848C11);
    dp->~S848C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS848C11(Test_S848C11, "S848C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S848C11C1Ev();
extern void _ZN7S848C11D1Ev();
Name_Map name_map_S848C11[] = {
  NSPAIR(_ZN7S848C11C1Ev),
  NSPAIR(_ZN7S848C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S848C11[];
extern void _ZN7S848C11D1Ev();
extern void _ZN7S848C11D0Ev();
extern void _ZN7S848C113v40Ev();
static  VTBL_ENTRY vtc_S848C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S848C11[0]),
  (VTBL_ENTRY)&_ZN7S848C11D1Ev,
  (VTBL_ENTRY)&_ZN7S848C11D0Ev,
  (VTBL_ENTRY)&_ZN7S848C113v40Ev,
};
extern VTBL_ENTRY _ZTI7S848C11[];
extern  VTBL_ENTRY _ZTV7S848C11[];
Class_Descriptor cd_S848C11 = {  "S848C11", // class name
  0,0,//no base classes
  &(vtc_S848C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S848C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S848C11),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  S848C2  : S848C3 , S848C11 {
  ::S853C12 s848c2f0;
  ::S857C13_nt s848c2f1;
  char s848c2f2[2];
  void *s848c2f3;
  ::S857C16 s848c2f4;
  void *s848c2f5;
  virtual  ~S848C2(); // _ZN6S848C2D1Ev
  virtual void  v41(); // _ZN6S848C23v41Ev
  virtual void  v42(); // _ZN6S848C23v42Ev
  virtual void  v43(); // _ZN6S848C23v43Ev
  virtual void  v44(); // _ZN6S848C23v44Ev
  virtual void  v45(); // _ZN6S848C23v45Ev
  virtual void  v46(); // _ZN6S848C23v46Ev
  virtual void  v47(); // _ZN6S848C23v47Ev
  virtual void  v48(); // _ZN6S848C23v48Ev
  virtual void  v49(); // _ZN6S848C23v49Ev
  virtual void  v50(); // _ZN6S848C23v50Ev
  virtual void  v51(); // _ZN6S848C23v51Ev
  virtual void  v52(); // _ZN6S848C23v52Ev
  virtual void  v53(); // _ZN6S848C23v53Ev
  virtual void  v54(); // _ZN6S848C23v54Ev
  virtual void  v55(); // _ZN6S848C23v55Ev
  virtual void  v56(); // _ZN6S848C23v56Ev
  virtual void  v57(); // _ZN6S848C23v57Ev
  virtual void  v58(); // _ZN6S848C23v58Ev
  virtual void  v59(); // _ZN6S848C23v59Ev
  virtual void  v60(); // _ZN6S848C23v60Ev
  virtual void  v61(); // _ZN6S848C23v61Ev
  virtual void  v62(); // _ZN6S848C23v62Ev
  virtual void  v63(); // _ZN6S848C23v63Ev
  virtual void  v64(); // _ZN6S848C23v64Ev
  virtual void  v65(); // _ZN6S848C23v65Ev
  virtual void  v66(); // _ZN6S848C23v66Ev
  virtual void  v67(); // _ZN6S848C23v67Ev
  virtual void  v68(); // _ZN6S848C23v68Ev
  virtual void  v69(); // _ZN6S848C23v69Ev
  virtual void  v70(); // _ZN6S848C23v70Ev
  virtual void  v71(); // _ZN6S848C23v71Ev
  virtual void  v72(); // _ZN6S848C23v72Ev
  virtual void  v73(); // _ZN6S848C23v73Ev
  virtual void  v74(); // _ZN6S848C23v74Ev
  virtual void  v75(); // _ZN6S848C23v75Ev
  virtual void  v76(); // _ZN6S848C23v76Ev
  virtual void  v77(); // _ZN6S848C23v77Ev
  virtual void  v78(); // _ZN6S848C23v78Ev
  virtual void  v79(); // _ZN6S848C23v79Ev
  virtual void  v80(); // _ZN6S848C23v80Ev
  virtual void  v81(); // _ZN6S848C23v81Ev
  S848C2(); // tgen
};
//SIG(-1 S848C2) C1{ BC2{ BC3{ BC4{ vd v42 v43 v44} BC5{ vd v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67} vd v68 v69 v70 FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ FL[4]}} Fc} BC10{ vd v71} 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 FC11{ m FC9} FC12{ m Fp FC8 FC13{ m Fp FC14{ Fi[4]}} Fi Fc} Fc[2] Fp FC15{ BC16{ vd v74} BC17{ vd v75} vd v72 v73 Fp[2]} Fp}


 S848C2 ::~S848C2(){ note_dtor("S848C2", this);}
void  S848C2 ::v41(){vfunc_called(this, "_ZN6S848C23v41Ev");}
void  S848C2 ::v42(){vfunc_called(this, "_ZN6S848C23v42Ev");}
void  S848C2 ::v43(){vfunc_called(this, "_ZN6S848C23v43Ev");}
void  S848C2 ::v44(){vfunc_called(this, "_ZN6S848C23v44Ev");}
void  S848C2 ::v45(){vfunc_called(this, "_ZN6S848C23v45Ev");}
void  S848C2 ::v46(){vfunc_called(this, "_ZN6S848C23v46Ev");}
void  S848C2 ::v47(){vfunc_called(this, "_ZN6S848C23v47Ev");}
void  S848C2 ::v48(){vfunc_called(this, "_ZN6S848C23v48Ev");}
void  S848C2 ::v49(){vfunc_called(this, "_ZN6S848C23v49Ev");}
void  S848C2 ::v50(){vfunc_called(this, "_ZN6S848C23v50Ev");}
void  S848C2 ::v51(){vfunc_called(this, "_ZN6S848C23v51Ev");}
void  S848C2 ::v52(){vfunc_called(this, "_ZN6S848C23v52Ev");}
void  S848C2 ::v53(){vfunc_called(this, "_ZN6S848C23v53Ev");}
void  S848C2 ::v54(){vfunc_called(this, "_ZN6S848C23v54Ev");}
void  S848C2 ::v55(){vfunc_called(this, "_ZN6S848C23v55Ev");}
void  S848C2 ::v56(){vfunc_called(this, "_ZN6S848C23v56Ev");}
void  S848C2 ::v57(){vfunc_called(this, "_ZN6S848C23v57Ev");}
void  S848C2 ::v58(){vfunc_called(this, "_ZN6S848C23v58Ev");}
void  S848C2 ::v59(){vfunc_called(this, "_ZN6S848C23v59Ev");}
void  S848C2 ::v60(){vfunc_called(this, "_ZN6S848C23v60Ev");}
void  S848C2 ::v61(){vfunc_called(this, "_ZN6S848C23v61Ev");}
void  S848C2 ::v62(){vfunc_called(this, "_ZN6S848C23v62Ev");}
void  S848C2 ::v63(){vfunc_called(this, "_ZN6S848C23v63Ev");}
void  S848C2 ::v64(){vfunc_called(this, "_ZN6S848C23v64Ev");}
void  S848C2 ::v65(){vfunc_called(this, "_ZN6S848C23v65Ev");}
void  S848C2 ::v66(){vfunc_called(this, "_ZN6S848C23v66Ev");}
void  S848C2 ::v67(){vfunc_called(this, "_ZN6S848C23v67Ev");}
void  S848C2 ::v68(){vfunc_called(this, "_ZN6S848C23v68Ev");}
void  S848C2 ::v69(){vfunc_called(this, "_ZN6S848C23v69Ev");}
void  S848C2 ::v70(){vfunc_called(this, "_ZN6S848C23v70Ev");}
void  S848C2 ::v71(){vfunc_called(this, "_ZN6S848C23v71Ev");}
void  S848C2 ::v72(){vfunc_called(this, "_ZN6S848C23v72Ev");}
void  S848C2 ::v73(){vfunc_called(this, "_ZN6S848C23v73Ev");}
void  S848C2 ::v74(){vfunc_called(this, "_ZN6S848C23v74Ev");}
void  S848C2 ::v75(){vfunc_called(this, "_ZN6S848C23v75Ev");}
void  S848C2 ::v76(){vfunc_called(this, "_ZN6S848C23v76Ev");}
void  S848C2 ::v77(){vfunc_called(this, "_ZN6S848C23v77Ev");}
void  S848C2 ::v78(){vfunc_called(this, "_ZN6S848C23v78Ev");}
void  S848C2 ::v79(){vfunc_called(this, "_ZN6S848C23v79Ev");}
void  S848C2 ::v80(){vfunc_called(this, "_ZN6S848C23v80Ev");}
void  S848C2 ::v81(){vfunc_called(this, "_ZN6S848C23v81Ev");}
S848C2 ::S848C2(){ note_ctor("S848C2", this);} // tgen

static void Test_S848C2()
{
  extern Class_Descriptor cd_S848C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,48)];
    init_test(&cd_S848C2, buf);
    S848C2 *dp, &lv = *(dp=new (buf) S848C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,188), "sizeof(S848C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S848C2)");
    check_base_class_offset(lv, (S848C5*)(S848C4*)(S848C3*), 0, "S848C2");
    check_base_class_offset(lv, (S848C6*)(S848C4*)(S848C3*), ABISELECT(8,4), "S848C2");
    check_base_class_offset(lv, (S848C4*)(S848C3*), 0, "S848C2");
    check_base_class_offset(lv, (S848C3*), 0, "S848C2");
    check_base_class_offset(lv, (S848C11*), ABISELECT(80,60), "S848C2");
    check_field_offset(lv, s848c2f0, ABISELECT(88,64), "S848C2.s848c2f0");
    check_field_offset(lv, s848c2f1, ABISELECT(120,96), "S848C2.s848c2f1");
    check_field_offset(lv, s848c2f2, ABISELECT(192,160), "S848C2.s848c2f2");
    check_field_offset(lv, s848c2f3, ABISELECT(200,164), "S848C2.s848c2f3");
    check_field_offset(lv, s848c2f4, ABISELECT(208,168), "S848C2.s848c2f4");
    check_field_offset(lv, s848c2f5, ABISELECT(240,184), "S848C2.s848c2f5");
    test_class_info(&lv, &cd_S848C2);
    dp->~S848C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS848C2(Test_S848C2, "S848C2", ABISELECT(248,188));

#else // __cplusplus

extern void _ZN6S848C2C1Ev();
extern void _ZN6S848C2D1Ev();
Name_Map name_map_S848C2[] = {
  NSPAIR(_ZN6S848C2C1Ev),
  NSPAIR(_ZN6S848C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S848C5;
extern VTBL_ENTRY _ZTI6S848C5[];
extern  VTBL_ENTRY _ZTV6S848C5[];
extern Class_Descriptor cd_S848C6;
extern VTBL_ENTRY _ZTI6S848C6[];
extern  VTBL_ENTRY _ZTV6S848C6[];
extern Class_Descriptor cd_S848C4;
extern VTBL_ENTRY _ZTI6S848C4[];
extern  VTBL_ENTRY _ZTV6S848C4[];
extern Class_Descriptor cd_S848C3;
extern VTBL_ENTRY _ZTI6S848C3[];
extern  VTBL_ENTRY _ZTV6S848C3[];
extern Class_Descriptor cd_S848C11;
extern VTBL_ENTRY _ZTI7S848C11[];
extern  VTBL_ENTRY _ZTV7S848C11[];
static Base_Class bases_S848C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S848C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S848C6,    ABISELECT(8,4), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_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_S848C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S848C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S848C11,    ABISELECT(80,60), //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},
  {0}};
extern VTBL_ENTRY _ZTI6S848C2[];
extern void _ZN6S848C2D1Ev();
extern void _ZN6S848C2D0Ev();
extern void _ZN6S848C53v11Ev();
extern void _ZN6S848C53v12Ev();
extern void _ZN6S848C53v13Ev();
extern void _ZN6S848C43v15Ev();
extern void _ZN6S848C43v16Ev();
extern void _ZN6S848C43v17Ev();
extern void _ZN6S848C43v18Ev();
extern void _ZN6S848C43v19Ev();
extern void _ZN6S848C43v20Ev();
extern void _ZN6S848C43v21Ev();
extern void _ZN6S848C43v22Ev();
extern void _ZN6S848C43v23Ev();
extern void _ZN6S848C43v24Ev();
extern void _ZN6S848C43v25Ev();
extern void _ZN6S848C43v26Ev();
extern void _ZN6S848C43v27Ev();
extern void _ZN6S848C43v28Ev();
extern void _ZN6S848C43v29Ev();
extern void _ZN6S848C43v30Ev();
extern void _ZN6S848C43v31Ev();
extern void _ZN6S848C43v32Ev();
extern void _ZN6S848C43v33Ev();
extern void _ZN6S848C43v34Ev();
extern void _ZN6S848C43v35Ev();
extern void _ZN6S848C43v36Ev();
extern void _ZN6S848C33v37Ev();
extern void _ZN6S848C33v38Ev();
extern void _ZN6S848C33v39Ev();
extern void _ZN6S848C23v41Ev();
extern void _ZN6S848C23v42Ev();
extern void _ZN6S848C23v43Ev();
extern void _ZN6S848C23v44Ev();
extern void _ZN6S848C23v45Ev();
extern void _ZN6S848C23v46Ev();
extern void _ZN6S848C23v47Ev();
extern void _ZN6S848C23v48Ev();
extern void _ZN6S848C23v49Ev();
extern void _ZN6S848C23v50Ev();
extern void _ZN6S848C23v51Ev();
extern void _ZN6S848C23v52Ev();
extern void _ZN6S848C23v53Ev();
extern void _ZN6S848C23v54Ev();
extern void _ZN6S848C23v55Ev();
extern void _ZN6S848C23v56Ev();
extern void _ZN6S848C23v57Ev();
extern void _ZN6S848C23v58Ev();
extern void _ZN6S848C23v59Ev();
extern void _ZN6S848C23v60Ev();
extern void _ZN6S848C23v61Ev();
extern void _ZN6S848C23v62Ev();
extern void _ZN6S848C23v63Ev();
extern void _ZN6S848C23v64Ev();
extern void _ZN6S848C23v65Ev();
extern void _ZN6S848C23v66Ev();
extern void _ZN6S848C23v67Ev();
extern void _ZN6S848C23v68Ev();
extern void _ZN6S848C23v69Ev();
extern void _ZN6S848C23v70Ev();
extern void _ZN6S848C23v71Ev();
extern void _ZN6S848C23v72Ev();
extern void _ZN6S848C23v73Ev();
extern void _ZN6S848C23v74Ev();
extern void _ZN6S848C23v75Ev();
extern void _ZN6S848C23v76Ev();
extern void _ZN6S848C23v77Ev();
extern void _ZN6S848C23v78Ev();
extern void _ZN6S848C23v79Ev();
extern void _ZN6S848C23v80Ev();
extern void _ZN6S848C23v81Ev();
extern void ABISELECT(_ZThn8_N6S848C2D1Ev,_ZThn4_N6S848C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S848C2D0Ev,_ZThn4_N6S848C2D0Ev)();
extern void _ZN6S848C63v14Ev();
extern void ABISELECT(_ZThn80_N6S848C2D1Ev,_ZThn60_N6S848C2D1Ev)();
extern void ABISELECT(_ZThn80_N6S848C2D0Ev,_ZThn60_N6S848C2D0Ev)();
extern void _ZN7S848C113v40Ev();
static  VTBL_ENTRY vtc_S848C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S848C2[0]),
  (VTBL_ENTRY)&_ZN6S848C2D1Ev,
  (VTBL_ENTRY)&_ZN6S848C2D0Ev,
  (VTBL_ENTRY)&_ZN6S848C53v11Ev,
  (VTBL_ENTRY)&_ZN6S848C53v12Ev,
  (VTBL_ENTRY)&_ZN6S848C53v13Ev,
  (VTBL_ENTRY)&_ZN6S848C43v15Ev,
  (VTBL_ENTRY)&_ZN6S848C43v16Ev,
  (VTBL_ENTRY)&_ZN6S848C43v17Ev,
  (VTBL_ENTRY)&_ZN6S848C43v18Ev,
  (VTBL_ENTRY)&_ZN6S848C43v19Ev,
  (VTBL_ENTRY)&_ZN6S848C43v20Ev,
  (VTBL_ENTRY)&_ZN6S848C43v21Ev,
  (VTBL_ENTRY)&_ZN6S848C43v22Ev,
  (VTBL_ENTRY)&_ZN6S848C43v23Ev,
  (VTBL_ENTRY)&_ZN6S848C43v24Ev,
  (VTBL_ENTRY)&_ZN6S848C43v25Ev,
  (VTBL_ENTRY)&_ZN6S848C43v26Ev,
  (VTBL_ENTRY)&_ZN6S848C43v27Ev,
  (VTBL_ENTRY)&_ZN6S848C43v28Ev,
  (VTBL_ENTRY)&_ZN6S848C43v29Ev,
  (VTBL_ENTRY)&_ZN6S848C43v30Ev,
  (VTBL_ENTRY)&_ZN6S848C43v31Ev,
  (VTBL_ENTRY)&_ZN6S848C43v32Ev,
  (VTBL_ENTRY)&_ZN6S848C43v33Ev,
  (VTBL_ENTRY)&_ZN6S848C43v34Ev,
  (VTBL_ENTRY)&_ZN6S848C43v35Ev,
  (VTBL_ENTRY)&_ZN6S848C43v36Ev,
  (VTBL_ENTRY)&_ZN6S848C33v37Ev,
  (VTBL_ENTRY)&_ZN6S848C33v38Ev,
  (VTBL_ENTRY)&_ZN6S848C33v39Ev,
  (VTBL_ENTRY)&_ZN6S848C23v41Ev,
  (VTBL_ENTRY)&_ZN6S848C23v42Ev,
  (VTBL_ENTRY)&_ZN6S848C23v43Ev,
  (VTBL_ENTRY)&_ZN6S848C23v44Ev,
  (VTBL_ENTRY)&_ZN6S848C23v45Ev,
  (VTBL_ENTRY)&_ZN6S848C23v46Ev,
  (VTBL_ENTRY)&_ZN6S848C23v47Ev,
  (VTBL_ENTRY)&_ZN6S848C23v48Ev,
  (VTBL_ENTRY)&_ZN6S848C23v49Ev,
  (VTBL_ENTRY)&_ZN6S848C23v50Ev,
  (VTBL_ENTRY)&_ZN6S848C23v51Ev,
  (VTBL_ENTRY)&_ZN6S848C23v52Ev,
  (VTBL_ENTRY)&_ZN6S848C23v53Ev,
  (VTBL_ENTRY)&_ZN6S848C23v54Ev,
  (VTBL_ENTRY)&_ZN6S848C23v55Ev,
  (VTBL_ENTRY)&_ZN6S848C23v56Ev,
  (VTBL_ENTRY)&_ZN6S848C23v57Ev,
  (VTBL_ENTRY)&_ZN6S848C23v58Ev,
  (VTBL_ENTRY)&_ZN6S848C23v59Ev,
  (VTBL_ENTRY)&_ZN6S848C23v60Ev,
  (VTBL_ENTRY)&_ZN6S848C23v61Ev,
  (VTBL_ENTRY)&_ZN6S848C23v62Ev,
  (VTBL_ENTRY)&_ZN6S848C23v63Ev,
  (VTBL_ENTRY)&_ZN6S848C23v64Ev,
  (VTBL_ENTRY)&_ZN6S848C23v65Ev,
  (VTBL_ENTRY)&_ZN6S848C23v66Ev,
  (VTBL_ENTRY)&_ZN6S848C23v67Ev,
  (VTBL_ENTRY)&_ZN6S848C23v68Ev,
  (VTBL_ENTRY)&_ZN6S848C23v69Ev,
  (VTBL_ENTRY)&_ZN6S848C23v70Ev,
  (VTBL_ENTRY)&_ZN6S848C23v71Ev,
  (VTBL_ENTRY)&_ZN6S848C23v72Ev,
  (VTBL_ENTRY)&_ZN6S848C23v73Ev,
  (VTBL_ENTRY)&_ZN6S848C23v74Ev,
  (VTBL_ENTRY)&_ZN6S848C23v75Ev,
  (VTBL_ENTRY)&_ZN6S848C23v76Ev,
  (VTBL_ENTRY)&_ZN6S848C23v77Ev,
  (VTBL_ENTRY)&_ZN6S848C23v78Ev,
  (VTBL_ENTRY)&_ZN6S848C23v79Ev,
  (VTBL_ENTRY)&_ZN6S848C23v80Ev,
  (VTBL_ENTRY)&_ZN6S848C23v81Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S848C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S848C2D1Ev,_ZThn4_N6S848C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S848C2D0Ev,_ZThn4_N6S848C2D0Ev),
  (VTBL_ENTRY)&_ZN6S848C63v14Ev,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI6S848C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S848C2D1Ev,_ZThn60_N6S848C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S848C2D0Ev,_ZThn60_N6S848C2D0Ev),
  (VTBL_ENTRY)&_ZN7S848C113v40Ev,
};
extern VTBL_ENTRY _ZTI6S848C2[];
extern  VTBL_ENTRY _ZTV6S848C2[];
Class_Descriptor cd_S848C2 = {  "S848C2", // class name
  bases_S848C2, 5,
  &(vtc_S848C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,188), // object size
  NSPAIRA(_ZTI6S848C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S848C2),83, //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  S848C1  : S848C2 {
  virtual  ~S848C1(); // _ZN6S848C1D1Ev
  virtual void  v1(); // _ZN6S848C12v1Ev
  virtual void  v2(); // _ZN6S848C12v2Ev
  virtual void  v3(); // _ZN6S848C12v3Ev
  virtual void  v4(); // _ZN6S848C12v4Ev
  virtual void  v5(); // _ZN6S848C12v5Ev
  virtual void  v6(); // _ZN6S848C12v6Ev
  virtual void  v7(); // _ZN6S848C12v7Ev
  virtual void  v8(); // _ZN6S848C12v8Ev
  virtual void  v9(); // _ZN6S848C12v9Ev
  virtual void  v10(); // _ZN6S848C13v10Ev
  S848C1(); // tgen
};
//SIG(1 S848C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v11 v12 v13} BC6{ vd v14} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36} vd v37 v38 v39 FC7{ m Fp Fi[2] FC8{ m}} FC9{ m FC10{ FL[4]}} Fc} BC11{ vd v40} vd 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 FC12{ m FC10} FC13{ m Fp FC9 FC14{ m Fp FC15{ Fi[4]}} Fi Fc} Fc[2] Fp FC16{ BC17{ vd v84} BC18{ vd v85} vd v82 v83 Fp[2]} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S848C1 ::~S848C1(){ note_dtor("S848C1", this);}
void  S848C1 ::v1(){vfunc_called(this, "_ZN6S848C12v1Ev");}
void  S848C1 ::v2(){vfunc_called(this, "_ZN6S848C12v2Ev");}
void  S848C1 ::v3(){vfunc_called(this, "_ZN6S848C12v3Ev");}
void  S848C1 ::v4(){vfunc_called(this, "_ZN6S848C12v4Ev");}
void  S848C1 ::v5(){vfunc_called(this, "_ZN6S848C12v5Ev");}
void  S848C1 ::v6(){vfunc_called(this, "_ZN6S848C12v6Ev");}
void  S848C1 ::v7(){vfunc_called(this, "_ZN6S848C12v7Ev");}
void  S848C1 ::v8(){vfunc_called(this, "_ZN6S848C12v8Ev");}
void  S848C1 ::v9(){vfunc_called(this, "_ZN6S848C12v9Ev");}
void  S848C1 ::v10(){vfunc_called(this, "_ZN6S848C13v10Ev");}
S848C1 ::S848C1(){ note_ctor("S848C1", this);} // tgen

static void Test_S848C1()
{
  extern Class_Descriptor cd_S848C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,48)];
    init_test(&cd_S848C1, buf);
    S848C1 *dp, &lv = *(dp=new (buf) S848C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,188), "sizeof(S848C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S848C1)");
    check_base_class_offset(lv, (S848C5*)(S848C4*)(S848C3*)(S848C2*), 0, "S848C1");
    check_base_class_offset(lv, (S848C6*)(S848C4*)(S848C3*)(S848C2*), ABISELECT(8,4), "S848C1");
    check_base_class_offset(lv, (S848C4*)(S848C3*)(S848C2*), 0, "S848C1");
    check_base_class_offset(lv, (S848C3*)(S848C2*), 0, "S848C1");
    check_base_class_offset(lv, (S848C11*)(S848C2*), ABISELECT(80,60), "S848C1");
    check_base_class_offset(lv, (S848C2*), 0, "S848C1");
    test_class_info(&lv, &cd_S848C1);
    dp->~S848C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS848C1(Test_S848C1, "S848C1", ABISELECT(248,188));

#else // __cplusplus

extern void _ZN6S848C1C1Ev();
extern void _ZN6S848C1D1Ev();
Name_Map name_map_S848C1[] = {
  NSPAIR(_ZN6S848C1C1Ev),
  NSPAIR(_ZN6S848C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S848C5;
extern VTBL_ENTRY _ZTI6S848C5[];
extern  VTBL_ENTRY _ZTV6S848C5[];
extern Class_Descriptor cd_S848C6;
extern VTBL_ENTRY _ZTI6S848C6[];
extern  VTBL_ENTRY _ZTV6S848C6[];
extern Class_Descriptor cd_S848C4;
extern VTBL_ENTRY _ZTI6S848C4[];
extern  VTBL_ENTRY _ZTV6S848C4[];
extern Class_Descriptor cd_S848C3;
extern VTBL_ENTRY _ZTI6S848C3[];
extern  VTBL_ENTRY _ZTV6S848C3[];
extern Class_Descriptor cd_S848C11;
extern VTBL_ENTRY _ZTI7S848C11[];
extern  VTBL_ENTRY _ZTV7S848C11[];
extern Class_Descriptor cd_S848C2;
extern VTBL_ENTRY _ZTI6S848C2[];
extern  VTBL_ENTRY _ZTV6S848C2[];
static Base_Class bases_S848C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S848C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S848C6,    ABISELECT(8,4), //bcp->offset
    83, //bcp->virtual_function_table_offset
    2, //num_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_S848C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S848C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S848C11,    ABISELECT(80,60), //bcp->offset
    88, //bcp->virtual_function_table_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_S848C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S848C1[];
extern void _ZN6S848C1D1Ev();
extern void _ZN6S848C1D0Ev();
extern void _ZN6S848C53v11Ev();
extern void _ZN6S848C53v12Ev();
extern void _ZN6S848C53v13Ev();
extern void _ZN6S848C43v15Ev();
extern void _ZN6S848C43v16Ev();
extern void _ZN6S848C43v17Ev();
extern void _ZN6S848C43v18Ev();
extern void _ZN6S848C43v19Ev();
extern void _ZN6S848C43v20Ev();
extern void _ZN6S848C43v21Ev();
extern void _ZN6S848C43v22Ev();
extern void _ZN6S848C43v23Ev();
extern void _ZN6S848C43v24Ev();
extern void _ZN6S848C43v25Ev();
extern void _ZN6S848C43v26Ev();
extern void _ZN6S848C43v27Ev();
extern void _ZN6S848C43v28Ev();
extern void _ZN6S848C43v29Ev();
extern void _ZN6S848C43v30Ev();
extern void _ZN6S848C43v31Ev();
extern void _ZN6S848C43v32Ev();
extern void _ZN6S848C43v33Ev();
extern void _ZN6S848C43v34Ev();
extern void _ZN6S848C43v35Ev();
extern void _ZN6S848C43v36Ev();
extern void _ZN6S848C33v37Ev();
extern void _ZN6S848C33v38Ev();
extern void _ZN6S848C33v39Ev();
extern void _ZN6S848C23v41Ev();
extern void _ZN6S848C23v42Ev();
extern void _ZN6S848C23v43Ev();
extern void _ZN6S848C23v44Ev();
extern void _ZN6S848C23v45Ev();
extern void _ZN6S848C23v46Ev();
extern void _ZN6S848C23v47Ev();
extern void _ZN6S848C23v48Ev();
extern void _ZN6S848C23v49Ev();
extern void _ZN6S848C23v50Ev();
extern void _ZN6S848C23v51Ev();
extern void _ZN6S848C23v52Ev();
extern void _ZN6S848C23v53Ev();
extern void _ZN6S848C23v54Ev();
extern void _ZN6S848C23v55Ev();
extern void _ZN6S848C23v56Ev();
extern void _ZN6S848C23v57Ev();
extern void _ZN6S848C23v58Ev();
extern void _ZN6S848C23v59Ev();
extern void _ZN6S848C23v60Ev();
extern void _ZN6S848C23v61Ev();
extern void _ZN6S848C23v62Ev();
extern void _ZN6S848C23v63Ev();
extern void _ZN6S848C23v64Ev();
extern void _ZN6S848C23v65Ev();
extern void _ZN6S848C23v66Ev();
extern void _ZN6S848C23v67Ev();
extern void _ZN6S848C23v68Ev();
extern void _ZN6S848C23v69Ev();
extern void _ZN6S848C23v70Ev();
extern void _ZN6S848C23v71Ev();
extern void _ZN6S848C23v72Ev();
extern void _ZN6S848C23v73Ev();
extern void _ZN6S848C23v74Ev();
extern void _ZN6S848C23v75Ev();
extern void _ZN6S848C23v76Ev();
extern void _ZN6S848C23v77Ev();
extern void _ZN6S848C23v78Ev();
extern void _ZN6S848C23v79Ev();
extern void _ZN6S848C23v80Ev();
extern void _ZN6S848C23v81Ev();
extern void _ZN6S848C12v1Ev();
extern void _ZN6S848C12v2Ev();
extern void _ZN6S848C12v3Ev();
extern void _ZN6S848C12v4Ev();
extern void _ZN6S848C12v5Ev();
extern void _ZN6S848C12v6Ev();
extern void _ZN6S848C12v7Ev();
extern void _ZN6S848C12v8Ev();
extern void _ZN6S848C12v9Ev();
extern void _ZN6S848C13v10Ev();
extern void ABISELECT(_ZThn8_N6S848C1D1Ev,_ZThn4_N6S848C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S848C1D0Ev,_ZThn4_N6S848C1D0Ev)();
extern void _ZN6S848C63v14Ev();
extern void ABISELECT(_ZThn80_N6S848C1D1Ev,_ZThn60_N6S848C1D1Ev)();
extern void ABISELECT(_ZThn80_N6S848C1D0Ev,_ZThn60_N6S848C1D0Ev)();
extern void _ZN7S848C113v40Ev();
static  VTBL_ENTRY vtc_S848C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S848C1[0]),
  (VTBL_ENTRY)&_ZN6S848C1D1Ev,
  (VTBL_ENTRY)&_ZN6S848C1D0Ev,
  (VTBL_ENTRY)&_ZN6S848C53v11Ev,
  (VTBL_ENTRY)&_ZN6S848C53v12Ev,
  (VTBL_ENTRY)&_ZN6S848C53v13Ev,
  (VTBL_ENTRY)&_ZN6S848C43v15Ev,
  (VTBL_ENTRY)&_ZN6S848C43v16Ev,
  (VTBL_ENTRY)&_ZN6S848C43v17Ev,
  (VTBL_ENTRY)&_ZN6S848C43v18Ev,
  (VTBL_ENTRY)&_ZN6S848C43v19Ev,
  (VTBL_ENTRY)&_ZN6S848C43v20Ev,
  (VTBL_ENTRY)&_ZN6S848C43v21Ev,
  (VTBL_ENTRY)&_ZN6S848C43v22Ev,
  (VTBL_ENTRY)&_ZN6S848C43v23Ev,
  (VTBL_ENTRY)&_ZN6S848C43v24Ev,
  (VTBL_ENTRY)&_ZN6S848C43v25Ev,
  (VTBL_ENTRY)&_ZN6S848C43v26Ev,
  (VTBL_ENTRY)&_ZN6S848C43v27Ev,
  (VTBL_ENTRY)&_ZN6S848C43v28Ev,
  (VTBL_ENTRY)&_ZN6S848C43v29Ev,
  (VTBL_ENTRY)&_ZN6S848C43v30Ev,
  (VTBL_ENTRY)&_ZN6S848C43v31Ev,
  (VTBL_ENTRY)&_ZN6S848C43v32Ev,
  (VTBL_ENTRY)&_ZN6S848C43v33Ev,
  (VTBL_ENTRY)&_ZN6S848C43v34Ev,
  (VTBL_ENTRY)&_ZN6S848C43v35Ev,
  (VTBL_ENTRY)&_ZN6S848C43v36Ev,
  (VTBL_ENTRY)&_ZN6S848C33v37Ev,
  (VTBL_ENTRY)&_ZN6S848C33v38Ev,
  (VTBL_ENTRY)&_ZN6S848C33v39Ev,
  (VTBL_ENTRY)&_ZN6S848C23v41Ev,
  (VTBL_ENTRY)&_ZN6S848C23v42Ev,
  (VTBL_ENTRY)&_ZN6S848C23v43Ev,
  (VTBL_ENTRY)&_ZN6S848C23v44Ev,
  (VTBL_ENTRY)&_ZN6S848C23v45Ev,
  (VTBL_ENTRY)&_ZN6S848C23v46Ev,
  (VTBL_ENTRY)&_ZN6S848C23v47Ev,
  (VTBL_ENTRY)&_ZN6S848C23v48Ev,
  (VTBL_ENTRY)&_ZN6S848C23v49Ev,
  (VTBL_ENTRY)&_ZN6S848C23v50Ev,
  (VTBL_ENTRY)&_ZN6S848C23v51Ev,
  (VTBL_ENTRY)&_ZN6S848C23v52Ev,
  (VTBL_ENTRY)&_ZN6S848C23v53Ev,
  (VTBL_ENTRY)&_ZN6S848C23v54Ev,
  (VTBL_ENTRY)&_ZN6S848C23v55Ev,
  (VTBL_ENTRY)&_ZN6S848C23v56Ev,
  (VTBL_ENTRY)&_ZN6S848C23v57Ev,
  (VTBL_ENTRY)&_ZN6S848C23v58Ev,
  (VTBL_ENTRY)&_ZN6S848C23v59Ev,
  (VTBL_ENTRY)&_ZN6S848C23v60Ev,
  (VTBL_ENTRY)&_ZN6S848C23v61Ev,
  (VTBL_ENTRY)&_ZN6S848C23v62Ev,
  (VTBL_ENTRY)&_ZN6S848C23v63Ev,
  (VTBL_ENTRY)&_ZN6S848C23v64Ev,
  (VTBL_ENTRY)&_ZN6S848C23v65Ev,
  (VTBL_ENTRY)&_ZN6S848C23v66Ev,
  (VTBL_ENTRY)&_ZN6S848C23v67Ev,
  (VTBL_ENTRY)&_ZN6S848C23v68Ev,
  (VTBL_ENTRY)&_ZN6S848C23v69Ev,
  (VTBL_ENTRY)&_ZN6S848C23v70Ev,
  (VTBL_ENTRY)&_ZN6S848C23v71Ev,
  (VTBL_ENTRY)&_ZN6S848C23v72Ev,
  (VTBL_ENTRY)&_ZN6S848C23v73Ev,
  (VTBL_ENTRY)&_ZN6S848C23v74Ev,
  (VTBL_ENTRY)&_ZN6S848C23v75Ev,
  (VTBL_ENTRY)&_ZN6S848C23v76Ev,
  (VTBL_ENTRY)&_ZN6S848C23v77Ev,
  (VTBL_ENTRY)&_ZN6S848C23v78Ev,
  (VTBL_ENTRY)&_ZN6S848C23v79Ev,
  (VTBL_ENTRY)&_ZN6S848C23v80Ev,
  (VTBL_ENTRY)&_ZN6S848C23v81Ev,
  (VTBL_ENTRY)&_ZN6S848C12v1Ev,
  (VTBL_ENTRY)&_ZN6S848C12v2Ev,
  (VTBL_ENTRY)&_ZN6S848C12v3Ev,
  (VTBL_ENTRY)&_ZN6S848C12v4Ev,
  (VTBL_ENTRY)&_ZN6S848C12v5Ev,
  (VTBL_ENTRY)&_ZN6S848C12v6Ev,
  (VTBL_ENTRY)&_ZN6S848C12v7Ev,
  (VTBL_ENTRY)&_ZN6S848C12v8Ev,
  (VTBL_ENTRY)&_ZN6S848C12v9Ev,
  (VTBL_ENTRY)&_ZN6S848C13v10Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S848C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S848C1D1Ev,_ZThn4_N6S848C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S848C1D0Ev,_ZThn4_N6S848C1D0Ev),
  (VTBL_ENTRY)&_ZN6S848C63v14Ev,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI6S848C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S848C1D1Ev,_ZThn60_N6S848C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S848C1D0Ev,_ZThn60_N6S848C1D0Ev),
  (VTBL_ENTRY)&_ZN7S848C113v40Ev,
};
extern VTBL_ENTRY _ZTI6S848C1[];
extern  VTBL_ENTRY _ZTV6S848C1[];
Class_Descriptor cd_S848C1 = {  "S848C1", // class name
  bases_S848C1, 6,
  &(vtc_S848C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,188), // object size
  NSPAIRA(_ZTI6S848C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S848C1),93, //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  S847C5  {
  virtual  ~S847C5(); // _ZN6S847C5D1Ev
  virtual void  v11(); // _ZN6S847C53v11Ev
  virtual void  v12(); // _ZN6S847C53v12Ev
  virtual void  v13(); // _ZN6S847C53v13Ev
  S847C5(); // tgen
};
//SIG(-1 S847C5) C1{ vd v1 v2 v3}


 S847C5 ::~S847C5(){ note_dtor("S847C5", this);}
void  S847C5 ::v11(){vfunc_called(this, "_ZN6S847C53v11Ev");}
void  S847C5 ::v12(){vfunc_called(this, "_ZN6S847C53v12Ev");}
void  S847C5 ::v13(){vfunc_called(this, "_ZN6S847C53v13Ev");}
S847C5 ::S847C5(){ note_ctor("S847C5", this);} // tgen

static void Test_S847C5()
{
  extern Class_Descriptor cd_S847C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S847C5, buf);
    S847C5 *dp, &lv = *(dp=new (buf) S847C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S847C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S847C5)");
    test_class_info(&lv, &cd_S847C5);
    dp->~S847C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS847C5(Test_S847C5, "S847C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S847C5C1Ev();
extern void _ZN6S847C5D1Ev();
Name_Map name_map_S847C5[] = {
  NSPAIR(_ZN6S847C5C1Ev),
  NSPAIR(_ZN6S847C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S847C5[];
extern void _ZN6S847C5D1Ev();
extern void _ZN6S847C5D0Ev();
extern void _ZN6S847C53v11Ev();
extern void _ZN6S847C53v12Ev();
extern void _ZN6S847C53v13Ev();
static  VTBL_ENTRY vtc_S847C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S847C5[0]),
  (VTBL_ENTRY)&_ZN6S847C5D1Ev,
  (VTBL_ENTRY)&_ZN6S847C5D0Ev,
  (VTBL_ENTRY)&_ZN6S847C53v11Ev,
  (VTBL_ENTRY)&_ZN6S847C53v12Ev,
  (VTBL_ENTRY)&_ZN6S847C53v13Ev,
};
extern VTBL_ENTRY _ZTI6S847C5[];
extern  VTBL_ENTRY _ZTV6S847C5[];
Class_Descriptor cd_S847C5 = {  "S847C5", // class name
  0,0,//no base classes
  &(vtc_S847C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S847C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S847C5),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  S847C6  {
  virtual  ~S847C6(); // _ZN6S847C6D1Ev
  virtual void  v14(); // _ZN6S847C63v14Ev
  S847C6(); // tgen
};
//SIG(-1 S847C6) C1{ vd v1}


 S847C6 ::~S847C6(){ note_dtor("S847C6", this);}
void  S847C6 ::v14(){vfunc_called(this, "_ZN6S847C63v14Ev");}
S847C6 ::S847C6(){ note_ctor("S847C6", this);} // tgen

static void Test_S847C6()
{
  extern Class_Descriptor cd_S847C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S847C6, buf);
    S847C6 *dp, &lv = *(dp=new (buf) S847C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S847C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S847C6)");
    test_class_info(&lv, &cd_S847C6);
    dp->~S847C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS847C6(Test_S847C6, "S847C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S847C6C1Ev();
extern void _ZN6S847C6D1Ev();
Name_Map name_map_S847C6[] = {
  NSPAIR(_ZN6S847C6C1Ev),
  NSPAIR(_ZN6S847C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S847C6[];
extern void _ZN6S847C6D1Ev();
extern void _ZN6S847C6D0Ev();
extern void _ZN6S847C63v14Ev();
static  VTBL_ENTRY vtc_S847C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S847C6[0]),
  (VTBL_ENTRY)&_ZN6S847C6D1Ev,
  (VTBL_ENTRY)&_ZN6S847C6D0Ev,
  (VTBL_ENTRY)&_ZN6S847C63v14Ev,
};
extern VTBL_ENTRY _ZTI6S847C6[];
extern  VTBL_ENTRY _ZTV6S847C6[];
Class_Descriptor cd_S847C6 = {  "S847C6", // class name
  0,0,//no base classes
  &(vtc_S847C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S847C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S847C6),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  S847C4  : S847C5 , S847C6 {
  virtual  ~S847C4(); // _ZN6S847C4D1Ev
  virtual void  v15(); // _ZN6S847C43v15Ev
  virtual void  v16(); // _ZN6S847C43v16Ev
  virtual void  v17(); // _ZN6S847C43v17Ev
  virtual void  v18(); // _ZN6S847C43v18Ev
  virtual void  v19(); // _ZN6S847C43v19Ev
  virtual void  v20(); // _ZN6S847C43v20Ev
  virtual void  v21(); // _ZN6S847C43v21Ev
  virtual void  v22(); // _ZN6S847C43v22Ev
  virtual void  v23(); // _ZN6S847C43v23Ev
  virtual void  v24(); // _ZN6S847C43v24Ev
  virtual void  v25(); // _ZN6S847C43v25Ev
  virtual void  v26(); // _ZN6S847C43v26Ev
  virtual void  v27(); // _ZN6S847C43v27Ev
  virtual void  v28(); // _ZN6S847C43v28Ev
  virtual void  v29(); // _ZN6S847C43v29Ev
  virtual void  v30(); // _ZN6S847C43v30Ev
  virtual void  v31(); // _ZN6S847C43v31Ev
  virtual void  v32(); // _ZN6S847C43v32Ev
  virtual void  v33(); // _ZN6S847C43v33Ev
  virtual void  v34(); // _ZN6S847C43v34Ev
  virtual void  v35(); // _ZN6S847C43v35Ev
  virtual void  v36(); // _ZN6S847C43v36Ev
  S847C4(); // tgen
};
//SIG(-1 S847C4) C1{ BC2{ vd v23 v24 v25} BC3{ vd v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S847C4 ::~S847C4(){ note_dtor("S847C4", this);}
void  S847C4 ::v15(){vfunc_called(this, "_ZN6S847C43v15Ev");}
void  S847C4 ::v16(){vfunc_called(this, "_ZN6S847C43v16Ev");}
void  S847C4 ::v17(){vfunc_called(this, "_ZN6S847C43v17Ev");}
void  S847C4 ::v18(){vfunc_called(this, "_ZN6S847C43v18Ev");}
void  S847C4 ::v19(){vfunc_called(this, "_ZN6S847C43v19Ev");}
void  S847C4 ::v20(){vfunc_called(this, "_ZN6S847C43v20Ev");}
void  S847C4 ::v21(){vfunc_called(this, "_ZN6S847C43v21Ev");}
void  S847C4 ::v22(){vfunc_called(this, "_ZN6S847C43v22Ev");}
void  S847C4 ::v23(){vfunc_called(this, "_ZN6S847C43v23Ev");}
void  S847C4 ::v24(){vfunc_called(this, "_ZN6S847C43v24Ev");}
void  S847C4 ::v25(){vfunc_called(this, "_ZN6S847C43v25Ev");}
void  S847C4 ::v26(){vfunc_called(this, "_ZN6S847C43v26Ev");}
void  S847C4 ::v27(){vfunc_called(this, "_ZN6S847C43v27Ev");}
void  S847C4 ::v28(){vfunc_called(this, "_ZN6S847C43v28Ev");}
void  S847C4 ::v29(){vfunc_called(this, "_ZN6S847C43v29Ev");}
void  S847C4 ::v30(){vfunc_called(this, "_ZN6S847C43v30Ev");}
void  S847C4 ::v31(){vfunc_called(this, "_ZN6S847C43v31Ev");}
void  S847C4 ::v32(){vfunc_called(this, "_ZN6S847C43v32Ev");}
void  S847C4 ::v33(){vfunc_called(this, "_ZN6S847C43v33Ev");}
void  S847C4 ::v34(){vfunc_called(this, "_ZN6S847C43v34Ev");}
void  S847C4 ::v35(){vfunc_called(this, "_ZN6S847C43v35Ev");}
void  S847C4 ::v36(){vfunc_called(this, "_ZN6S847C43v36Ev");}
S847C4 ::S847C4(){ note_ctor("S847C4", this);} // tgen

static void Test_S847C4()
{
  extern Class_Descriptor cd_S847C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S847C4, buf);
    S847C4 *dp, &lv = *(dp=new (buf) S847C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S847C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S847C4)");
    check_base_class_offset(lv, (S847C5*), 0, "S847C4");
    check_base_class_offset(lv, (S847C6*), ABISELECT(8,4), "S847C4");
    test_class_info(&lv, &cd_S847C4);
    dp->~S847C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS847C4(Test_S847C4, "S847C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S847C4C1Ev();
extern void _ZN6S847C4D1Ev();
Name_Map name_map_S847C4[] = {
  NSPAIR(_ZN6S847C4C1Ev),
  NSPAIR(_ZN6S847C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S847C5;
extern VTBL_ENTRY _ZTI6S847C5[];
extern  VTBL_ENTRY _ZTV6S847C5[];
extern Class_Descriptor cd_S847C6;
extern VTBL_ENTRY _ZTI6S847C6[];
extern  VTBL_ENTRY _ZTV6S847C6[];
static Base_Class bases_S847C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S847C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S847C6,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S847C4[];
extern void _ZN6S847C4D1Ev();
extern void _ZN6S847C4D0Ev();
extern void _ZN6S847C53v11Ev();
extern void _ZN6S847C53v12Ev();
extern void _ZN6S847C53v13Ev();
extern void _ZN6S847C43v15Ev();
extern void _ZN6S847C43v16Ev();
extern void _ZN6S847C43v17Ev();
extern void _ZN6S847C43v18Ev();
extern void _ZN6S847C43v19Ev();
extern void _ZN6S847C43v20Ev();
extern void _ZN6S847C43v21Ev();
extern void _ZN6S847C43v22Ev();
extern void _ZN6S847C43v23Ev();
extern void _ZN6S847C43v24Ev();
extern void _ZN6S847C43v25Ev();
extern void _ZN6S847C43v26Ev();
extern void _ZN6S847C43v27Ev();
extern void _ZN6S847C43v28Ev();
extern void _ZN6S847C43v29Ev();
extern void _ZN6S847C43v30Ev();
extern void _ZN6S847C43v31Ev();
extern void _ZN6S847C43v32Ev();
extern void _ZN6S847C43v33Ev();
extern void _ZN6S847C43v34Ev();
extern void _ZN6S847C43v35Ev();
extern void _ZN6S847C43v36Ev();
extern void ABISELECT(_ZThn8_N6S847C4D1Ev,_ZThn4_N6S847C4D1Ev)();
extern void ABISELECT(_ZThn8_N6S847C4D0Ev,_ZThn4_N6S847C4D0Ev)();
extern void _ZN6S847C63v14Ev();
static  VTBL_ENTRY vtc_S847C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S847C4[0]),
  (VTBL_ENTRY)&_ZN6S847C4D1Ev,
  (VTBL_ENTRY)&_ZN6S847C4D0Ev,
  (VTBL_ENTRY)&_ZN6S847C53v11Ev,
  (VTBL_ENTRY)&_ZN6S847C53v12Ev,
  (VTBL_ENTRY)&_ZN6S847C53v13Ev,
  (VTBL_ENTRY)&_ZN6S847C43v15Ev,
  (VTBL_ENTRY)&_ZN6S847C43v16Ev,
  (VTBL_ENTRY)&_ZN6S847C43v17Ev,
  (VTBL_ENTRY)&_ZN6S847C43v18Ev,
  (VTBL_ENTRY)&_ZN6S847C43v19Ev,
  (VTBL_ENTRY)&_ZN6S847C43v20Ev,
  (VTBL_ENTRY)&_ZN6S847C43v21Ev,
  (VTBL_ENTRY)&_ZN6S847C43v22Ev,
  (VTBL_ENTRY)&_ZN6S847C43v23Ev,
  (VTBL_ENTRY)&_ZN6S847C43v24Ev,
  (VTBL_ENTRY)&_ZN6S847C43v25Ev,
  (VTBL_ENTRY)&_ZN6S847C43v26Ev,
  (VTBL_ENTRY)&_ZN6S847C43v27Ev,
  (VTBL_ENTRY)&_ZN6S847C43v28Ev,
  (VTBL_ENTRY)&_ZN6S847C43v29Ev,
  (VTBL_ENTRY)&_ZN6S847C43v30Ev,
  (VTBL_ENTRY)&_ZN6S847C43v31Ev,
  (VTBL_ENTRY)&_ZN6S847C43v32Ev,
  (VTBL_ENTRY)&_ZN6S847C43v33Ev,
  (VTBL_ENTRY)&_ZN6S847C43v34Ev,
  (VTBL_ENTRY)&_ZN6S847C43v35Ev,
  (VTBL_ENTRY)&_ZN6S847C43v36Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S847C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S847C4D1Ev,_ZThn4_N6S847C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S847C4D0Ev,_ZThn4_N6S847C4D0Ev),
  (VTBL_ENTRY)&_ZN6S847C63v14Ev,
};
extern VTBL_ENTRY _ZTI6S847C4[];
extern  VTBL_ENTRY _ZTV6S847C4[];
Class_Descriptor cd_S847C4 = {  "S847C4", // class name
  bases_S847C4, 2,
  &(vtc_S847C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S847C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S847C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S847C3  : S847C4 {
  ::S857C7_nt s847c3f0;
  ::S856C9_nt s847c3f1;
  char s847c3f2;
  virtual  ~S847C3(); // _ZN6S847C3D1Ev
  virtual void  v37(); // _ZN6S847C33v37Ev
  virtual void  v38(); // _ZN6S847C33v38Ev
  virtual void  v39(); // _ZN6S847C33v39Ev
  S847C3(); // tgen
};
//SIG(-1 S847C3) C1{ BC2{ BC3{ vd v4 v5 v6} BC4{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ Fl[4]}} Fc}


 S847C3 ::~S847C3(){ note_dtor("S847C3", this);}
void  S847C3 ::v37(){vfunc_called(this, "_ZN6S847C33v37Ev");}
void  S847C3 ::v38(){vfunc_called(this, "_ZN6S847C33v38Ev");}
void  S847C3 ::v39(){vfunc_called(this, "_ZN6S847C33v39Ev");}
S847C3 ::S847C3(){ note_ctor("S847C3", this);} // tgen

static void Test_S847C3()
{
  extern Class_Descriptor cd_S847C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S847C3, buf);
    S847C3 *dp, &lv = *(dp=new (buf) S847C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S847C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S847C3)");
    check_base_class_offset(lv, (S847C5*)(S847C4*), 0, "S847C3");
    check_base_class_offset(lv, (S847C6*)(S847C4*), ABISELECT(8,4), "S847C3");
    check_base_class_offset(lv, (S847C4*), 0, "S847C3");
    check_field_offset(lv, s847c3f0, ABISELECT(16,8), "S847C3.s847c3f0");
    check_field_offset(lv, s847c3f1, ABISELECT(40,24), "S847C3.s847c3f1");
    check_field_offset(lv, s847c3f2, ABISELECT(72,40), "S847C3.s847c3f2");
    test_class_info(&lv, &cd_S847C3);
    dp->~S847C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS847C3(Test_S847C3, "S847C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S847C3C1Ev();
extern void _ZN6S847C3D1Ev();
Name_Map name_map_S847C3[] = {
  NSPAIR(_ZN6S847C3C1Ev),
  NSPAIR(_ZN6S847C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S847C5;
extern VTBL_ENTRY _ZTI6S847C5[];
extern  VTBL_ENTRY _ZTV6S847C5[];
extern Class_Descriptor cd_S847C6;
extern VTBL_ENTRY _ZTI6S847C6[];
extern  VTBL_ENTRY _ZTV6S847C6[];
extern Class_Descriptor cd_S847C4;
extern VTBL_ENTRY _ZTI6S847C4[];
extern  VTBL_ENTRY _ZTV6S847C4[];
static Base_Class bases_S847C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S847C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S847C6,    ABISELECT(8,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S847C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S847C3[];
extern void _ZN6S847C3D1Ev();
extern void _ZN6S847C3D0Ev();
extern void _ZN6S847C53v11Ev();
extern void _ZN6S847C53v12Ev();
extern void _ZN6S847C53v13Ev();
extern void _ZN6S847C43v15Ev();
extern void _ZN6S847C43v16Ev();
extern void _ZN6S847C43v17Ev();
extern void _ZN6S847C43v18Ev();
extern void _ZN6S847C43v19Ev();
extern void _ZN6S847C43v20Ev();
extern void _ZN6S847C43v21Ev();
extern void _ZN6S847C43v22Ev();
extern void _ZN6S847C43v23Ev();
extern void _ZN6S847C43v24Ev();
extern void _ZN6S847C43v25Ev();
extern void _ZN6S847C43v26Ev();
extern void _ZN6S847C43v27Ev();
extern void _ZN6S847C43v28Ev();
extern void _ZN6S847C43v29Ev();
extern void _ZN6S847C43v30Ev();
extern void _ZN6S847C43v31Ev();
extern void _ZN6S847C43v32Ev();
extern void _ZN6S847C43v33Ev();
extern void _ZN6S847C43v34Ev();
extern void _ZN6S847C43v35Ev();
extern void _ZN6S847C43v36Ev();
extern void _ZN6S847C33v37Ev();
extern void _ZN6S847C33v38Ev();
extern void _ZN6S847C33v39Ev();
extern void ABISELECT(_ZThn8_N6S847C3D1Ev,_ZThn4_N6S847C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S847C3D0Ev,_ZThn4_N6S847C3D0Ev)();
extern void _ZN6S847C63v14Ev();
static  VTBL_ENTRY vtc_S847C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S847C3[0]),
  (VTBL_ENTRY)&_ZN6S847C3D1Ev,
  (VTBL_ENTRY)&_ZN6S847C3D0Ev,
  (VTBL_ENTRY)&_ZN6S847C53v11Ev,
  (VTBL_ENTRY)&_ZN6S847C53v12Ev,
  (VTBL_ENTRY)&_ZN6S847C53v13Ev,
  (VTBL_ENTRY)&_ZN6S847C43v15Ev,
  (VTBL_ENTRY)&_ZN6S847C43v16Ev,
  (VTBL_ENTRY)&_ZN6S847C43v17Ev,
  (VTBL_ENTRY)&_ZN6S847C43v18Ev,
  (VTBL_ENTRY)&_ZN6S847C43v19Ev,
  (VTBL_ENTRY)&_ZN6S847C43v20Ev,
  (VTBL_ENTRY)&_ZN6S847C43v21Ev,
  (VTBL_ENTRY)&_ZN6S847C43v22Ev,
  (VTBL_ENTRY)&_ZN6S847C43v23Ev,
  (VTBL_ENTRY)&_ZN6S847C43v24Ev,
  (VTBL_ENTRY)&_ZN6S847C43v25Ev,
  (VTBL_ENTRY)&_ZN6S847C43v26Ev,
  (VTBL_ENTRY)&_ZN6S847C43v27Ev,
  (VTBL_ENTRY)&_ZN6S847C43v28Ev,
  (VTBL_ENTRY)&_ZN6S847C43v29Ev,
  (VTBL_ENTRY)&_ZN6S847C43v30Ev,
  (VTBL_ENTRY)&_ZN6S847C43v31Ev,
  (VTBL_ENTRY)&_ZN6S847C43v32Ev,
  (VTBL_ENTRY)&_ZN6S847C43v33Ev,
  (VTBL_ENTRY)&_ZN6S847C43v34Ev,
  (VTBL_ENTRY)&_ZN6S847C43v35Ev,
  (VTBL_ENTRY)&_ZN6S847C43v36Ev,
  (VTBL_ENTRY)&_ZN6S847C33v37Ev,
  (VTBL_ENTRY)&_ZN6S847C33v38Ev,
  (VTBL_ENTRY)&_ZN6S847C33v39Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S847C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S847C3D1Ev,_ZThn4_N6S847C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S847C3D0Ev,_ZThn4_N6S847C3D0Ev),
  (VTBL_ENTRY)&_ZN6S847C63v14Ev,
};
extern VTBL_ENTRY _ZTI6S847C3[];
extern  VTBL_ENTRY _ZTV6S847C3[];
Class_Descriptor cd_S847C3 = {  "S847C3", // class name
  bases_S847C3, 3,
  &(vtc_S847C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S847C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S847C3),37, //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  S847C11  {
  virtual  ~S847C11(); // _ZN7S847C11D1Ev
  virtual void  v40(); // _ZN7S847C113v40Ev
  S847C11(); // tgen
};
//SIG(-1 S847C11) C1{ vd v1}


 S847C11 ::~S847C11(){ note_dtor("S847C11", this);}
void  S847C11 ::v40(){vfunc_called(this, "_ZN7S847C113v40Ev");}
S847C11 ::S847C11(){ note_ctor("S847C11", this);} // tgen

static void Test_S847C11()
{
  extern Class_Descriptor cd_S847C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S847C11, buf);
    S847C11 *dp, &lv = *(dp=new (buf) S847C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S847C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S847C11)");
    test_class_info(&lv, &cd_S847C11);
    dp->~S847C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS847C11(Test_S847C11, "S847C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S847C11C1Ev();
extern void _ZN7S847C11D1Ev();
Name_Map name_map_S847C11[] = {
  NSPAIR(_ZN7S847C11C1Ev),
  NSPAIR(_ZN7S847C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S847C11[];
extern void _ZN7S847C11D1Ev();
extern void _ZN7S847C11D0Ev();
extern void _ZN7S847C113v40Ev();
static  VTBL_ENTRY vtc_S847C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S847C11[0]),
  (VTBL_ENTRY)&_ZN7S847C11D1Ev,
  (VTBL_ENTRY)&_ZN7S847C11D0Ev,
  (VTBL_ENTRY)&_ZN7S847C113v40Ev,
};
extern VTBL_ENTRY _ZTI7S847C11[];
extern  VTBL_ENTRY _ZTV7S847C11[];
Class_Descriptor cd_S847C11 = {  "S847C11", // class name
  0,0,//no base classes
  &(vtc_S847C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S847C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S847C11),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  S847C2  : S847C3 , S847C11 {
  ::S852C12 s847c2f0;
  ::S856C13_nt s847c2f1;
  char s847c2f2[2];
  void *s847c2f3;
  ::S857C16 s847c2f4;
  void *s847c2f5;
  virtual  ~S847C2(); // _ZN6S847C2D1Ev
  virtual void  v41(); // _ZN6S847C23v41Ev
  virtual void  v42(); // _ZN6S847C23v42Ev
  virtual void  v43(); // _ZN6S847C23v43Ev
  virtual void  v44(); // _ZN6S847C23v44Ev
  virtual void  v45(); // _ZN6S847C23v45Ev
  virtual void  v46(); // _ZN6S847C23v46Ev
  virtual void  v47(); // _ZN6S847C23v47Ev
  virtual void  v48(); // _ZN6S847C23v48Ev
  virtual void  v49(); // _ZN6S847C23v49Ev
  virtual void  v50(); // _ZN6S847C23v50Ev
  virtual void  v51(); // _ZN6S847C23v51Ev
  virtual void  v52(); // _ZN6S847C23v52Ev
  virtual void  v53(); // _ZN6S847C23v53Ev
  virtual void  v54(); // _ZN6S847C23v54Ev
  virtual void  v55(); // _ZN6S847C23v55Ev
  virtual void  v56(); // _ZN6S847C23v56Ev
  virtual void  v57(); // _ZN6S847C23v57Ev
  virtual void  v58(); // _ZN6S847C23v58Ev
  virtual void  v59(); // _ZN6S847C23v59Ev
  virtual void  v60(); // _ZN6S847C23v60Ev
  virtual void  v61(); // _ZN6S847C23v61Ev
  virtual void  v62(); // _ZN6S847C23v62Ev
  virtual void  v63(); // _ZN6S847C23v63Ev
  virtual void  v64(); // _ZN6S847C23v64Ev
  virtual void  v65(); // _ZN6S847C23v65Ev
  virtual void  v66(); // _ZN6S847C23v66Ev
  virtual void  v67(); // _ZN6S847C23v67Ev
  virtual void  v68(); // _ZN6S847C23v68Ev
  virtual void  v69(); // _ZN6S847C23v69Ev
  virtual void  v70(); // _ZN6S847C23v70Ev
  virtual void  v71(); // _ZN6S847C23v71Ev
  virtual void  v72(); // _ZN6S847C23v72Ev
  virtual void  v73(); // _ZN6S847C23v73Ev
  virtual void  v74(); // _ZN6S847C23v74Ev
  virtual void  v75(); // _ZN6S847C23v75Ev
  virtual void  v76(); // _ZN6S847C23v76Ev
  virtual void  v77(); // _ZN6S847C23v77Ev
  virtual void  v78(); // _ZN6S847C23v78Ev
  virtual void  v79(); // _ZN6S847C23v79Ev
  virtual void  v80(); // _ZN6S847C23v80Ev
  virtual void  v81(); // _ZN6S847C23v81Ev
  S847C2(); // tgen
};
//SIG(-1 S847C2) C1{ BC2{ BC3{ BC4{ vd v42 v43 v44} BC5{ vd v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67} vd v68 v69 v70 FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ Fl[4]}} Fc} BC10{ vd v71} 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 FC11{ m FC9} FC12{ m Fp FC8 FC13{ m Fp FC14{ Fi[4]}} Fi Fc} Fc[2] Fp FC15{ BC16{ vd v74} BC17{ vd v75} vd v72 v73 Fp[2]} Fp}


 S847C2 ::~S847C2(){ note_dtor("S847C2", this);}
void  S847C2 ::v41(){vfunc_called(this, "_ZN6S847C23v41Ev");}
void  S847C2 ::v42(){vfunc_called(this, "_ZN6S847C23v42Ev");}
void  S847C2 ::v43(){vfunc_called(this, "_ZN6S847C23v43Ev");}
void  S847C2 ::v44(){vfunc_called(this, "_ZN6S847C23v44Ev");}
void  S847C2 ::v45(){vfunc_called(this, "_ZN6S847C23v45Ev");}
void  S847C2 ::v46(){vfunc_called(this, "_ZN6S847C23v46Ev");}
void  S847C2 ::v47(){vfunc_called(this, "_ZN6S847C23v47Ev");}
void  S847C2 ::v48(){vfunc_called(this, "_ZN6S847C23v48Ev");}
void  S847C2 ::v49(){vfunc_called(this, "_ZN6S847C23v49Ev");}
void  S847C2 ::v50(){vfunc_called(this, "_ZN6S847C23v50Ev");}
void  S847C2 ::v51(){vfunc_called(this, "_ZN6S847C23v51Ev");}
void  S847C2 ::v52(){vfunc_called(this, "_ZN6S847C23v52Ev");}
void  S847C2 ::v53(){vfunc_called(this, "_ZN6S847C23v53Ev");}
void  S847C2 ::v54(){vfunc_called(this, "_ZN6S847C23v54Ev");}
void  S847C2 ::v55(){vfunc_called(this, "_ZN6S847C23v55Ev");}
void  S847C2 ::v56(){vfunc_called(this, "_ZN6S847C23v56Ev");}
void  S847C2 ::v57(){vfunc_called(this, "_ZN6S847C23v57Ev");}
void  S847C2 ::v58(){vfunc_called(this, "_ZN6S847C23v58Ev");}
void  S847C2 ::v59(){vfunc_called(this, "_ZN6S847C23v59Ev");}
void  S847C2 ::v60(){vfunc_called(this, "_ZN6S847C23v60Ev");}
void  S847C2 ::v61(){vfunc_called(this, "_ZN6S847C23v61Ev");}
void  S847C2 ::v62(){vfunc_called(this, "_ZN6S847C23v62Ev");}
void  S847C2 ::v63(){vfunc_called(this, "_ZN6S847C23v63Ev");}
void  S847C2 ::v64(){vfunc_called(this, "_ZN6S847C23v64Ev");}
void  S847C2 ::v65(){vfunc_called(this, "_ZN6S847C23v65Ev");}
void  S847C2 ::v66(){vfunc_called(this, "_ZN6S847C23v66Ev");}
void  S847C2 ::v67(){vfunc_called(this, "_ZN6S847C23v67Ev");}
void  S847C2 ::v68(){vfunc_called(this, "_ZN6S847C23v68Ev");}
void  S847C2 ::v69(){vfunc_called(this, "_ZN6S847C23v69Ev");}
void  S847C2 ::v70(){vfunc_called(this, "_ZN6S847C23v70Ev");}
void  S847C2 ::v71(){vfunc_called(this, "_ZN6S847C23v71Ev");}
void  S847C2 ::v72(){vfunc_called(this, "_ZN6S847C23v72Ev");}
void  S847C2 ::v73(){vfunc_called(this, "_ZN6S847C23v73Ev");}
void  S847C2 ::v74(){vfunc_called(this, "_ZN6S847C23v74Ev");}
void  S847C2 ::v75(){vfunc_called(this, "_ZN6S847C23v75Ev");}
void  S847C2 ::v76(){vfunc_called(this, "_ZN6S847C23v76Ev");}
void  S847C2 ::v77(){vfunc_called(this, "_ZN6S847C23v77Ev");}
void  S847C2 ::v78(){vfunc_called(this, "_ZN6S847C23v78Ev");}
void  S847C2 ::v79(){vfunc_called(this, "_ZN6S847C23v79Ev");}
void  S847C2 ::v80(){vfunc_called(this, "_ZN6S847C23v80Ev");}
void  S847C2 ::v81(){vfunc_called(this, "_ZN6S847C23v81Ev");}
S847C2 ::S847C2(){ note_ctor("S847C2", this);} // tgen

static void Test_S847C2()
{
  extern Class_Descriptor cd_S847C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,36)];
    init_test(&cd_S847C2, buf);
    S847C2 *dp, &lv = *(dp=new (buf) S847C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,140), "sizeof(S847C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S847C2)");
    check_base_class_offset(lv, (S847C5*)(S847C4*)(S847C3*), 0, "S847C2");
    check_base_class_offset(lv, (S847C6*)(S847C4*)(S847C3*), ABISELECT(8,4), "S847C2");
    check_base_class_offset(lv, (S847C4*)(S847C3*), 0, "S847C2");
    check_base_class_offset(lv, (S847C3*), 0, "S847C2");
    check_base_class_offset(lv, (S847C11*), ABISELECT(80,44), "S847C2");
    check_field_offset(lv, s847c2f0, ABISELECT(88,48), "S847C2.s847c2f0");
    check_field_offset(lv, s847c2f1, ABISELECT(120,64), "S847C2.s847c2f1");
    check_field_offset(lv, s847c2f2, ABISELECT(192,112), "S847C2.s847c2f2");
    check_field_offset(lv, s847c2f3, ABISELECT(200,116), "S847C2.s847c2f3");
    check_field_offset(lv, s847c2f4, ABISELECT(208,120), "S847C2.s847c2f4");
    check_field_offset(lv, s847c2f5, ABISELECT(240,136), "S847C2.s847c2f5");
    test_class_info(&lv, &cd_S847C2);
    dp->~S847C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS847C2(Test_S847C2, "S847C2", ABISELECT(248,140));

#else // __cplusplus

extern void _ZN6S847C2C1Ev();
extern void _ZN6S847C2D1Ev();
Name_Map name_map_S847C2[] = {
  NSPAIR(_ZN6S847C2C1Ev),
  NSPAIR(_ZN6S847C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S847C5;
extern VTBL_ENTRY _ZTI6S847C5[];
extern  VTBL_ENTRY _ZTV6S847C5[];
extern Class_Descriptor cd_S847C6;
extern VTBL_ENTRY _ZTI6S847C6[];
extern  VTBL_ENTRY _ZTV6S847C6[];
extern Class_Descriptor cd_S847C4;
extern VTBL_ENTRY _ZTI6S847C4[];
extern  VTBL_ENTRY _ZTV6S847C4[];
extern Class_Descriptor cd_S847C3;
extern VTBL_ENTRY _ZTI6S847C3[];
extern  VTBL_ENTRY _ZTV6S847C3[];
extern Class_Descriptor cd_S847C11;
extern VTBL_ENTRY _ZTI7S847C11[];
extern  VTBL_ENTRY _ZTV7S847C11[];
static Base_Class bases_S847C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S847C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S847C6,    ABISELECT(8,4), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_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_S847C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S847C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S847C11,    ABISELECT(80,44), //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},
  {0}};
extern VTBL_ENTRY _ZTI6S847C2[];
extern void _ZN6S847C2D1Ev();
extern void _ZN6S847C2D0Ev();
extern void _ZN6S847C53v11Ev();
extern void _ZN6S847C53v12Ev();
extern void _ZN6S847C53v13Ev();
extern void _ZN6S847C43v15Ev();
extern void _ZN6S847C43v16Ev();
extern void _ZN6S847C43v17Ev();
extern void _ZN6S847C43v18Ev();
extern void _ZN6S847C43v19Ev();
extern void _ZN6S847C43v20Ev();
extern void _ZN6S847C43v21Ev();
extern void _ZN6S847C43v22Ev();
extern void _ZN6S847C43v23Ev();
extern void _ZN6S847C43v24Ev();
extern void _ZN6S847C43v25Ev();
extern void _ZN6S847C43v26Ev();
extern void _ZN6S847C43v27Ev();
extern void _ZN6S847C43v28Ev();
extern void _ZN6S847C43v29Ev();
extern void _ZN6S847C43v30Ev();
extern void _ZN6S847C43v31Ev();
extern void _ZN6S847C43v32Ev();
extern void _ZN6S847C43v33Ev();
extern void _ZN6S847C43v34Ev();
extern void _ZN6S847C43v35Ev();
extern void _ZN6S847C43v36Ev();
extern void _ZN6S847C33v37Ev();
extern void _ZN6S847C33v38Ev();
extern void _ZN6S847C33v39Ev();
extern void _ZN6S847C23v41Ev();
extern void _ZN6S847C23v42Ev();
extern void _ZN6S847C23v43Ev();
extern void _ZN6S847C23v44Ev();
extern void _ZN6S847C23v45Ev();
extern void _ZN6S847C23v46Ev();
extern void _ZN6S847C23v47Ev();
extern void _ZN6S847C23v48Ev();
extern void _ZN6S847C23v49Ev();
extern void _ZN6S847C23v50Ev();
extern void _ZN6S847C23v51Ev();
extern void _ZN6S847C23v52Ev();
extern void _ZN6S847C23v53Ev();
extern void _ZN6S847C23v54Ev();
extern void _ZN6S847C23v55Ev();
extern void _ZN6S847C23v56Ev();
extern void _ZN6S847C23v57Ev();
extern void _ZN6S847C23v58Ev();
extern void _ZN6S847C23v59Ev();
extern void _ZN6S847C23v60Ev();
extern void _ZN6S847C23v61Ev();
extern void _ZN6S847C23v62Ev();
extern void _ZN6S847C23v63Ev();
extern void _ZN6S847C23v64Ev();
extern void _ZN6S847C23v65Ev();
extern void _ZN6S847C23v66Ev();
extern void _ZN6S847C23v67Ev();
extern void _ZN6S847C23v68Ev();
extern void _ZN6S847C23v69Ev();
extern void _ZN6S847C23v70Ev();
extern void _ZN6S847C23v71Ev();
extern void _ZN6S847C23v72Ev();
extern void _ZN6S847C23v73Ev();
extern void _ZN6S847C23v74Ev();
extern void _ZN6S847C23v75Ev();
extern void _ZN6S847C23v76Ev();
extern void _ZN6S847C23v77Ev();
extern void _ZN6S847C23v78Ev();
extern void _ZN6S847C23v79Ev();
extern void _ZN6S847C23v80Ev();
extern void _ZN6S847C23v81Ev();
extern void ABISELECT(_ZThn8_N6S847C2D1Ev,_ZThn4_N6S847C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S847C2D0Ev,_ZThn4_N6S847C2D0Ev)();
extern void _ZN6S847C63v14Ev();
extern void ABISELECT(_ZThn80_N6S847C2D1Ev,_ZThn44_N6S847C2D1Ev)();
extern void ABISELECT(_ZThn80_N6S847C2D0Ev,_ZThn44_N6S847C2D0Ev)();
extern void _ZN7S847C113v40Ev();
static  VTBL_ENTRY vtc_S847C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S847C2[0]),
  (VTBL_ENTRY)&_ZN6S847C2D1Ev,
  (VTBL_ENTRY)&_ZN6S847C2D0Ev,
  (VTBL_ENTRY)&_ZN6S847C53v11Ev,
  (VTBL_ENTRY)&_ZN6S847C53v12Ev,
  (VTBL_ENTRY)&_ZN6S847C53v13Ev,
  (VTBL_ENTRY)&_ZN6S847C43v15Ev,
  (VTBL_ENTRY)&_ZN6S847C43v16Ev,
  (VTBL_ENTRY)&_ZN6S847C43v17Ev,
  (VTBL_ENTRY)&_ZN6S847C43v18Ev,
  (VTBL_ENTRY)&_ZN6S847C43v19Ev,
  (VTBL_ENTRY)&_ZN6S847C43v20Ev,
  (VTBL_ENTRY)&_ZN6S847C43v21Ev,
  (VTBL_ENTRY)&_ZN6S847C43v22Ev,
  (VTBL_ENTRY)&_ZN6S847C43v23Ev,
  (VTBL_ENTRY)&_ZN6S847C43v24Ev,
  (VTBL_ENTRY)&_ZN6S847C43v25Ev,
  (VTBL_ENTRY)&_ZN6S847C43v26Ev,
  (VTBL_ENTRY)&_ZN6S847C43v27Ev,
  (VTBL_ENTRY)&_ZN6S847C43v28Ev,
  (VTBL_ENTRY)&_ZN6S847C43v29Ev,
  (VTBL_ENTRY)&_ZN6S847C43v30Ev,
  (VTBL_ENTRY)&_ZN6S847C43v31Ev,
  (VTBL_ENTRY)&_ZN6S847C43v32Ev,
  (VTBL_ENTRY)&_ZN6S847C43v33Ev,
  (VTBL_ENTRY)&_ZN6S847C43v34Ev,
  (VTBL_ENTRY)&_ZN6S847C43v35Ev,
  (VTBL_ENTRY)&_ZN6S847C43v36Ev,
  (VTBL_ENTRY)&_ZN6S847C33v37Ev,
  (VTBL_ENTRY)&_ZN6S847C33v38Ev,
  (VTBL_ENTRY)&_ZN6S847C33v39Ev,
  (VTBL_ENTRY)&_ZN6S847C23v41Ev,
  (VTBL_ENTRY)&_ZN6S847C23v42Ev,
  (VTBL_ENTRY)&_ZN6S847C23v43Ev,
  (VTBL_ENTRY)&_ZN6S847C23v44Ev,
  (VTBL_ENTRY)&_ZN6S847C23v45Ev,
  (VTBL_ENTRY)&_ZN6S847C23v46Ev,
  (VTBL_ENTRY)&_ZN6S847C23v47Ev,
  (VTBL_ENTRY)&_ZN6S847C23v48Ev,
  (VTBL_ENTRY)&_ZN6S847C23v49Ev,
  (VTBL_ENTRY)&_ZN6S847C23v50Ev,
  (VTBL_ENTRY)&_ZN6S847C23v51Ev,
  (VTBL_ENTRY)&_ZN6S847C23v52Ev,
  (VTBL_ENTRY)&_ZN6S847C23v53Ev,
  (VTBL_ENTRY)&_ZN6S847C23v54Ev,
  (VTBL_ENTRY)&_ZN6S847C23v55Ev,
  (VTBL_ENTRY)&_ZN6S847C23v56Ev,
  (VTBL_ENTRY)&_ZN6S847C23v57Ev,
  (VTBL_ENTRY)&_ZN6S847C23v58Ev,
  (VTBL_ENTRY)&_ZN6S847C23v59Ev,
  (VTBL_ENTRY)&_ZN6S847C23v60Ev,
  (VTBL_ENTRY)&_ZN6S847C23v61Ev,
  (VTBL_ENTRY)&_ZN6S847C23v62Ev,
  (VTBL_ENTRY)&_ZN6S847C23v63Ev,
  (VTBL_ENTRY)&_ZN6S847C23v64Ev,
  (VTBL_ENTRY)&_ZN6S847C23v65Ev,
  (VTBL_ENTRY)&_ZN6S847C23v66Ev,
  (VTBL_ENTRY)&_ZN6S847C23v67Ev,
  (VTBL_ENTRY)&_ZN6S847C23v68Ev,
  (VTBL_ENTRY)&_ZN6S847C23v69Ev,
  (VTBL_ENTRY)&_ZN6S847C23v70Ev,
  (VTBL_ENTRY)&_ZN6S847C23v71Ev,
  (VTBL_ENTRY)&_ZN6S847C23v72Ev,
  (VTBL_ENTRY)&_ZN6S847C23v73Ev,
  (VTBL_ENTRY)&_ZN6S847C23v74Ev,
  (VTBL_ENTRY)&_ZN6S847C23v75Ev,
  (VTBL_ENTRY)&_ZN6S847C23v76Ev,
  (VTBL_ENTRY)&_ZN6S847C23v77Ev,
  (VTBL_ENTRY)&_ZN6S847C23v78Ev,
  (VTBL_ENTRY)&_ZN6S847C23v79Ev,
  (VTBL_ENTRY)&_ZN6S847C23v80Ev,
  (VTBL_ENTRY)&_ZN6S847C23v81Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S847C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S847C2D1Ev,_ZThn4_N6S847C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S847C2D0Ev,_ZThn4_N6S847C2D0Ev),
  (VTBL_ENTRY)&_ZN6S847C63v14Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI6S847C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S847C2D1Ev,_ZThn44_N6S847C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S847C2D0Ev,_ZThn44_N6S847C2D0Ev),
  (VTBL_ENTRY)&_ZN7S847C113v40Ev,
};
extern VTBL_ENTRY _ZTI6S847C2[];
extern  VTBL_ENTRY _ZTV6S847C2[];
Class_Descriptor cd_S847C2 = {  "S847C2", // class name
  bases_S847C2, 5,
  &(vtc_S847C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,140), // object size
  NSPAIRA(_ZTI6S847C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S847C2),83, //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  S847C1  : S847C2 {
  virtual  ~S847C1(); // _ZN6S847C1D1Ev
  virtual void  v1(); // _ZN6S847C12v1Ev
  virtual void  v2(); // _ZN6S847C12v2Ev
  virtual void  v3(); // _ZN6S847C12v3Ev
  virtual void  v4(); // _ZN6S847C12v4Ev
  virtual void  v5(); // _ZN6S847C12v5Ev
  virtual void  v6(); // _ZN6S847C12v6Ev
  virtual void  v7(); // _ZN6S847C12v7Ev
  virtual void  v8(); // _ZN6S847C12v8Ev
  virtual void  v9(); // _ZN6S847C12v9Ev
  virtual void  v10(); // _ZN6S847C13v10Ev
  S847C1(); // tgen
};
//SIG(1 S847C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v11 v12 v13} BC6{ vd v14} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36} vd v37 v38 v39 FC7{ m Fp Fi[2] FC8{ m}} FC9{ m FC10{ Fl[4]}} Fc} BC11{ vd v40} vd 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 FC12{ m FC10} FC13{ m Fp FC9 FC14{ m Fp FC15{ Fi[4]}} Fi Fc} Fc[2] Fp FC16{ BC17{ vd v84} BC18{ vd v85} vd v82 v83 Fp[2]} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S847C1 ::~S847C1(){ note_dtor("S847C1", this);}
void  S847C1 ::v1(){vfunc_called(this, "_ZN6S847C12v1Ev");}
void  S847C1 ::v2(){vfunc_called(this, "_ZN6S847C12v2Ev");}
void  S847C1 ::v3(){vfunc_called(this, "_ZN6S847C12v3Ev");}
void  S847C1 ::v4(){vfunc_called(this, "_ZN6S847C12v4Ev");}
void  S847C1 ::v5(){vfunc_called(this, "_ZN6S847C12v5Ev");}
void  S847C1 ::v6(){vfunc_called(this, "_ZN6S847C12v6Ev");}
void  S847C1 ::v7(){vfunc_called(this, "_ZN6S847C12v7Ev");}
void  S847C1 ::v8(){vfunc_called(this, "_ZN6S847C12v8Ev");}
void  S847C1 ::v9(){vfunc_called(this, "_ZN6S847C12v9Ev");}
void  S847C1 ::v10(){vfunc_called(this, "_ZN6S847C13v10Ev");}
S847C1 ::S847C1(){ note_ctor("S847C1", this);} // tgen

static void Test_S847C1()
{
  extern Class_Descriptor cd_S847C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,36)];
    init_test(&cd_S847C1, buf);
    S847C1 *dp, &lv = *(dp=new (buf) S847C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,140), "sizeof(S847C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S847C1)");
    check_base_class_offset(lv, (S847C5*)(S847C4*)(S847C3*)(S847C2*), 0, "S847C1");
    check_base_class_offset(lv, (S847C6*)(S847C4*)(S847C3*)(S847C2*), ABISELECT(8,4), "S847C1");
    check_base_class_offset(lv, (S847C4*)(S847C3*)(S847C2*), 0, "S847C1");
    check_base_class_offset(lv, (S847C3*)(S847C2*), 0, "S847C1");
    check_base_class_offset(lv, (S847C11*)(S847C2*), ABISELECT(80,44), "S847C1");
    check_base_class_offset(lv, (S847C2*), 0, "S847C1");
    test_class_info(&lv, &cd_S847C1);
    dp->~S847C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS847C1(Test_S847C1, "S847C1", ABISELECT(248,140));

#else // __cplusplus

extern void _ZN6S847C1C1Ev();
extern void _ZN6S847C1D1Ev();
Name_Map name_map_S847C1[] = {
  NSPAIR(_ZN6S847C1C1Ev),
  NSPAIR(_ZN6S847C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S847C5;
extern VTBL_ENTRY _ZTI6S847C5[];
extern  VTBL_ENTRY _ZTV6S847C5[];
extern Class_Descriptor cd_S847C6;
extern VTBL_ENTRY _ZTI6S847C6[];
extern  VTBL_ENTRY _ZTV6S847C6[];
extern Class_Descriptor cd_S847C4;
extern VTBL_ENTRY _ZTI6S847C4[];
extern  VTBL_ENTRY _ZTV6S847C4[];
extern Class_Descriptor cd_S847C3;
extern VTBL_ENTRY _ZTI6S847C3[];
extern  VTBL_ENTRY _ZTV6S847C3[];
extern Class_Descriptor cd_S847C11;
extern VTBL_ENTRY _ZTI7S847C11[];
extern  VTBL_ENTRY _ZTV7S847C11[];
extern Class_Descriptor cd_S847C2;
extern VTBL_ENTRY _ZTI6S847C2[];
extern  VTBL_ENTRY _ZTV6S847C2[];
static Base_Class bases_S847C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S847C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S847C6,    ABISELECT(8,4), //bcp->offset
    83, //bcp->virtual_function_table_offset
    2, //num_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_S847C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S847C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S847C11,    ABISELECT(80,44), //bcp->offset
    88, //bcp->virtual_function_table_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_S847C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S847C1[];
extern void _ZN6S847C1D1Ev();
extern void _ZN6S847C1D0Ev();
extern void _ZN6S847C53v11Ev();
extern void _ZN6S847C53v12Ev();
extern void _ZN6S847C53v13Ev();
extern void _ZN6S847C43v15Ev();
extern void _ZN6S847C43v16Ev();
extern void _ZN6S847C43v17Ev();
extern void _ZN6S847C43v18Ev();
extern void _ZN6S847C43v19Ev();
extern void _ZN6S847C43v20Ev();
extern void _ZN6S847C43v21Ev();
extern void _ZN6S847C43v22Ev();
extern void _ZN6S847C43v23Ev();
extern void _ZN6S847C43v24Ev();
extern void _ZN6S847C43v25Ev();
extern void _ZN6S847C43v26Ev();
extern void _ZN6S847C43v27Ev();
extern void _ZN6S847C43v28Ev();
extern void _ZN6S847C43v29Ev();
extern void _ZN6S847C43v30Ev();
extern void _ZN6S847C43v31Ev();
extern void _ZN6S847C43v32Ev();
extern void _ZN6S847C43v33Ev();
extern void _ZN6S847C43v34Ev();
extern void _ZN6S847C43v35Ev();
extern void _ZN6S847C43v36Ev();
extern void _ZN6S847C33v37Ev();
extern void _ZN6S847C33v38Ev();
extern void _ZN6S847C33v39Ev();
extern void _ZN6S847C23v41Ev();
extern void _ZN6S847C23v42Ev();
extern void _ZN6S847C23v43Ev();
extern void _ZN6S847C23v44Ev();
extern void _ZN6S847C23v45Ev();
extern void _ZN6S847C23v46Ev();
extern void _ZN6S847C23v47Ev();
extern void _ZN6S847C23v48Ev();
extern void _ZN6S847C23v49Ev();
extern void _ZN6S847C23v50Ev();
extern void _ZN6S847C23v51Ev();
extern void _ZN6S847C23v52Ev();
extern void _ZN6S847C23v53Ev();
extern void _ZN6S847C23v54Ev();
extern void _ZN6S847C23v55Ev();
extern void _ZN6S847C23v56Ev();
extern void _ZN6S847C23v57Ev();
extern void _ZN6S847C23v58Ev();
extern void _ZN6S847C23v59Ev();
extern void _ZN6S847C23v60Ev();
extern void _ZN6S847C23v61Ev();
extern void _ZN6S847C23v62Ev();
extern void _ZN6S847C23v63Ev();
extern void _ZN6S847C23v64Ev();
extern void _ZN6S847C23v65Ev();
extern void _ZN6S847C23v66Ev();
extern void _ZN6S847C23v67Ev();
extern void _ZN6S847C23v68Ev();
extern void _ZN6S847C23v69Ev();
extern void _ZN6S847C23v70Ev();
extern void _ZN6S847C23v71Ev();
extern void _ZN6S847C23v72Ev();
extern void _ZN6S847C23v73Ev();
extern void _ZN6S847C23v74Ev();
extern void _ZN6S847C23v75Ev();
extern void _ZN6S847C23v76Ev();
extern void _ZN6S847C23v77Ev();
extern void _ZN6S847C23v78Ev();
extern void _ZN6S847C23v79Ev();
extern void _ZN6S847C23v80Ev();
extern void _ZN6S847C23v81Ev();
extern void _ZN6S847C12v1Ev();
extern void _ZN6S847C12v2Ev();
extern void _ZN6S847C12v3Ev();
extern void _ZN6S847C12v4Ev();
extern void _ZN6S847C12v5Ev();
extern void _ZN6S847C12v6Ev();
extern void _ZN6S847C12v7Ev();
extern void _ZN6S847C12v8Ev();
extern void _ZN6S847C12v9Ev();
extern void _ZN6S847C13v10Ev();
extern void ABISELECT(_ZThn8_N6S847C1D1Ev,_ZThn4_N6S847C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S847C1D0Ev,_ZThn4_N6S847C1D0Ev)();
extern void _ZN6S847C63v14Ev();
extern void ABISELECT(_ZThn80_N6S847C1D1Ev,_ZThn44_N6S847C1D1Ev)();
extern void ABISELECT(_ZThn80_N6S847C1D0Ev,_ZThn44_N6S847C1D0Ev)();
extern void _ZN7S847C113v40Ev();
static  VTBL_ENTRY vtc_S847C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S847C1[0]),
  (VTBL_ENTRY)&_ZN6S847C1D1Ev,
  (VTBL_ENTRY)&_ZN6S847C1D0Ev,
  (VTBL_ENTRY)&_ZN6S847C53v11Ev,
  (VTBL_ENTRY)&_ZN6S847C53v12Ev,
  (VTBL_ENTRY)&_ZN6S847C53v13Ev,
  (VTBL_ENTRY)&_ZN6S847C43v15Ev,
  (VTBL_ENTRY)&_ZN6S847C43v16Ev,
  (VTBL_ENTRY)&_ZN6S847C43v17Ev,
  (VTBL_ENTRY)&_ZN6S847C43v18Ev,
  (VTBL_ENTRY)&_ZN6S847C43v19Ev,
  (VTBL_ENTRY)&_ZN6S847C43v20Ev,
  (VTBL_ENTRY)&_ZN6S847C43v21Ev,
  (VTBL_ENTRY)&_ZN6S847C43v22Ev,
  (VTBL_ENTRY)&_ZN6S847C43v23Ev,
  (VTBL_ENTRY)&_ZN6S847C43v24Ev,
  (VTBL_ENTRY)&_ZN6S847C43v25Ev,
  (VTBL_ENTRY)&_ZN6S847C43v26Ev,
  (VTBL_ENTRY)&_ZN6S847C43v27Ev,
  (VTBL_ENTRY)&_ZN6S847C43v28Ev,
  (VTBL_ENTRY)&_ZN6S847C43v29Ev,
  (VTBL_ENTRY)&_ZN6S847C43v30Ev,
  (VTBL_ENTRY)&_ZN6S847C43v31Ev,
  (VTBL_ENTRY)&_ZN6S847C43v32Ev,
  (VTBL_ENTRY)&_ZN6S847C43v33Ev,
  (VTBL_ENTRY)&_ZN6S847C43v34Ev,
  (VTBL_ENTRY)&_ZN6S847C43v35Ev,
  (VTBL_ENTRY)&_ZN6S847C43v36Ev,
  (VTBL_ENTRY)&_ZN6S847C33v37Ev,
  (VTBL_ENTRY)&_ZN6S847C33v38Ev,
  (VTBL_ENTRY)&_ZN6S847C33v39Ev,
  (VTBL_ENTRY)&_ZN6S847C23v41Ev,
  (VTBL_ENTRY)&_ZN6S847C23v42Ev,
  (VTBL_ENTRY)&_ZN6S847C23v43Ev,
  (VTBL_ENTRY)&_ZN6S847C23v44Ev,
  (VTBL_ENTRY)&_ZN6S847C23v45Ev,
  (VTBL_ENTRY)&_ZN6S847C23v46Ev,
  (VTBL_ENTRY)&_ZN6S847C23v47Ev,
  (VTBL_ENTRY)&_ZN6S847C23v48Ev,
  (VTBL_ENTRY)&_ZN6S847C23v49Ev,
  (VTBL_ENTRY)&_ZN6S847C23v50Ev,
  (VTBL_ENTRY)&_ZN6S847C23v51Ev,
  (VTBL_ENTRY)&_ZN6S847C23v52Ev,
  (VTBL_ENTRY)&_ZN6S847C23v53Ev,
  (VTBL_ENTRY)&_ZN6S847C23v54Ev,
  (VTBL_ENTRY)&_ZN6S847C23v55Ev,
  (VTBL_ENTRY)&_ZN6S847C23v56Ev,
  (VTBL_ENTRY)&_ZN6S847C23v57Ev,
  (VTBL_ENTRY)&_ZN6S847C23v58Ev,
  (VTBL_ENTRY)&_ZN6S847C23v59Ev,
  (VTBL_ENTRY)&_ZN6S847C23v60Ev,
  (VTBL_ENTRY)&_ZN6S847C23v61Ev,
  (VTBL_ENTRY)&_ZN6S847C23v62Ev,
  (VTBL_ENTRY)&_ZN6S847C23v63Ev,
  (VTBL_ENTRY)&_ZN6S847C23v64Ev,
  (VTBL_ENTRY)&_ZN6S847C23v65Ev,
  (VTBL_ENTRY)&_ZN6S847C23v66Ev,
  (VTBL_ENTRY)&_ZN6S847C23v67Ev,
  (VTBL_ENTRY)&_ZN6S847C23v68Ev,
  (VTBL_ENTRY)&_ZN6S847C23v69Ev,
  (VTBL_ENTRY)&_ZN6S847C23v70Ev,
  (VTBL_ENTRY)&_ZN6S847C23v71Ev,
  (VTBL_ENTRY)&_ZN6S847C23v72Ev,
  (VTBL_ENTRY)&_ZN6S847C23v73Ev,
  (VTBL_ENTRY)&_ZN6S847C23v74Ev,
  (VTBL_ENTRY)&_ZN6S847C23v75Ev,
  (VTBL_ENTRY)&_ZN6S847C23v76Ev,
  (VTBL_ENTRY)&_ZN6S847C23v77Ev,
  (VTBL_ENTRY)&_ZN6S847C23v78Ev,
  (VTBL_ENTRY)&_ZN6S847C23v79Ev,
  (VTBL_ENTRY)&_ZN6S847C23v80Ev,
  (VTBL_ENTRY)&_ZN6S847C23v81Ev,
  (VTBL_ENTRY)&_ZN6S847C12v1Ev,
  (VTBL_ENTRY)&_ZN6S847C12v2Ev,
  (VTBL_ENTRY)&_ZN6S847C12v3Ev,
  (VTBL_ENTRY)&_ZN6S847C12v4Ev,
  (VTBL_ENTRY)&_ZN6S847C12v5Ev,
  (VTBL_ENTRY)&_ZN6S847C12v6Ev,
  (VTBL_ENTRY)&_ZN6S847C12v7Ev,
  (VTBL_ENTRY)&_ZN6S847C12v8Ev,
  (VTBL_ENTRY)&_ZN6S847C12v9Ev,
  (VTBL_ENTRY)&_ZN6S847C13v10Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S847C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S847C1D1Ev,_ZThn4_N6S847C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S847C1D0Ev,_ZThn4_N6S847C1D0Ev),
  (VTBL_ENTRY)&_ZN6S847C63v14Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI6S847C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S847C1D1Ev,_ZThn44_N6S847C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S847C1D0Ev,_ZThn44_N6S847C1D0Ev),
  (VTBL_ENTRY)&_ZN7S847C113v40Ev,
};
extern VTBL_ENTRY _ZTI6S847C1[];
extern  VTBL_ENTRY _ZTV6S847C1[];
Class_Descriptor cd_S847C1 = {  "S847C1", // class name
  bases_S847C1, 6,
  &(vtc_S847C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,140), // object size
  NSPAIRA(_ZTI6S847C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S847C1),93, //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  S839C5  {
  virtual  ~S839C5(); // _ZN6S839C5D1Ev
  virtual void  v10(); // _ZN6S839C53v10Ev
  virtual void  v11(); // _ZN6S839C53v11Ev
  virtual void  v12(); // _ZN6S839C53v12Ev
  S839C5(); // tgen
};
//SIG(-1 S839C5) C1{ vd v1 v2 v3}


 S839C5 ::~S839C5(){ note_dtor("S839C5", this);}
void  S839C5 ::v10(){vfunc_called(this, "_ZN6S839C53v10Ev");}
void  S839C5 ::v11(){vfunc_called(this, "_ZN6S839C53v11Ev");}
void  S839C5 ::v12(){vfunc_called(this, "_ZN6S839C53v12Ev");}
S839C5 ::S839C5(){ note_ctor("S839C5", this);} // tgen

static void Test_S839C5()
{
  extern Class_Descriptor cd_S839C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S839C5, buf);
    S839C5 *dp, &lv = *(dp=new (buf) S839C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S839C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S839C5)");
    test_class_info(&lv, &cd_S839C5);
    dp->~S839C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS839C5(Test_S839C5, "S839C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S839C5C1Ev();
extern void _ZN6S839C5D1Ev();
Name_Map name_map_S839C5[] = {
  NSPAIR(_ZN6S839C5C1Ev),
  NSPAIR(_ZN6S839C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S839C5[];
extern void _ZN6S839C5D1Ev();
extern void _ZN6S839C5D0Ev();
extern void _ZN6S839C53v10Ev();
extern void _ZN6S839C53v11Ev();
extern void _ZN6S839C53v12Ev();
static  VTBL_ENTRY vtc_S839C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S839C5[0]),
  (VTBL_ENTRY)&_ZN6S839C5D1Ev,
  (VTBL_ENTRY)&_ZN6S839C5D0Ev,
  (VTBL_ENTRY)&_ZN6S839C53v10Ev,
  (VTBL_ENTRY)&_ZN6S839C53v11Ev,
  (VTBL_ENTRY)&_ZN6S839C53v12Ev,
};
extern VTBL_ENTRY _ZTI6S839C5[];
extern  VTBL_ENTRY _ZTV6S839C5[];
Class_Descriptor cd_S839C5 = {  "S839C5", // class name
  0,0,//no base classes
  &(vtc_S839C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S839C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S839C5),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  S839C6  {
  virtual  ~S839C6(); // _ZN6S839C6D1Ev
  virtual void  v13(); // _ZN6S839C63v13Ev
  S839C6(); // tgen
};
//SIG(-1 S839C6) C1{ vd v1}


 S839C6 ::~S839C6(){ note_dtor("S839C6", this);}
void  S839C6 ::v13(){vfunc_called(this, "_ZN6S839C63v13Ev");}
S839C6 ::S839C6(){ note_ctor("S839C6", this);} // tgen

static void Test_S839C6()
{
  extern Class_Descriptor cd_S839C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S839C6, buf);
    S839C6 *dp, &lv = *(dp=new (buf) S839C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S839C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S839C6)");
    test_class_info(&lv, &cd_S839C6);
    dp->~S839C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS839C6(Test_S839C6, "S839C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S839C6C1Ev();
extern void _ZN6S839C6D1Ev();
Name_Map name_map_S839C6[] = {
  NSPAIR(_ZN6S839C6C1Ev),
  NSPAIR(_ZN6S839C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S839C6[];
extern void _ZN6S839C6D1Ev();
extern void _ZN6S839C6D0Ev();
extern void _ZN6S839C63v13Ev();
static  VTBL_ENTRY vtc_S839C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S839C6[0]),
  (VTBL_ENTRY)&_ZN6S839C6D1Ev,
  (VTBL_ENTRY)&_ZN6S839C6D0Ev,
  (VTBL_ENTRY)&_ZN6S839C63v13Ev,
};
extern VTBL_ENTRY _ZTI6S839C6[];
extern  VTBL_ENTRY _ZTV6S839C6[];
Class_Descriptor cd_S839C6 = {  "S839C6", // class name
  0,0,//no base classes
  &(vtc_S839C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S839C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S839C6),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  S839C4  : S839C5 , S839C6 {
  virtual  ~S839C4(); // _ZN6S839C4D1Ev
  virtual void  v14(); // _ZN6S839C43v14Ev
  virtual void  v15(); // _ZN6S839C43v15Ev
  virtual void  v16(); // _ZN6S839C43v16Ev
  virtual void  v17(); // _ZN6S839C43v17Ev
  virtual void  v18(); // _ZN6S839C43v18Ev
  virtual void  v19(); // _ZN6S839C43v19Ev
  virtual void  v20(); // _ZN6S839C43v20Ev
  virtual void  v21(); // _ZN6S839C43v21Ev
  virtual void  v22(); // _ZN6S839C43v22Ev
  virtual void  v23(); // _ZN6S839C43v23Ev
  virtual void  v24(); // _ZN6S839C43v24Ev
  virtual void  v25(); // _ZN6S839C43v25Ev
  virtual void  v26(); // _ZN6S839C43v26Ev
  virtual void  v27(); // _ZN6S839C43v27Ev
  virtual void  v28(); // _ZN6S839C43v28Ev
  virtual void  v29(); // _ZN6S839C43v29Ev
  virtual void  v30(); // _ZN6S839C43v30Ev
  virtual void  v31(); // _ZN6S839C43v31Ev
  virtual void  v32(); // _ZN6S839C43v32Ev
  virtual void  v33(); // _ZN6S839C43v33Ev
  virtual void  v34(); // _ZN6S839C43v34Ev
  virtual void  v35(); // _ZN6S839C43v35Ev
  S839C4(); // tgen
};
//SIG(-1 S839C4) C1{ BC2{ vd v23 v24 v25} BC3{ vd v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S839C4 ::~S839C4(){ note_dtor("S839C4", this);}
void  S839C4 ::v14(){vfunc_called(this, "_ZN6S839C43v14Ev");}
void  S839C4 ::v15(){vfunc_called(this, "_ZN6S839C43v15Ev");}
void  S839C4 ::v16(){vfunc_called(this, "_ZN6S839C43v16Ev");}
void  S839C4 ::v17(){vfunc_called(this, "_ZN6S839C43v17Ev");}
void  S839C4 ::v18(){vfunc_called(this, "_ZN6S839C43v18Ev");}
void  S839C4 ::v19(){vfunc_called(this, "_ZN6S839C43v19Ev");}
void  S839C4 ::v20(){vfunc_called(this, "_ZN6S839C43v20Ev");}
void  S839C4 ::v21(){vfunc_called(this, "_ZN6S839C43v21Ev");}
void  S839C4 ::v22(){vfunc_called(this, "_ZN6S839C43v22Ev");}
void  S839C4 ::v23(){vfunc_called(this, "_ZN6S839C43v23Ev");}
void  S839C4 ::v24(){vfunc_called(this, "_ZN6S839C43v24Ev");}
void  S839C4 ::v25(){vfunc_called(this, "_ZN6S839C43v25Ev");}
void  S839C4 ::v26(){vfunc_called(this, "_ZN6S839C43v26Ev");}
void  S839C4 ::v27(){vfunc_called(this, "_ZN6S839C43v27Ev");}
void  S839C4 ::v28(){vfunc_called(this, "_ZN6S839C43v28Ev");}
void  S839C4 ::v29(){vfunc_called(this, "_ZN6S839C43v29Ev");}
void  S839C4 ::v30(){vfunc_called(this, "_ZN6S839C43v30Ev");}
void  S839C4 ::v31(){vfunc_called(this, "_ZN6S839C43v31Ev");}
void  S839C4 ::v32(){vfunc_called(this, "_ZN6S839C43v32Ev");}
void  S839C4 ::v33(){vfunc_called(this, "_ZN6S839C43v33Ev");}
void  S839C4 ::v34(){vfunc_called(this, "_ZN6S839C43v34Ev");}
void  S839C4 ::v35(){vfunc_called(this, "_ZN6S839C43v35Ev");}
S839C4 ::S839C4(){ note_ctor("S839C4", this);} // tgen

static void Test_S839C4()
{
  extern Class_Descriptor cd_S839C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S839C4, buf);
    S839C4 *dp, &lv = *(dp=new (buf) S839C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S839C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S839C4)");
    check_base_class_offset(lv, (S839C5*), 0, "S839C4");
    check_base_class_offset(lv, (S839C6*), ABISELECT(8,4), "S839C4");
    test_class_info(&lv, &cd_S839C4);
    dp->~S839C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS839C4(Test_S839C4, "S839C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S839C4C1Ev();
extern void _ZN6S839C4D1Ev();
Name_Map name_map_S839C4[] = {
  NSPAIR(_ZN6S839C4C1Ev),
  NSPAIR(_ZN6S839C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S839C5;
extern VTBL_ENTRY _ZTI6S839C5[];
extern  VTBL_ENTRY _ZTV6S839C5[];
extern Class_Descriptor cd_S839C6;
extern VTBL_ENTRY _ZTI6S839C6[];
extern  VTBL_ENTRY _ZTV6S839C6[];
static Base_Class bases_S839C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S839C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S839C6,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S839C4[];
extern void _ZN6S839C4D1Ev();
extern void _ZN6S839C4D0Ev();
extern void _ZN6S839C53v10Ev();
extern void _ZN6S839C53v11Ev();
extern void _ZN6S839C53v12Ev();
extern void _ZN6S839C43v14Ev();
extern void _ZN6S839C43v15Ev();
extern void _ZN6S839C43v16Ev();
extern void _ZN6S839C43v17Ev();
extern void _ZN6S839C43v18Ev();
extern void _ZN6S839C43v19Ev();
extern void _ZN6S839C43v20Ev();
extern void _ZN6S839C43v21Ev();
extern void _ZN6S839C43v22Ev();
extern void _ZN6S839C43v23Ev();
extern void _ZN6S839C43v24Ev();
extern void _ZN6S839C43v25Ev();
extern void _ZN6S839C43v26Ev();
extern void _ZN6S839C43v27Ev();
extern void _ZN6S839C43v28Ev();
extern void _ZN6S839C43v29Ev();
extern void _ZN6S839C43v30Ev();
extern void _ZN6S839C43v31Ev();
extern void _ZN6S839C43v32Ev();
extern void _ZN6S839C43v33Ev();
extern void _ZN6S839C43v34Ev();
extern void _ZN6S839C43v35Ev();
extern void ABISELECT(_ZThn8_N6S839C4D1Ev,_ZThn4_N6S839C4D1Ev)();
extern void ABISELECT(_ZThn8_N6S839C4D0Ev,_ZThn4_N6S839C4D0Ev)();
extern void _ZN6S839C63v13Ev();
static  VTBL_ENTRY vtc_S839C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S839C4[0]),
  (VTBL_ENTRY)&_ZN6S839C4D1Ev,
  (VTBL_ENTRY)&_ZN6S839C4D0Ev,
  (VTBL_ENTRY)&_ZN6S839C53v10Ev,
  (VTBL_ENTRY)&_ZN6S839C53v11Ev,
  (VTBL_ENTRY)&_ZN6S839C53v12Ev,
  (VTBL_ENTRY)&_ZN6S839C43v14Ev,
  (VTBL_ENTRY)&_ZN6S839C43v15Ev,
  (VTBL_ENTRY)&_ZN6S839C43v16Ev,
  (VTBL_ENTRY)&_ZN6S839C43v17Ev,
  (VTBL_ENTRY)&_ZN6S839C43v18Ev,
  (VTBL_ENTRY)&_ZN6S839C43v19Ev,
  (VTBL_ENTRY)&_ZN6S839C43v20Ev,
  (VTBL_ENTRY)&_ZN6S839C43v21Ev,
  (VTBL_ENTRY)&_ZN6S839C43v22Ev,
  (VTBL_ENTRY)&_ZN6S839C43v23Ev,
  (VTBL_ENTRY)&_ZN6S839C43v24Ev,
  (VTBL_ENTRY)&_ZN6S839C43v25Ev,
  (VTBL_ENTRY)&_ZN6S839C43v26Ev,
  (VTBL_ENTRY)&_ZN6S839C43v27Ev,
  (VTBL_ENTRY)&_ZN6S839C43v28Ev,
  (VTBL_ENTRY)&_ZN6S839C43v29Ev,
  (VTBL_ENTRY)&_ZN6S839C43v30Ev,
  (VTBL_ENTRY)&_ZN6S839C43v31Ev,
  (VTBL_ENTRY)&_ZN6S839C43v32Ev,
  (VTBL_ENTRY)&_ZN6S839C43v33Ev,
  (VTBL_ENTRY)&_ZN6S839C43v34Ev,
  (VTBL_ENTRY)&_ZN6S839C43v35Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S839C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S839C4D1Ev,_ZThn4_N6S839C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S839C4D0Ev,_ZThn4_N6S839C4D0Ev),
  (VTBL_ENTRY)&_ZN6S839C63v13Ev,
};
extern VTBL_ENTRY _ZTI6S839C4[];
extern  VTBL_ENTRY _ZTV6S839C4[];
Class_Descriptor cd_S839C4 = {  "S839C4", // class name
  bases_S839C4, 2,
  &(vtc_S839C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S839C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S839C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S839C3  : S839C4 {
  ::S857C7_nt s839c3f0;
  ::S856C9_nt s839c3f1;
  char s839c3f2;
  virtual  ~S839C3(); // _ZN6S839C3D1Ev
  virtual void  v36(); // _ZN6S839C33v36Ev
  virtual void  v37(); // _ZN6S839C33v37Ev
  virtual void  v38(); // _ZN6S839C33v38Ev
  S839C3(); // tgen
};
//SIG(-1 S839C3) C1{ BC2{ BC3{ vd v4 v5 v6} BC4{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ Fl[4]}} Fc}


 S839C3 ::~S839C3(){ note_dtor("S839C3", this);}
void  S839C3 ::v36(){vfunc_called(this, "_ZN6S839C33v36Ev");}
void  S839C3 ::v37(){vfunc_called(this, "_ZN6S839C33v37Ev");}
void  S839C3 ::v38(){vfunc_called(this, "_ZN6S839C33v38Ev");}
S839C3 ::S839C3(){ note_ctor("S839C3", this);} // tgen

static void Test_S839C3()
{
  extern Class_Descriptor cd_S839C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S839C3, buf);
    S839C3 *dp, &lv = *(dp=new (buf) S839C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S839C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S839C3)");
    check_base_class_offset(lv, (S839C5*)(S839C4*), 0, "S839C3");
    check_base_class_offset(lv, (S839C6*)(S839C4*), ABISELECT(8,4), "S839C3");
    check_base_class_offset(lv, (S839C4*), 0, "S839C3");
    check_field_offset(lv, s839c3f0, ABISELECT(16,8), "S839C3.s839c3f0");
    check_field_offset(lv, s839c3f1, ABISELECT(40,24), "S839C3.s839c3f1");
    check_field_offset(lv, s839c3f2, ABISELECT(72,40), "S839C3.s839c3f2");
    test_class_info(&lv, &cd_S839C3);
    dp->~S839C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS839C3(Test_S839C3, "S839C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S839C3C1Ev();
extern void _ZN6S839C3D1Ev();
Name_Map name_map_S839C3[] = {
  NSPAIR(_ZN6S839C3C1Ev),
  NSPAIR(_ZN6S839C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S839C5;
extern VTBL_ENTRY _ZTI6S839C5[];
extern  VTBL_ENTRY _ZTV6S839C5[];
extern Class_Descriptor cd_S839C6;
extern VTBL_ENTRY _ZTI6S839C6[];
extern  VTBL_ENTRY _ZTV6S839C6[];
extern Class_Descriptor cd_S839C4;
extern VTBL_ENTRY _ZTI6S839C4[];
extern  VTBL_ENTRY _ZTV6S839C4[];
static Base_Class bases_S839C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S839C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S839C6,    ABISELECT(8,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S839C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S839C3[];
extern void _ZN6S839C3D1Ev();
extern void _ZN6S839C3D0Ev();
extern void _ZN6S839C53v10Ev();
extern void _ZN6S839C53v11Ev();
extern void _ZN6S839C53v12Ev();
extern void _ZN6S839C43v14Ev();
extern void _ZN6S839C43v15Ev();
extern void _ZN6S839C43v16Ev();
extern void _ZN6S839C43v17Ev();
extern void _ZN6S839C43v18Ev();
extern void _ZN6S839C43v19Ev();
extern void _ZN6S839C43v20Ev();
extern void _ZN6S839C43v21Ev();
extern void _ZN6S839C43v22Ev();
extern void _ZN6S839C43v23Ev();
extern void _ZN6S839C43v24Ev();
extern void _ZN6S839C43v25Ev();
extern void _ZN6S839C43v26Ev();
extern void _ZN6S839C43v27Ev();
extern void _ZN6S839C43v28Ev();
extern void _ZN6S839C43v29Ev();
extern void _ZN6S839C43v30Ev();
extern void _ZN6S839C43v31Ev();
extern void _ZN6S839C43v32Ev();
extern void _ZN6S839C43v33Ev();
extern void _ZN6S839C43v34Ev();
extern void _ZN6S839C43v35Ev();
extern void _ZN6S839C33v36Ev();
extern void _ZN6S839C33v37Ev();
extern void _ZN6S839C33v38Ev();
extern void ABISELECT(_ZThn8_N6S839C3D1Ev,_ZThn4_N6S839C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S839C3D0Ev,_ZThn4_N6S839C3D0Ev)();
extern void _ZN6S839C63v13Ev();
static  VTBL_ENTRY vtc_S839C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S839C3[0]),
  (VTBL_ENTRY)&_ZN6S839C3D1Ev,
  (VTBL_ENTRY)&_ZN6S839C3D0Ev,
  (VTBL_ENTRY)&_ZN6S839C53v10Ev,
  (VTBL_ENTRY)&_ZN6S839C53v11Ev,
  (VTBL_ENTRY)&_ZN6S839C53v12Ev,
  (VTBL_ENTRY)&_ZN6S839C43v14Ev,
  (VTBL_ENTRY)&_ZN6S839C43v15Ev,
  (VTBL_ENTRY)&_ZN6S839C43v16Ev,
  (VTBL_ENTRY)&_ZN6S839C43v17Ev,
  (VTBL_ENTRY)&_ZN6S839C43v18Ev,
  (VTBL_ENTRY)&_ZN6S839C43v19Ev,
  (VTBL_ENTRY)&_ZN6S839C43v20Ev,
  (VTBL_ENTRY)&_ZN6S839C43v21Ev,
  (VTBL_ENTRY)&_ZN6S839C43v22Ev,
  (VTBL_ENTRY)&_ZN6S839C43v23Ev,
  (VTBL_ENTRY)&_ZN6S839C43v24Ev,
  (VTBL_ENTRY)&_ZN6S839C43v25Ev,
  (VTBL_ENTRY)&_ZN6S839C43v26Ev,
  (VTBL_ENTRY)&_ZN6S839C43v27Ev,
  (VTBL_ENTRY)&_ZN6S839C43v28Ev,
  (VTBL_ENTRY)&_ZN6S839C43v29Ev,
  (VTBL_ENTRY)&_ZN6S839C43v30Ev,
  (VTBL_ENTRY)&_ZN6S839C43v31Ev,
  (VTBL_ENTRY)&_ZN6S839C43v32Ev,
  (VTBL_ENTRY)&_ZN6S839C43v33Ev,
  (VTBL_ENTRY)&_ZN6S839C43v34Ev,
  (VTBL_ENTRY)&_ZN6S839C43v35Ev,
  (VTBL_ENTRY)&_ZN6S839C33v36Ev,
  (VTBL_ENTRY)&_ZN6S839C33v37Ev,
  (VTBL_ENTRY)&_ZN6S839C33v38Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S839C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S839C3D1Ev,_ZThn4_N6S839C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S839C3D0Ev,_ZThn4_N6S839C3D0Ev),
  (VTBL_ENTRY)&_ZN6S839C63v13Ev,
};
extern VTBL_ENTRY _ZTI6S839C3[];
extern  VTBL_ENTRY _ZTV6S839C3[];
Class_Descriptor cd_S839C3 = {  "S839C3", // class name
  bases_S839C3, 3,
  &(vtc_S839C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S839C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S839C3),37, //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  S839C11  {
  virtual  ~S839C11(); // _ZN7S839C11D1Ev
  virtual void  v39(); // _ZN7S839C113v39Ev
  S839C11(); // tgen
};
//SIG(-1 S839C11) C1{ vd v1}


 S839C11 ::~S839C11(){ note_dtor("S839C11", this);}
void  S839C11 ::v39(){vfunc_called(this, "_ZN7S839C113v39Ev");}
S839C11 ::S839C11(){ note_ctor("S839C11", this);} // tgen

static void Test_S839C11()
{
  extern Class_Descriptor cd_S839C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S839C11, buf);
    S839C11 *dp, &lv = *(dp=new (buf) S839C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S839C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S839C11)");
    test_class_info(&lv, &cd_S839C11);
    dp->~S839C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS839C11(Test_S839C11, "S839C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S839C11C1Ev();
extern void _ZN7S839C11D1Ev();
Name_Map name_map_S839C11[] = {
  NSPAIR(_ZN7S839C11C1Ev),
  NSPAIR(_ZN7S839C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S839C11[];
extern void _ZN7S839C11D1Ev();
extern void _ZN7S839C11D0Ev();
extern void _ZN7S839C113v39Ev();
static  VTBL_ENTRY vtc_S839C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S839C11[0]),
  (VTBL_ENTRY)&_ZN7S839C11D1Ev,
  (VTBL_ENTRY)&_ZN7S839C11D0Ev,
  (VTBL_ENTRY)&_ZN7S839C113v39Ev,
};
extern VTBL_ENTRY _ZTI7S839C11[];
extern  VTBL_ENTRY _ZTV7S839C11[];
Class_Descriptor cd_S839C11 = {  "S839C11", // class name
  0,0,//no base classes
  &(vtc_S839C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S839C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S839C11),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  S839C2  : S839C3 , S839C11 {
  ::S852C12 s839c2f0;
  ::S856C13_nt s839c2f1;
  char s839c2f2[3];
  void *s839c2f3;
  ::S857C16 s839c2f4;
  void *s839c2f5;
  virtual  ~S839C2(); // _ZN6S839C2D1Ev
  virtual void  v40(); // _ZN6S839C23v40Ev
  virtual void  v41(); // _ZN6S839C23v41Ev
  virtual void  v42(); // _ZN6S839C23v42Ev
  virtual void  v43(); // _ZN6S839C23v43Ev
  virtual void  v44(); // _ZN6S839C23v44Ev
  virtual void  v45(); // _ZN6S839C23v45Ev
  virtual void  v46(); // _ZN6S839C23v46Ev
  virtual void  v47(); // _ZN6S839C23v47Ev
  virtual void  v48(); // _ZN6S839C23v48Ev
  virtual void  v49(); // _ZN6S839C23v49Ev
  virtual void  v50(); // _ZN6S839C23v50Ev
  virtual void  v51(); // _ZN6S839C23v51Ev
  virtual void  v52(); // _ZN6S839C23v52Ev
  virtual void  v53(); // _ZN6S839C23v53Ev
  virtual void  v54(); // _ZN6S839C23v54Ev
  virtual void  v55(); // _ZN6S839C23v55Ev
  virtual void  v56(); // _ZN6S839C23v56Ev
  virtual void  v57(); // _ZN6S839C23v57Ev
  virtual void  v58(); // _ZN6S839C23v58Ev
  virtual void  v59(); // _ZN6S839C23v59Ev
  virtual void  v60(); // _ZN6S839C23v60Ev
  virtual void  v61(); // _ZN6S839C23v61Ev
  virtual void  v62(); // _ZN6S839C23v62Ev
  virtual void  v63(); // _ZN6S839C23v63Ev
  virtual void  v64(); // _ZN6S839C23v64Ev
  virtual void  v65(); // _ZN6S839C23v65Ev
  virtual void  v66(); // _ZN6S839C23v66Ev
  virtual void  v67(); // _ZN6S839C23v67Ev
  virtual void  v68(); // _ZN6S839C23v68Ev
  virtual void  v69(); // _ZN6S839C23v69Ev
  virtual void  v70(); // _ZN6S839C23v70Ev
  virtual void  v71(); // _ZN6S839C23v71Ev
  virtual void  v72(); // _ZN6S839C23v72Ev
  virtual void  v73(); // _ZN6S839C23v73Ev
  virtual void  v74(); // _ZN6S839C23v74Ev
  virtual void  v75(); // _ZN6S839C23v75Ev
  virtual void  v76(); // _ZN6S839C23v76Ev
  virtual void  v77(); // _ZN6S839C23v77Ev
  virtual void  v78(); // _ZN6S839C23v78Ev
  virtual void  v79(); // _ZN6S839C23v79Ev
  virtual void  v80(); // _ZN6S839C23v80Ev
  S839C2(); // tgen
};
//SIG(-1 S839C2) C1{ BC2{ BC3{ BC4{ vd v42 v43 v44} BC5{ vd v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67} vd v68 v69 v70 FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ Fl[4]}} Fc} BC10{ vd v71} 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 FC11{ m FC9} FC12{ m Fp FC8 FC13{ m Fp FC14{ Fi[4]}} Fi Fc} Fc[3] Fp FC15{ BC16{ vd v74} BC17{ vd v75} vd v72 v73 Fp[2]} Fp}


 S839C2 ::~S839C2(){ note_dtor("S839C2", this);}
void  S839C2 ::v40(){vfunc_called(this, "_ZN6S839C23v40Ev");}
void  S839C2 ::v41(){vfunc_called(this, "_ZN6S839C23v41Ev");}
void  S839C2 ::v42(){vfunc_called(this, "_ZN6S839C23v42Ev");}
void  S839C2 ::v43(){vfunc_called(this, "_ZN6S839C23v43Ev");}
void  S839C2 ::v44(){vfunc_called(this, "_ZN6S839C23v44Ev");}
void  S839C2 ::v45(){vfunc_called(this, "_ZN6S839C23v45Ev");}
void  S839C2 ::v46(){vfunc_called(this, "_ZN6S839C23v46Ev");}
void  S839C2 ::v47(){vfunc_called(this, "_ZN6S839C23v47Ev");}
void  S839C2 ::v48(){vfunc_called(this, "_ZN6S839C23v48Ev");}
void  S839C2 ::v49(){vfunc_called(this, "_ZN6S839C23v49Ev");}
void  S839C2 ::v50(){vfunc_called(this, "_ZN6S839C23v50Ev");}
void  S839C2 ::v51(){vfunc_called(this, "_ZN6S839C23v51Ev");}
void  S839C2 ::v52(){vfunc_called(this, "_ZN6S839C23v52Ev");}
void  S839C2 ::v53(){vfunc_called(this, "_ZN6S839C23v53Ev");}
void  S839C2 ::v54(){vfunc_called(this, "_ZN6S839C23v54Ev");}
void  S839C2 ::v55(){vfunc_called(this, "_ZN6S839C23v55Ev");}
void  S839C2 ::v56(){vfunc_called(this, "_ZN6S839C23v56Ev");}
void  S839C2 ::v57(){vfunc_called(this, "_ZN6S839C23v57Ev");}
void  S839C2 ::v58(){vfunc_called(this, "_ZN6S839C23v58Ev");}
void  S839C2 ::v59(){vfunc_called(this, "_ZN6S839C23v59Ev");}
void  S839C2 ::v60(){vfunc_called(this, "_ZN6S839C23v60Ev");}
void  S839C2 ::v61(){vfunc_called(this, "_ZN6S839C23v61Ev");}
void  S839C2 ::v62(){vfunc_called(this, "_ZN6S839C23v62Ev");}
void  S839C2 ::v63(){vfunc_called(this, "_ZN6S839C23v63Ev");}
void  S839C2 ::v64(){vfunc_called(this, "_ZN6S839C23v64Ev");}
void  S839C2 ::v65(){vfunc_called(this, "_ZN6S839C23v65Ev");}
void  S839C2 ::v66(){vfunc_called(this, "_ZN6S839C23v66Ev");}
void  S839C2 ::v67(){vfunc_called(this, "_ZN6S839C23v67Ev");}
void  S839C2 ::v68(){vfunc_called(this, "_ZN6S839C23v68Ev");}
void  S839C2 ::v69(){vfunc_called(this, "_ZN6S839C23v69Ev");}
void  S839C2 ::v70(){vfunc_called(this, "_ZN6S839C23v70Ev");}
void  S839C2 ::v71(){vfunc_called(this, "_ZN6S839C23v71Ev");}
void  S839C2 ::v72(){vfunc_called(this, "_ZN6S839C23v72Ev");}
void  S839C2 ::v73(){vfunc_called(this, "_ZN6S839C23v73Ev");}
void  S839C2 ::v74(){vfunc_called(this, "_ZN6S839C23v74Ev");}
void  S839C2 ::v75(){vfunc_called(this, "_ZN6S839C23v75Ev");}
void  S839C2 ::v76(){vfunc_called(this, "_ZN6S839C23v76Ev");}
void  S839C2 ::v77(){vfunc_called(this, "_ZN6S839C23v77Ev");}
void  S839C2 ::v78(){vfunc_called(this, "_ZN6S839C23v78Ev");}
void  S839C2 ::v79(){vfunc_called(this, "_ZN6S839C23v79Ev");}
void  S839C2 ::v80(){vfunc_called(this, "_ZN6S839C23v80Ev");}
S839C2 ::S839C2(){ note_ctor("S839C2", this);} // tgen

static void Test_S839C2()
{
  extern Class_Descriptor cd_S839C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,36)];
    init_test(&cd_S839C2, buf);
    S839C2 *dp, &lv = *(dp=new (buf) S839C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,140), "sizeof(S839C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S839C2)");
    check_base_class_offset(lv, (S839C5*)(S839C4*)(S839C3*), 0, "S839C2");
    check_base_class_offset(lv, (S839C6*)(S839C4*)(S839C3*), ABISELECT(8,4), "S839C2");
    check_base_class_offset(lv, (S839C4*)(S839C3*), 0, "S839C2");
    check_base_class_offset(lv, (S839C3*), 0, "S839C2");
    check_base_class_offset(lv, (S839C11*), ABISELECT(80,44), "S839C2");
    check_field_offset(lv, s839c2f0, ABISELECT(88,48), "S839C2.s839c2f0");
    check_field_offset(lv, s839c2f1, ABISELECT(120,64), "S839C2.s839c2f1");
    check_field_offset(lv, s839c2f2, ABISELECT(192,112), "S839C2.s839c2f2");
    check_field_offset(lv, s839c2f3, ABISELECT(200,116), "S839C2.s839c2f3");
    check_field_offset(lv, s839c2f4, ABISELECT(208,120), "S839C2.s839c2f4");
    check_field_offset(lv, s839c2f5, ABISELECT(240,136), "S839C2.s839c2f5");
    test_class_info(&lv, &cd_S839C2);
    dp->~S839C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS839C2(Test_S839C2, "S839C2", ABISELECT(248,140));

#else // __cplusplus

extern void _ZN6S839C2C1Ev();
extern void _ZN6S839C2D1Ev();
Name_Map name_map_S839C2[] = {
  NSPAIR(_ZN6S839C2C1Ev),
  NSPAIR(_ZN6S839C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S839C5;
extern VTBL_ENTRY _ZTI6S839C5[];
extern  VTBL_ENTRY _ZTV6S839C5[];
extern Class_Descriptor cd_S839C6;
extern VTBL_ENTRY _ZTI6S839C6[];
extern  VTBL_ENTRY _ZTV6S839C6[];
extern Class_Descriptor cd_S839C4;
extern VTBL_ENTRY _ZTI6S839C4[];
extern  VTBL_ENTRY _ZTV6S839C4[];
extern Class_Descriptor cd_S839C3;
extern VTBL_ENTRY _ZTI6S839C3[];
extern  VTBL_ENTRY _ZTV6S839C3[];
extern Class_Descriptor cd_S839C11;
extern VTBL_ENTRY _ZTI7S839C11[];
extern  VTBL_ENTRY _ZTV7S839C11[];
static Base_Class bases_S839C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S839C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S839C6,    ABISELECT(8,4), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_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_S839C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S839C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S839C11,    ABISELECT(80,44), //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},
  {0}};
extern VTBL_ENTRY _ZTI6S839C2[];
extern void _ZN6S839C2D1Ev();
extern void _ZN6S839C2D0Ev();
extern void _ZN6S839C53v10Ev();
extern void _ZN6S839C53v11Ev();
extern void _ZN6S839C53v12Ev();
extern void _ZN6S839C43v14Ev();
extern void _ZN6S839C43v15Ev();
extern void _ZN6S839C43v16Ev();
extern void _ZN6S839C43v17Ev();
extern void _ZN6S839C43v18Ev();
extern void _ZN6S839C43v19Ev();
extern void _ZN6S839C43v20Ev();
extern void _ZN6S839C43v21Ev();
extern void _ZN6S839C43v22Ev();
extern void _ZN6S839C43v23Ev();
extern void _ZN6S839C43v24Ev();
extern void _ZN6S839C43v25Ev();
extern void _ZN6S839C43v26Ev();
extern void _ZN6S839C43v27Ev();
extern void _ZN6S839C43v28Ev();
extern void _ZN6S839C43v29Ev();
extern void _ZN6S839C43v30Ev();
extern void _ZN6S839C43v31Ev();
extern void _ZN6S839C43v32Ev();
extern void _ZN6S839C43v33Ev();
extern void _ZN6S839C43v34Ev();
extern void _ZN6S839C43v35Ev();
extern void _ZN6S839C33v36Ev();
extern void _ZN6S839C33v37Ev();
extern void _ZN6S839C33v38Ev();
extern void _ZN6S839C23v40Ev();
extern void _ZN6S839C23v41Ev();
extern void _ZN6S839C23v42Ev();
extern void _ZN6S839C23v43Ev();
extern void _ZN6S839C23v44Ev();
extern void _ZN6S839C23v45Ev();
extern void _ZN6S839C23v46Ev();
extern void _ZN6S839C23v47Ev();
extern void _ZN6S839C23v48Ev();
extern void _ZN6S839C23v49Ev();
extern void _ZN6S839C23v50Ev();
extern void _ZN6S839C23v51Ev();
extern void _ZN6S839C23v52Ev();
extern void _ZN6S839C23v53Ev();
extern void _ZN6S839C23v54Ev();
extern void _ZN6S839C23v55Ev();
extern void _ZN6S839C23v56Ev();
extern void _ZN6S839C23v57Ev();
extern void _ZN6S839C23v58Ev();
extern void _ZN6S839C23v59Ev();
extern void _ZN6S839C23v60Ev();
extern void _ZN6S839C23v61Ev();
extern void _ZN6S839C23v62Ev();
extern void _ZN6S839C23v63Ev();
extern void _ZN6S839C23v64Ev();
extern void _ZN6S839C23v65Ev();
extern void _ZN6S839C23v66Ev();
extern void _ZN6S839C23v67Ev();
extern void _ZN6S839C23v68Ev();
extern void _ZN6S839C23v69Ev();
extern void _ZN6S839C23v70Ev();
extern void _ZN6S839C23v71Ev();
extern void _ZN6S839C23v72Ev();
extern void _ZN6S839C23v73Ev();
extern void _ZN6S839C23v74Ev();
extern void _ZN6S839C23v75Ev();
extern void _ZN6S839C23v76Ev();
extern void _ZN6S839C23v77Ev();
extern void _ZN6S839C23v78Ev();
extern void _ZN6S839C23v79Ev();
extern void _ZN6S839C23v80Ev();
extern void ABISELECT(_ZThn8_N6S839C2D1Ev,_ZThn4_N6S839C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S839C2D0Ev,_ZThn4_N6S839C2D0Ev)();
extern void _ZN6S839C63v13Ev();
extern void ABISELECT(_ZThn80_N6S839C2D1Ev,_ZThn44_N6S839C2D1Ev)();
extern void ABISELECT(_ZThn80_N6S839C2D0Ev,_ZThn44_N6S839C2D0Ev)();
extern void _ZN7S839C113v39Ev();
static  VTBL_ENTRY vtc_S839C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S839C2[0]),
  (VTBL_ENTRY)&_ZN6S839C2D1Ev,
  (VTBL_ENTRY)&_ZN6S839C2D0Ev,
  (VTBL_ENTRY)&_ZN6S839C53v10Ev,
  (VTBL_ENTRY)&_ZN6S839C53v11Ev,
  (VTBL_ENTRY)&_ZN6S839C53v12Ev,
  (VTBL_ENTRY)&_ZN6S839C43v14Ev,
  (VTBL_ENTRY)&_ZN6S839C43v15Ev,
  (VTBL_ENTRY)&_ZN6S839C43v16Ev,
  (VTBL_ENTRY)&_ZN6S839C43v17Ev,
  (VTBL_ENTRY)&_ZN6S839C43v18Ev,
  (VTBL_ENTRY)&_ZN6S839C43v19Ev,
  (VTBL_ENTRY)&_ZN6S839C43v20Ev,
  (VTBL_ENTRY)&_ZN6S839C43v21Ev,
  (VTBL_ENTRY)&_ZN6S839C43v22Ev,
  (VTBL_ENTRY)&_ZN6S839C43v23Ev,
  (VTBL_ENTRY)&_ZN6S839C43v24Ev,
  (VTBL_ENTRY)&_ZN6S839C43v25Ev,
  (VTBL_ENTRY)&_ZN6S839C43v26Ev,
  (VTBL_ENTRY)&_ZN6S839C43v27Ev,
  (VTBL_ENTRY)&_ZN6S839C43v28Ev,
  (VTBL_ENTRY)&_ZN6S839C43v29Ev,
  (VTBL_ENTRY)&_ZN6S839C43v30Ev,
  (VTBL_ENTRY)&_ZN6S839C43v31Ev,
  (VTBL_ENTRY)&_ZN6S839C43v32Ev,
  (VTBL_ENTRY)&_ZN6S839C43v33Ev,
  (VTBL_ENTRY)&_ZN6S839C43v34Ev,
  (VTBL_ENTRY)&_ZN6S839C43v35Ev,
  (VTBL_ENTRY)&_ZN6S839C33v36Ev,
  (VTBL_ENTRY)&_ZN6S839C33v37Ev,
  (VTBL_ENTRY)&_ZN6S839C33v38Ev,
  (VTBL_ENTRY)&_ZN6S839C23v40Ev,
  (VTBL_ENTRY)&_ZN6S839C23v41Ev,
  (VTBL_ENTRY)&_ZN6S839C23v42Ev,
  (VTBL_ENTRY)&_ZN6S839C23v43Ev,
  (VTBL_ENTRY)&_ZN6S839C23v44Ev,
  (VTBL_ENTRY)&_ZN6S839C23v45Ev,
  (VTBL_ENTRY)&_ZN6S839C23v46Ev,
  (VTBL_ENTRY)&_ZN6S839C23v47Ev,
  (VTBL_ENTRY)&_ZN6S839C23v48Ev,
  (VTBL_ENTRY)&_ZN6S839C23v49Ev,
  (VTBL_ENTRY)&_ZN6S839C23v50Ev,
  (VTBL_ENTRY)&_ZN6S839C23v51Ev,
  (VTBL_ENTRY)&_ZN6S839C23v52Ev,
  (VTBL_ENTRY)&_ZN6S839C23v53Ev,
  (VTBL_ENTRY)&_ZN6S839C23v54Ev,
  (VTBL_ENTRY)&_ZN6S839C23v55Ev,
  (VTBL_ENTRY)&_ZN6S839C23v56Ev,
  (VTBL_ENTRY)&_ZN6S839C23v57Ev,
  (VTBL_ENTRY)&_ZN6S839C23v58Ev,
  (VTBL_ENTRY)&_ZN6S839C23v59Ev,
  (VTBL_ENTRY)&_ZN6S839C23v60Ev,
  (VTBL_ENTRY)&_ZN6S839C23v61Ev,
  (VTBL_ENTRY)&_ZN6S839C23v62Ev,
  (VTBL_ENTRY)&_ZN6S839C23v63Ev,
  (VTBL_ENTRY)&_ZN6S839C23v64Ev,
  (VTBL_ENTRY)&_ZN6S839C23v65Ev,
  (VTBL_ENTRY)&_ZN6S839C23v66Ev,
  (VTBL_ENTRY)&_ZN6S839C23v67Ev,
  (VTBL_ENTRY)&_ZN6S839C23v68Ev,
  (VTBL_ENTRY)&_ZN6S839C23v69Ev,
  (VTBL_ENTRY)&_ZN6S839C23v70Ev,
  (VTBL_ENTRY)&_ZN6S839C23v71Ev,
  (VTBL_ENTRY)&_ZN6S839C23v72Ev,
  (VTBL_ENTRY)&_ZN6S839C23v73Ev,
  (VTBL_ENTRY)&_ZN6S839C23v74Ev,
  (VTBL_ENTRY)&_ZN6S839C23v75Ev,
  (VTBL_ENTRY)&_ZN6S839C23v76Ev,
  (VTBL_ENTRY)&_ZN6S839C23v77Ev,
  (VTBL_ENTRY)&_ZN6S839C23v78Ev,
  (VTBL_ENTRY)&_ZN6S839C23v79Ev,
  (VTBL_ENTRY)&_ZN6S839C23v80Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S839C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S839C2D1Ev,_ZThn4_N6S839C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S839C2D0Ev,_ZThn4_N6S839C2D0Ev),
  (VTBL_ENTRY)&_ZN6S839C63v13Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI6S839C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S839C2D1Ev,_ZThn44_N6S839C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S839C2D0Ev,_ZThn44_N6S839C2D0Ev),
  (VTBL_ENTRY)&_ZN7S839C113v39Ev,
};
extern VTBL_ENTRY _ZTI6S839C2[];
extern  VTBL_ENTRY _ZTV6S839C2[];
Class_Descriptor cd_S839C2 = {  "S839C2", // class name
  bases_S839C2, 5,
  &(vtc_S839C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,140), // object size
  NSPAIRA(_ZTI6S839C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S839C2),83, //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  S839C1  : S839C2 {
  char s839c1f0;
  virtual  ~S839C1(); // _ZN6S839C1D1Ev
  virtual void  v1(); // _ZN6S839C12v1Ev
  virtual void  v2(); // _ZN6S839C12v2Ev
  virtual void  v3(); // _ZN6S839C12v3Ev
  virtual void  v4(); // _ZN6S839C12v4Ev
  virtual void  v5(); // _ZN6S839C12v5Ev
  virtual void  v6(); // _ZN6S839C12v6Ev
  virtual void  v7(); // _ZN6S839C12v7Ev
  virtual void  v8(); // _ZN6S839C12v8Ev
  virtual void  v9(); // _ZN6S839C12v9Ev
  S839C1(); // tgen
};
//SIG(1 S839C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v10 v11 v12} BC6{ vd v13} vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35} vd v36 v37 v38 FC7{ m Fp Fi[2] FC8{ m}} FC9{ m FC10{ Fl[4]}} Fc} BC11{ vd v39} vd 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 FC12{ m FC10} FC13{ m Fp FC9 FC14{ m Fp FC15{ Fi[4]}} Fi Fc} Fc[3] Fp FC16{ BC17{ vd v83} BC18{ vd v84} vd v81 v82 Fp[2]} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fc}


 S839C1 ::~S839C1(){ note_dtor("S839C1", this);}
void  S839C1 ::v1(){vfunc_called(this, "_ZN6S839C12v1Ev");}
void  S839C1 ::v2(){vfunc_called(this, "_ZN6S839C12v2Ev");}
void  S839C1 ::v3(){vfunc_called(this, "_ZN6S839C12v3Ev");}
void  S839C1 ::v4(){vfunc_called(this, "_ZN6S839C12v4Ev");}
void  S839C1 ::v5(){vfunc_called(this, "_ZN6S839C12v5Ev");}
void  S839C1 ::v6(){vfunc_called(this, "_ZN6S839C12v6Ev");}
void  S839C1 ::v7(){vfunc_called(this, "_ZN6S839C12v7Ev");}
void  S839C1 ::v8(){vfunc_called(this, "_ZN6S839C12v8Ev");}
void  S839C1 ::v9(){vfunc_called(this, "_ZN6S839C12v9Ev");}
S839C1 ::S839C1(){ note_ctor("S839C1", this);} // tgen

static void Test_S839C1()
{
  extern Class_Descriptor cd_S839C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,37)];
    init_test(&cd_S839C1, buf);
    S839C1 *dp, &lv = *(dp=new (buf) S839C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,144), "sizeof(S839C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S839C1)");
    check_base_class_offset(lv, (S839C5*)(S839C4*)(S839C3*)(S839C2*), 0, "S839C1");
    check_base_class_offset(lv, (S839C6*)(S839C4*)(S839C3*)(S839C2*), ABISELECT(8,4), "S839C1");
    check_base_class_offset(lv, (S839C4*)(S839C3*)(S839C2*), 0, "S839C1");
    check_base_class_offset(lv, (S839C3*)(S839C2*), 0, "S839C1");
    check_base_class_offset(lv, (S839C11*)(S839C2*), ABISELECT(80,44), "S839C1");
    check_base_class_offset(lv, (S839C2*), 0, "S839C1");
    check_field_offset(lv, s839c1f0, ABISELECT(248,140), "S839C1.s839c1f0");
    test_class_info(&lv, &cd_S839C1);
    dp->~S839C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS839C1(Test_S839C1, "S839C1", ABISELECT(256,144));

#else // __cplusplus

extern void _ZN6S839C1C1Ev();
extern void _ZN6S839C1D1Ev();
Name_Map name_map_S839C1[] = {
  NSPAIR(_ZN6S839C1C1Ev),
  NSPAIR(_ZN6S839C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S839C5;
extern VTBL_ENTRY _ZTI6S839C5[];
extern  VTBL_ENTRY _ZTV6S839C5[];
extern Class_Descriptor cd_S839C6;
extern VTBL_ENTRY _ZTI6S839C6[];
extern  VTBL_ENTRY _ZTV6S839C6[];
extern Class_Descriptor cd_S839C4;
extern VTBL_ENTRY _ZTI6S839C4[];
extern  VTBL_ENTRY _ZTV6S839C4[];
extern Class_Descriptor cd_S839C3;
extern VTBL_ENTRY _ZTI6S839C3[];
extern  VTBL_ENTRY _ZTV6S839C3[];
extern Class_Descriptor cd_S839C11;
extern VTBL_ENTRY _ZTI7S839C11[];
extern  VTBL_ENTRY _ZTV7S839C11[];
extern Class_Descriptor cd_S839C2;
extern VTBL_ENTRY _ZTI6S839C2[];
extern  VTBL_ENTRY _ZTV6S839C2[];
static Base_Class bases_S839C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S839C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S839C6,    ABISELECT(8,4), //bcp->offset
    82, //bcp->virtual_function_table_offset
    2, //num_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_S839C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S839C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S839C11,    ABISELECT(80,44), //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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S839C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S839C1[];
extern void _ZN6S839C1D1Ev();
extern void _ZN6S839C1D0Ev();
extern void _ZN6S839C53v10Ev();
extern void _ZN6S839C53v11Ev();
extern void _ZN6S839C53v12Ev();
extern void _ZN6S839C43v14Ev();
extern void _ZN6S839C43v15Ev();
extern void _ZN6S839C43v16Ev();
extern void _ZN6S839C43v17Ev();
extern void _ZN6S839C43v18Ev();
extern void _ZN6S839C43v19Ev();
extern void _ZN6S839C43v20Ev();
extern void _ZN6S839C43v21Ev();
extern void _ZN6S839C43v22Ev();
extern void _ZN6S839C43v23Ev();
extern void _ZN6S839C43v24Ev();
extern void _ZN6S839C43v25Ev();
extern void _ZN6S839C43v26Ev();
extern void _ZN6S839C43v27Ev();
extern void _ZN6S839C43v28Ev();
extern void _ZN6S839C43v29Ev();
extern void _ZN6S839C43v30Ev();
extern void _ZN6S839C43v31Ev();
extern void _ZN6S839C43v32Ev();
extern void _ZN6S839C43v33Ev();
extern void _ZN6S839C43v34Ev();
extern void _ZN6S839C43v35Ev();
extern void _ZN6S839C33v36Ev();
extern void _ZN6S839C33v37Ev();
extern void _ZN6S839C33v38Ev();
extern void _ZN6S839C23v40Ev();
extern void _ZN6S839C23v41Ev();
extern void _ZN6S839C23v42Ev();
extern void _ZN6S839C23v43Ev();
extern void _ZN6S839C23v44Ev();
extern void _ZN6S839C23v45Ev();
extern void _ZN6S839C23v46Ev();
extern void _ZN6S839C23v47Ev();
extern void _ZN6S839C23v48Ev();
extern void _ZN6S839C23v49Ev();
extern void _ZN6S839C23v50Ev();
extern void _ZN6S839C23v51Ev();
extern void _ZN6S839C23v52Ev();
extern void _ZN6S839C23v53Ev();
extern void _ZN6S839C23v54Ev();
extern void _ZN6S839C23v55Ev();
extern void _ZN6S839C23v56Ev();
extern void _ZN6S839C23v57Ev();
extern void _ZN6S839C23v58Ev();
extern void _ZN6S839C23v59Ev();
extern void _ZN6S839C23v60Ev();
extern void _ZN6S839C23v61Ev();
extern void _ZN6S839C23v62Ev();
extern void _ZN6S839C23v63Ev();
extern void _ZN6S839C23v64Ev();
extern void _ZN6S839C23v65Ev();
extern void _ZN6S839C23v66Ev();
extern void _ZN6S839C23v67Ev();
extern void _ZN6S839C23v68Ev();
extern void _ZN6S839C23v69Ev();
extern void _ZN6S839C23v70Ev();
extern void _ZN6S839C23v71Ev();
extern void _ZN6S839C23v72Ev();
extern void _ZN6S839C23v73Ev();
extern void _ZN6S839C23v74Ev();
extern void _ZN6S839C23v75Ev();
extern void _ZN6S839C23v76Ev();
extern void _ZN6S839C23v77Ev();
extern void _ZN6S839C23v78Ev();
extern void _ZN6S839C23v79Ev();
extern void _ZN6S839C23v80Ev();
extern void _ZN6S839C12v1Ev();
extern void _ZN6S839C12v2Ev();
extern void _ZN6S839C12v3Ev();
extern void _ZN6S839C12v4Ev();
extern void _ZN6S839C12v5Ev();
extern void _ZN6S839C12v6Ev();
extern void _ZN6S839C12v7Ev();
extern void _ZN6S839C12v8Ev();
extern void _ZN6S839C12v9Ev();
extern void ABISELECT(_ZThn8_N6S839C1D1Ev,_ZThn4_N6S839C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S839C1D0Ev,_ZThn4_N6S839C1D0Ev)();
extern void _ZN6S839C63v13Ev();
extern void ABISELECT(_ZThn80_N6S839C1D1Ev,_ZThn44_N6S839C1D1Ev)();
extern void ABISELECT(_ZThn80_N6S839C1D0Ev,_ZThn44_N6S839C1D0Ev)();
extern void _ZN7S839C113v39Ev();
static  VTBL_ENTRY vtc_S839C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S839C1[0]),
  (VTBL_ENTRY)&_ZN6S839C1D1Ev,
  (VTBL_ENTRY)&_ZN6S839C1D0Ev,
  (VTBL_ENTRY)&_ZN6S839C53v10Ev,
  (VTBL_ENTRY)&_ZN6S839C53v11Ev,
  (VTBL_ENTRY)&_ZN6S839C53v12Ev,
  (VTBL_ENTRY)&_ZN6S839C43v14Ev,
  (VTBL_ENTRY)&_ZN6S839C43v15Ev,
  (VTBL_ENTRY)&_ZN6S839C43v16Ev,
  (VTBL_ENTRY)&_ZN6S839C43v17Ev,
  (VTBL_ENTRY)&_ZN6S839C43v18Ev,
  (VTBL_ENTRY)&_ZN6S839C43v19Ev,
  (VTBL_ENTRY)&_ZN6S839C43v20Ev,
  (VTBL_ENTRY)&_ZN6S839C43v21Ev,
  (VTBL_ENTRY)&_ZN6S839C43v22Ev,
  (VTBL_ENTRY)&_ZN6S839C43v23Ev,
  (VTBL_ENTRY)&_ZN6S839C43v24Ev,
  (VTBL_ENTRY)&_ZN6S839C43v25Ev,
  (VTBL_ENTRY)&_ZN6S839C43v26Ev,
  (VTBL_ENTRY)&_ZN6S839C43v27Ev,
  (VTBL_ENTRY)&_ZN6S839C43v28Ev,
  (VTBL_ENTRY)&_ZN6S839C43v29Ev,
  (VTBL_ENTRY)&_ZN6S839C43v30Ev,
  (VTBL_ENTRY)&_ZN6S839C43v31Ev,
  (VTBL_ENTRY)&_ZN6S839C43v32Ev,
  (VTBL_ENTRY)&_ZN6S839C43v33Ev,
  (VTBL_ENTRY)&_ZN6S839C43v34Ev,
  (VTBL_ENTRY)&_ZN6S839C43v35Ev,
  (VTBL_ENTRY)&_ZN6S839C33v36Ev,
  (VTBL_ENTRY)&_ZN6S839C33v37Ev,
  (VTBL_ENTRY)&_ZN6S839C33v38Ev,
  (VTBL_ENTRY)&_ZN6S839C23v40Ev,
  (VTBL_ENTRY)&_ZN6S839C23v41Ev,
  (VTBL_ENTRY)&_ZN6S839C23v42Ev,
  (VTBL_ENTRY)&_ZN6S839C23v43Ev,
  (VTBL_ENTRY)&_ZN6S839C23v44Ev,
  (VTBL_ENTRY)&_ZN6S839C23v45Ev,
  (VTBL_ENTRY)&_ZN6S839C23v46Ev,
  (VTBL_ENTRY)&_ZN6S839C23v47Ev,
  (VTBL_ENTRY)&_ZN6S839C23v48Ev,
  (VTBL_ENTRY)&_ZN6S839C23v49Ev,
  (VTBL_ENTRY)&_ZN6S839C23v50Ev,
  (VTBL_ENTRY)&_ZN6S839C23v51Ev,
  (VTBL_ENTRY)&_ZN6S839C23v52Ev,
  (VTBL_ENTRY)&_ZN6S839C23v53Ev,
  (VTBL_ENTRY)&_ZN6S839C23v54Ev,
  (VTBL_ENTRY)&_ZN6S839C23v55Ev,
  (VTBL_ENTRY)&_ZN6S839C23v56Ev,
  (VTBL_ENTRY)&_ZN6S839C23v57Ev,
  (VTBL_ENTRY)&_ZN6S839C23v58Ev,
  (VTBL_ENTRY)&_ZN6S839C23v59Ev,
  (VTBL_ENTRY)&_ZN6S839C23v60Ev,
  (VTBL_ENTRY)&_ZN6S839C23v61Ev,
  (VTBL_ENTRY)&_ZN6S839C23v62Ev,
  (VTBL_ENTRY)&_ZN6S839C23v63Ev,
  (VTBL_ENTRY)&_ZN6S839C23v64Ev,
  (VTBL_ENTRY)&_ZN6S839C23v65Ev,
  (VTBL_ENTRY)&_ZN6S839C23v66Ev,
  (VTBL_ENTRY)&_ZN6S839C23v67Ev,
  (VTBL_ENTRY)&_ZN6S839C23v68Ev,
  (VTBL_ENTRY)&_ZN6S839C23v69Ev,
  (VTBL_ENTRY)&_ZN6S839C23v70Ev,
  (VTBL_ENTRY)&_ZN6S839C23v71Ev,
  (VTBL_ENTRY)&_ZN6S839C23v72Ev,
  (VTBL_ENTRY)&_ZN6S839C23v73Ev,
  (VTBL_ENTRY)&_ZN6S839C23v74Ev,
  (VTBL_ENTRY)&_ZN6S839C23v75Ev,
  (VTBL_ENTRY)&_ZN6S839C23v76Ev,
  (VTBL_ENTRY)&_ZN6S839C23v77Ev,
  (VTBL_ENTRY)&_ZN6S839C23v78Ev,
  (VTBL_ENTRY)&_ZN6S839C23v79Ev,
  (VTBL_ENTRY)&_ZN6S839C23v80Ev,
  (VTBL_ENTRY)&_ZN6S839C12v1Ev,
  (VTBL_ENTRY)&_ZN6S839C12v2Ev,
  (VTBL_ENTRY)&_ZN6S839C12v3Ev,
  (VTBL_ENTRY)&_ZN6S839C12v4Ev,
  (VTBL_ENTRY)&_ZN6S839C12v5Ev,
  (VTBL_ENTRY)&_ZN6S839C12v6Ev,
  (VTBL_ENTRY)&_ZN6S839C12v7Ev,
  (VTBL_ENTRY)&_ZN6S839C12v8Ev,
  (VTBL_ENTRY)&_ZN6S839C12v9Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S839C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S839C1D1Ev,_ZThn4_N6S839C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S839C1D0Ev,_ZThn4_N6S839C1D0Ev),
  (VTBL_ENTRY)&_ZN6S839C63v13Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI6S839C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S839C1D1Ev,_ZThn44_N6S839C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S839C1D0Ev,_ZThn44_N6S839C1D0Ev),
  (VTBL_ENTRY)&_ZN7S839C113v39Ev,
};
extern VTBL_ENTRY _ZTI6S839C1[];
extern  VTBL_ENTRY _ZTV6S839C1[];
Class_Descriptor cd_S839C1 = {  "S839C1", // class name
  bases_S839C1, 6,
  &(vtc_S839C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,144), // object size
  NSPAIRA(_ZTI6S839C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S839C1),92, //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  S840C5  {
  virtual  ~S840C5(); // _ZN6S840C5D1Ev
  virtual void  v10(); // _ZN6S840C53v10Ev
  virtual void  v11(); // _ZN6S840C53v11Ev
  virtual void  v12(); // _ZN6S840C53v12Ev
  S840C5(); // tgen
};
//SIG(-1 S840C5) C1{ vd v1 v2 v3}


 S840C5 ::~S840C5(){ note_dtor("S840C5", this);}
void  S840C5 ::v10(){vfunc_called(this, "_ZN6S840C53v10Ev");}
void  S840C5 ::v11(){vfunc_called(this, "_ZN6S840C53v11Ev");}
void  S840C5 ::v12(){vfunc_called(this, "_ZN6S840C53v12Ev");}
S840C5 ::S840C5(){ note_ctor("S840C5", this);} // tgen

static void Test_S840C5()
{
  extern Class_Descriptor cd_S840C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S840C5, buf);
    S840C5 *dp, &lv = *(dp=new (buf) S840C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S840C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S840C5)");
    test_class_info(&lv, &cd_S840C5);
    dp->~S840C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS840C5(Test_S840C5, "S840C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S840C5C1Ev();
extern void _ZN6S840C5D1Ev();
Name_Map name_map_S840C5[] = {
  NSPAIR(_ZN6S840C5C1Ev),
  NSPAIR(_ZN6S840C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S840C5[];
extern void _ZN6S840C5D1Ev();
extern void _ZN6S840C5D0Ev();
extern void _ZN6S840C53v10Ev();
extern void _ZN6S840C53v11Ev();
extern void _ZN6S840C53v12Ev();
static  VTBL_ENTRY vtc_S840C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S840C5[0]),
  (VTBL_ENTRY)&_ZN6S840C5D1Ev,
  (VTBL_ENTRY)&_ZN6S840C5D0Ev,
  (VTBL_ENTRY)&_ZN6S840C53v10Ev,
  (VTBL_ENTRY)&_ZN6S840C53v11Ev,
  (VTBL_ENTRY)&_ZN6S840C53v12Ev,
};
extern VTBL_ENTRY _ZTI6S840C5[];
extern  VTBL_ENTRY _ZTV6S840C5[];
Class_Descriptor cd_S840C5 = {  "S840C5", // class name
  0,0,//no base classes
  &(vtc_S840C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S840C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S840C5),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  S840C6  {
  virtual  ~S840C6(); // _ZN6S840C6D1Ev
  virtual void  v13(); // _ZN6S840C63v13Ev
  S840C6(); // tgen
};
//SIG(-1 S840C6) C1{ vd v1}


 S840C6 ::~S840C6(){ note_dtor("S840C6", this);}
void  S840C6 ::v13(){vfunc_called(this, "_ZN6S840C63v13Ev");}
S840C6 ::S840C6(){ note_ctor("S840C6", this);} // tgen

static void Test_S840C6()
{
  extern Class_Descriptor cd_S840C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S840C6, buf);
    S840C6 *dp, &lv = *(dp=new (buf) S840C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S840C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S840C6)");
    test_class_info(&lv, &cd_S840C6);
    dp->~S840C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS840C6(Test_S840C6, "S840C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S840C6C1Ev();
extern void _ZN6S840C6D1Ev();
Name_Map name_map_S840C6[] = {
  NSPAIR(_ZN6S840C6C1Ev),
  NSPAIR(_ZN6S840C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S840C6[];
extern void _ZN6S840C6D1Ev();
extern void _ZN6S840C6D0Ev();
extern void _ZN6S840C63v13Ev();
static  VTBL_ENTRY vtc_S840C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S840C6[0]),
  (VTBL_ENTRY)&_ZN6S840C6D1Ev,
  (VTBL_ENTRY)&_ZN6S840C6D0Ev,
  (VTBL_ENTRY)&_ZN6S840C63v13Ev,
};
extern VTBL_ENTRY _ZTI6S840C6[];
extern  VTBL_ENTRY _ZTV6S840C6[];
Class_Descriptor cd_S840C6 = {  "S840C6", // class name
  0,0,//no base classes
  &(vtc_S840C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S840C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S840C6),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  S840C4  : S840C5 , S840C6 {
  virtual  ~S840C4(); // _ZN6S840C4D1Ev
  virtual void  v14(); // _ZN6S840C43v14Ev
  virtual void  v15(); // _ZN6S840C43v15Ev
  virtual void  v16(); // _ZN6S840C43v16Ev
  virtual void  v17(); // _ZN6S840C43v17Ev
  virtual void  v18(); // _ZN6S840C43v18Ev
  virtual void  v19(); // _ZN6S840C43v19Ev
  virtual void  v20(); // _ZN6S840C43v20Ev
  virtual void  v21(); // _ZN6S840C43v21Ev
  virtual void  v22(); // _ZN6S840C43v22Ev
  virtual void  v23(); // _ZN6S840C43v23Ev
  virtual void  v24(); // _ZN6S840C43v24Ev
  virtual void  v25(); // _ZN6S840C43v25Ev
  virtual void  v26(); // _ZN6S840C43v26Ev
  virtual void  v27(); // _ZN6S840C43v27Ev
  virtual void  v28(); // _ZN6S840C43v28Ev
  virtual void  v29(); // _ZN6S840C43v29Ev
  virtual void  v30(); // _ZN6S840C43v30Ev
  virtual void  v31(); // _ZN6S840C43v31Ev
  virtual void  v32(); // _ZN6S840C43v32Ev
  virtual void  v33(); // _ZN6S840C43v33Ev
  virtual void  v34(); // _ZN6S840C43v34Ev
  virtual void  v35(); // _ZN6S840C43v35Ev
  S840C4(); // tgen
};
//SIG(-1 S840C4) C1{ BC2{ vd v23 v24 v25} BC3{ vd v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S840C4 ::~S840C4(){ note_dtor("S840C4", this);}
void  S840C4 ::v14(){vfunc_called(this, "_ZN6S840C43v14Ev");}
void  S840C4 ::v15(){vfunc_called(this, "_ZN6S840C43v15Ev");}
void  S840C4 ::v16(){vfunc_called(this, "_ZN6S840C43v16Ev");}
void  S840C4 ::v17(){vfunc_called(this, "_ZN6S840C43v17Ev");}
void  S840C4 ::v18(){vfunc_called(this, "_ZN6S840C43v18Ev");}
void  S840C4 ::v19(){vfunc_called(this, "_ZN6S840C43v19Ev");}
void  S840C4 ::v20(){vfunc_called(this, "_ZN6S840C43v20Ev");}
void  S840C4 ::v21(){vfunc_called(this, "_ZN6S840C43v21Ev");}
void  S840C4 ::v22(){vfunc_called(this, "_ZN6S840C43v22Ev");}
void  S840C4 ::v23(){vfunc_called(this, "_ZN6S840C43v23Ev");}
void  S840C4 ::v24(){vfunc_called(this, "_ZN6S840C43v24Ev");}
void  S840C4 ::v25(){vfunc_called(this, "_ZN6S840C43v25Ev");}
void  S840C4 ::v26(){vfunc_called(this, "_ZN6S840C43v26Ev");}
void  S840C4 ::v27(){vfunc_called(this, "_ZN6S840C43v27Ev");}
void  S840C4 ::v28(){vfunc_called(this, "_ZN6S840C43v28Ev");}
void  S840C4 ::v29(){vfunc_called(this, "_ZN6S840C43v29Ev");}
void  S840C4 ::v30(){vfunc_called(this, "_ZN6S840C43v30Ev");}
void  S840C4 ::v31(){vfunc_called(this, "_ZN6S840C43v31Ev");}
void  S840C4 ::v32(){vfunc_called(this, "_ZN6S840C43v32Ev");}
void  S840C4 ::v33(){vfunc_called(this, "_ZN6S840C43v33Ev");}
void  S840C4 ::v34(){vfunc_called(this, "_ZN6S840C43v34Ev");}
void  S840C4 ::v35(){vfunc_called(this, "_ZN6S840C43v35Ev");}
S840C4 ::S840C4(){ note_ctor("S840C4", this);} // tgen

static void Test_S840C4()
{
  extern Class_Descriptor cd_S840C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S840C4, buf);
    S840C4 *dp, &lv = *(dp=new (buf) S840C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S840C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S840C4)");
    check_base_class_offset(lv, (S840C5*), 0, "S840C4");
    check_base_class_offset(lv, (S840C6*), ABISELECT(8,4), "S840C4");
    test_class_info(&lv, &cd_S840C4);
    dp->~S840C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS840C4(Test_S840C4, "S840C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S840C4C1Ev();
extern void _ZN6S840C4D1Ev();
Name_Map name_map_S840C4[] = {
  NSPAIR(_ZN6S840C4C1Ev),
  NSPAIR(_ZN6S840C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S840C5;
extern VTBL_ENTRY _ZTI6S840C5[];
extern  VTBL_ENTRY _ZTV6S840C5[];
extern Class_Descriptor cd_S840C6;
extern VTBL_ENTRY _ZTI6S840C6[];
extern  VTBL_ENTRY _ZTV6S840C6[];
static Base_Class bases_S840C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S840C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S840C6,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S840C4[];
extern void _ZN6S840C4D1Ev();
extern void _ZN6S840C4D0Ev();
extern void _ZN6S840C53v10Ev();
extern void _ZN6S840C53v11Ev();
extern void _ZN6S840C53v12Ev();
extern void _ZN6S840C43v14Ev();
extern void _ZN6S840C43v15Ev();
extern void _ZN6S840C43v16Ev();
extern void _ZN6S840C43v17Ev();
extern void _ZN6S840C43v18Ev();
extern void _ZN6S840C43v19Ev();
extern void _ZN6S840C43v20Ev();
extern void _ZN6S840C43v21Ev();
extern void _ZN6S840C43v22Ev();
extern void _ZN6S840C43v23Ev();
extern void _ZN6S840C43v24Ev();
extern void _ZN6S840C43v25Ev();
extern void _ZN6S840C43v26Ev();
extern void _ZN6S840C43v27Ev();
extern void _ZN6S840C43v28Ev();
extern void _ZN6S840C43v29Ev();
extern void _ZN6S840C43v30Ev();
extern void _ZN6S840C43v31Ev();
extern void _ZN6S840C43v32Ev();
extern void _ZN6S840C43v33Ev();
extern void _ZN6S840C43v34Ev();
extern void _ZN6S840C43v35Ev();
extern void ABISELECT(_ZThn8_N6S840C4D1Ev,_ZThn4_N6S840C4D1Ev)();
extern void ABISELECT(_ZThn8_N6S840C4D0Ev,_ZThn4_N6S840C4D0Ev)();
extern void _ZN6S840C63v13Ev();
static  VTBL_ENTRY vtc_S840C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S840C4[0]),
  (VTBL_ENTRY)&_ZN6S840C4D1Ev,
  (VTBL_ENTRY)&_ZN6S840C4D0Ev,
  (VTBL_ENTRY)&_ZN6S840C53v10Ev,
  (VTBL_ENTRY)&_ZN6S840C53v11Ev,
  (VTBL_ENTRY)&_ZN6S840C53v12Ev,
  (VTBL_ENTRY)&_ZN6S840C43v14Ev,
  (VTBL_ENTRY)&_ZN6S840C43v15Ev,
  (VTBL_ENTRY)&_ZN6S840C43v16Ev,
  (VTBL_ENTRY)&_ZN6S840C43v17Ev,
  (VTBL_ENTRY)&_ZN6S840C43v18Ev,
  (VTBL_ENTRY)&_ZN6S840C43v19Ev,
  (VTBL_ENTRY)&_ZN6S840C43v20Ev,
  (VTBL_ENTRY)&_ZN6S840C43v21Ev,
  (VTBL_ENTRY)&_ZN6S840C43v22Ev,
  (VTBL_ENTRY)&_ZN6S840C43v23Ev,
  (VTBL_ENTRY)&_ZN6S840C43v24Ev,
  (VTBL_ENTRY)&_ZN6S840C43v25Ev,
  (VTBL_ENTRY)&_ZN6S840C43v26Ev,
  (VTBL_ENTRY)&_ZN6S840C43v27Ev,
  (VTBL_ENTRY)&_ZN6S840C43v28Ev,
  (VTBL_ENTRY)&_ZN6S840C43v29Ev,
  (VTBL_ENTRY)&_ZN6S840C43v30Ev,
  (VTBL_ENTRY)&_ZN6S840C43v31Ev,
  (VTBL_ENTRY)&_ZN6S840C43v32Ev,
  (VTBL_ENTRY)&_ZN6S840C43v33Ev,
  (VTBL_ENTRY)&_ZN6S840C43v34Ev,
  (VTBL_ENTRY)&_ZN6S840C43v35Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S840C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S840C4D1Ev,_ZThn4_N6S840C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S840C4D0Ev,_ZThn4_N6S840C4D0Ev),
  (VTBL_ENTRY)&_ZN6S840C63v13Ev,
};
extern VTBL_ENTRY _ZTI6S840C4[];
extern  VTBL_ENTRY _ZTV6S840C4[];
Class_Descriptor cd_S840C4 = {  "S840C4", // class name
  bases_S840C4, 2,
  &(vtc_S840C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S840C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S840C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S840C3  : S840C4 {
  ::S857C7_nt s840c3f0;
  ::S857C9_nt s840c3f1;
  char s840c3f2;
  virtual  ~S840C3(); // _ZN6S840C3D1Ev
  virtual void  v36(); // _ZN6S840C33v36Ev
  virtual void  v37(); // _ZN6S840C33v37Ev
  virtual void  v38(); // _ZN6S840C33v38Ev
  S840C3(); // tgen
};
//SIG(-1 S840C3) C1{ BC2{ BC3{ vd v4 v5 v6} BC4{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ FL[4]}} Fc}


 S840C3 ::~S840C3(){ note_dtor("S840C3", this);}
void  S840C3 ::v36(){vfunc_called(this, "_ZN6S840C33v36Ev");}
void  S840C3 ::v37(){vfunc_called(this, "_ZN6S840C33v37Ev");}
void  S840C3 ::v38(){vfunc_called(this, "_ZN6S840C33v38Ev");}
S840C3 ::S840C3(){ note_ctor("S840C3", this);} // tgen

static void Test_S840C3()
{
  extern Class_Descriptor cd_S840C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S840C3, buf);
    S840C3 *dp, &lv = *(dp=new (buf) S840C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S840C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S840C3)");
    check_base_class_offset(lv, (S840C5*)(S840C4*), 0, "S840C3");
    check_base_class_offset(lv, (S840C6*)(S840C4*), ABISELECT(8,4), "S840C3");
    check_base_class_offset(lv, (S840C4*), 0, "S840C3");
    check_field_offset(lv, s840c3f0, ABISELECT(16,8), "S840C3.s840c3f0");
    check_field_offset(lv, s840c3f1, ABISELECT(40,24), "S840C3.s840c3f1");
    check_field_offset(lv, s840c3f2, ABISELECT(72,56), "S840C3.s840c3f2");
    test_class_info(&lv, &cd_S840C3);
    dp->~S840C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS840C3(Test_S840C3, "S840C3", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN6S840C3C1Ev();
extern void _ZN6S840C3D1Ev();
Name_Map name_map_S840C3[] = {
  NSPAIR(_ZN6S840C3C1Ev),
  NSPAIR(_ZN6S840C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S840C5;
extern VTBL_ENTRY _ZTI6S840C5[];
extern  VTBL_ENTRY _ZTV6S840C5[];
extern Class_Descriptor cd_S840C6;
extern VTBL_ENTRY _ZTI6S840C6[];
extern  VTBL_ENTRY _ZTV6S840C6[];
extern Class_Descriptor cd_S840C4;
extern VTBL_ENTRY _ZTI6S840C4[];
extern  VTBL_ENTRY _ZTV6S840C4[];
static Base_Class bases_S840C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S840C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S840C6,    ABISELECT(8,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S840C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S840C3[];
extern void _ZN6S840C3D1Ev();
extern void _ZN6S840C3D0Ev();
extern void _ZN6S840C53v10Ev();
extern void _ZN6S840C53v11Ev();
extern void _ZN6S840C53v12Ev();
extern void _ZN6S840C43v14Ev();
extern void _ZN6S840C43v15Ev();
extern void _ZN6S840C43v16Ev();
extern void _ZN6S840C43v17Ev();
extern void _ZN6S840C43v18Ev();
extern void _ZN6S840C43v19Ev();
extern void _ZN6S840C43v20Ev();
extern void _ZN6S840C43v21Ev();
extern void _ZN6S840C43v22Ev();
extern void _ZN6S840C43v23Ev();
extern void _ZN6S840C43v24Ev();
extern void _ZN6S840C43v25Ev();
extern void _ZN6S840C43v26Ev();
extern void _ZN6S840C43v27Ev();
extern void _ZN6S840C43v28Ev();
extern void _ZN6S840C43v29Ev();
extern void _ZN6S840C43v30Ev();
extern void _ZN6S840C43v31Ev();
extern void _ZN6S840C43v32Ev();
extern void _ZN6S840C43v33Ev();
extern void _ZN6S840C43v34Ev();
extern void _ZN6S840C43v35Ev();
extern void _ZN6S840C33v36Ev();
extern void _ZN6S840C33v37Ev();
extern void _ZN6S840C33v38Ev();
extern void ABISELECT(_ZThn8_N6S840C3D1Ev,_ZThn4_N6S840C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S840C3D0Ev,_ZThn4_N6S840C3D0Ev)();
extern void _ZN6S840C63v13Ev();
static  VTBL_ENTRY vtc_S840C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S840C3[0]),
  (VTBL_ENTRY)&_ZN6S840C3D1Ev,
  (VTBL_ENTRY)&_ZN6S840C3D0Ev,
  (VTBL_ENTRY)&_ZN6S840C53v10Ev,
  (VTBL_ENTRY)&_ZN6S840C53v11Ev,
  (VTBL_ENTRY)&_ZN6S840C53v12Ev,
  (VTBL_ENTRY)&_ZN6S840C43v14Ev,
  (VTBL_ENTRY)&_ZN6S840C43v15Ev,
  (VTBL_ENTRY)&_ZN6S840C43v16Ev,
  (VTBL_ENTRY)&_ZN6S840C43v17Ev,
  (VTBL_ENTRY)&_ZN6S840C43v18Ev,
  (VTBL_ENTRY)&_ZN6S840C43v19Ev,
  (VTBL_ENTRY)&_ZN6S840C43v20Ev,
  (VTBL_ENTRY)&_ZN6S840C43v21Ev,
  (VTBL_ENTRY)&_ZN6S840C43v22Ev,
  (VTBL_ENTRY)&_ZN6S840C43v23Ev,
  (VTBL_ENTRY)&_ZN6S840C43v24Ev,
  (VTBL_ENTRY)&_ZN6S840C43v25Ev,
  (VTBL_ENTRY)&_ZN6S840C43v26Ev,
  (VTBL_ENTRY)&_ZN6S840C43v27Ev,
  (VTBL_ENTRY)&_ZN6S840C43v28Ev,
  (VTBL_ENTRY)&_ZN6S840C43v29Ev,
  (VTBL_ENTRY)&_ZN6S840C43v30Ev,
  (VTBL_ENTRY)&_ZN6S840C43v31Ev,
  (VTBL_ENTRY)&_ZN6S840C43v32Ev,
  (VTBL_ENTRY)&_ZN6S840C43v33Ev,
  (VTBL_ENTRY)&_ZN6S840C43v34Ev,
  (VTBL_ENTRY)&_ZN6S840C43v35Ev,
  (VTBL_ENTRY)&_ZN6S840C33v36Ev,
  (VTBL_ENTRY)&_ZN6S840C33v37Ev,
  (VTBL_ENTRY)&_ZN6S840C33v38Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S840C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S840C3D1Ev,_ZThn4_N6S840C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S840C3D0Ev,_ZThn4_N6S840C3D0Ev),
  (VTBL_ENTRY)&_ZN6S840C63v13Ev,
};
extern VTBL_ENTRY _ZTI6S840C3[];
extern  VTBL_ENTRY _ZTV6S840C3[];
Class_Descriptor cd_S840C3 = {  "S840C3", // class name
  bases_S840C3, 3,
  &(vtc_S840C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI6S840C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S840C3),37, //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  S840C11  {
  virtual  ~S840C11(); // _ZN7S840C11D1Ev
  virtual void  v39(); // _ZN7S840C113v39Ev
  S840C11(); // tgen
};
//SIG(-1 S840C11) C1{ vd v1}


 S840C11 ::~S840C11(){ note_dtor("S840C11", this);}
void  S840C11 ::v39(){vfunc_called(this, "_ZN7S840C113v39Ev");}
S840C11 ::S840C11(){ note_ctor("S840C11", this);} // tgen

static void Test_S840C11()
{
  extern Class_Descriptor cd_S840C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S840C11, buf);
    S840C11 *dp, &lv = *(dp=new (buf) S840C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S840C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S840C11)");
    test_class_info(&lv, &cd_S840C11);
    dp->~S840C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS840C11(Test_S840C11, "S840C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S840C11C1Ev();
extern void _ZN7S840C11D1Ev();
Name_Map name_map_S840C11[] = {
  NSPAIR(_ZN7S840C11C1Ev),
  NSPAIR(_ZN7S840C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S840C11[];
extern void _ZN7S840C11D1Ev();
extern void _ZN7S840C11D0Ev();
extern void _ZN7S840C113v39Ev();
static  VTBL_ENTRY vtc_S840C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S840C11[0]),
  (VTBL_ENTRY)&_ZN7S840C11D1Ev,
  (VTBL_ENTRY)&_ZN7S840C11D0Ev,
  (VTBL_ENTRY)&_ZN7S840C113v39Ev,
};
extern VTBL_ENTRY _ZTI7S840C11[];
extern  VTBL_ENTRY _ZTV7S840C11[];
Class_Descriptor cd_S840C11 = {  "S840C11", // class name
  0,0,//no base classes
  &(vtc_S840C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S840C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S840C11),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  S840C2  : S840C3 , S840C11 {
  ::S853C12 s840c2f0;
  ::S857C13_nt s840c2f1;
  char s840c2f2[3];
  void *s840c2f3;
  ::S857C16 s840c2f4;
  void *s840c2f5;
  virtual  ~S840C2(); // _ZN6S840C2D1Ev
  virtual void  v40(); // _ZN6S840C23v40Ev
  virtual void  v41(); // _ZN6S840C23v41Ev
  virtual void  v42(); // _ZN6S840C23v42Ev
  virtual void  v43(); // _ZN6S840C23v43Ev
  virtual void  v44(); // _ZN6S840C23v44Ev
  virtual void  v45(); // _ZN6S840C23v45Ev
  virtual void  v46(); // _ZN6S840C23v46Ev
  virtual void  v47(); // _ZN6S840C23v47Ev
  virtual void  v48(); // _ZN6S840C23v48Ev
  virtual void  v49(); // _ZN6S840C23v49Ev
  virtual void  v50(); // _ZN6S840C23v50Ev
  virtual void  v51(); // _ZN6S840C23v51Ev
  virtual void  v52(); // _ZN6S840C23v52Ev
  virtual void  v53(); // _ZN6S840C23v53Ev
  virtual void  v54(); // _ZN6S840C23v54Ev
  virtual void  v55(); // _ZN6S840C23v55Ev
  virtual void  v56(); // _ZN6S840C23v56Ev
  virtual void  v57(); // _ZN6S840C23v57Ev
  virtual void  v58(); // _ZN6S840C23v58Ev
  virtual void  v59(); // _ZN6S840C23v59Ev
  virtual void  v60(); // _ZN6S840C23v60Ev
  virtual void  v61(); // _ZN6S840C23v61Ev
  virtual void  v62(); // _ZN6S840C23v62Ev
  virtual void  v63(); // _ZN6S840C23v63Ev
  virtual void  v64(); // _ZN6S840C23v64Ev
  virtual void  v65(); // _ZN6S840C23v65Ev
  virtual void  v66(); // _ZN6S840C23v66Ev
  virtual void  v67(); // _ZN6S840C23v67Ev
  virtual void  v68(); // _ZN6S840C23v68Ev
  virtual void  v69(); // _ZN6S840C23v69Ev
  virtual void  v70(); // _ZN6S840C23v70Ev
  virtual void  v71(); // _ZN6S840C23v71Ev
  virtual void  v72(); // _ZN6S840C23v72Ev
  virtual void  v73(); // _ZN6S840C23v73Ev
  virtual void  v74(); // _ZN6S840C23v74Ev
  virtual void  v75(); // _ZN6S840C23v75Ev
  virtual void  v76(); // _ZN6S840C23v76Ev
  virtual void  v77(); // _ZN6S840C23v77Ev
  virtual void  v78(); // _ZN6S840C23v78Ev
  virtual void  v79(); // _ZN6S840C23v79Ev
  virtual void  v80(); // _ZN6S840C23v80Ev
  S840C2(); // tgen
};
//SIG(-1 S840C2) C1{ BC2{ BC3{ BC4{ vd v42 v43 v44} BC5{ vd v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67} vd v68 v69 v70 FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ FL[4]}} Fc} BC10{ vd v71} 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 FC11{ m FC9} FC12{ m Fp FC8 FC13{ m Fp FC14{ Fi[4]}} Fi Fc} Fc[3] Fp FC15{ BC16{ vd v74} BC17{ vd v75} vd v72 v73 Fp[2]} Fp}


 S840C2 ::~S840C2(){ note_dtor("S840C2", this);}
void  S840C2 ::v40(){vfunc_called(this, "_ZN6S840C23v40Ev");}
void  S840C2 ::v41(){vfunc_called(this, "_ZN6S840C23v41Ev");}
void  S840C2 ::v42(){vfunc_called(this, "_ZN6S840C23v42Ev");}
void  S840C2 ::v43(){vfunc_called(this, "_ZN6S840C23v43Ev");}
void  S840C2 ::v44(){vfunc_called(this, "_ZN6S840C23v44Ev");}
void  S840C2 ::v45(){vfunc_called(this, "_ZN6S840C23v45Ev");}
void  S840C2 ::v46(){vfunc_called(this, "_ZN6S840C23v46Ev");}
void  S840C2 ::v47(){vfunc_called(this, "_ZN6S840C23v47Ev");}
void  S840C2 ::v48(){vfunc_called(this, "_ZN6S840C23v48Ev");}
void  S840C2 ::v49(){vfunc_called(this, "_ZN6S840C23v49Ev");}
void  S840C2 ::v50(){vfunc_called(this, "_ZN6S840C23v50Ev");}
void  S840C2 ::v51(){vfunc_called(this, "_ZN6S840C23v51Ev");}
void  S840C2 ::v52(){vfunc_called(this, "_ZN6S840C23v52Ev");}
void  S840C2 ::v53(){vfunc_called(this, "_ZN6S840C23v53Ev");}
void  S840C2 ::v54(){vfunc_called(this, "_ZN6S840C23v54Ev");}
void  S840C2 ::v55(){vfunc_called(this, "_ZN6S840C23v55Ev");}
void  S840C2 ::v56(){vfunc_called(this, "_ZN6S840C23v56Ev");}
void  S840C2 ::v57(){vfunc_called(this, "_ZN6S840C23v57Ev");}
void  S840C2 ::v58(){vfunc_called(this, "_ZN6S840C23v58Ev");}
void  S840C2 ::v59(){vfunc_called(this, "_ZN6S840C23v59Ev");}
void  S840C2 ::v60(){vfunc_called(this, "_ZN6S840C23v60Ev");}
void  S840C2 ::v61(){vfunc_called(this, "_ZN6S840C23v61Ev");}
void  S840C2 ::v62(){vfunc_called(this, "_ZN6S840C23v62Ev");}
void  S840C2 ::v63(){vfunc_called(this, "_ZN6S840C23v63Ev");}
void  S840C2 ::v64(){vfunc_called(this, "_ZN6S840C23v64Ev");}
void  S840C2 ::v65(){vfunc_called(this, "_ZN6S840C23v65Ev");}
void  S840C2 ::v66(){vfunc_called(this, "_ZN6S840C23v66Ev");}
void  S840C2 ::v67(){vfunc_called(this, "_ZN6S840C23v67Ev");}
void  S840C2 ::v68(){vfunc_called(this, "_ZN6S840C23v68Ev");}
void  S840C2 ::v69(){vfunc_called(this, "_ZN6S840C23v69Ev");}
void  S840C2 ::v70(){vfunc_called(this, "_ZN6S840C23v70Ev");}
void  S840C2 ::v71(){vfunc_called(this, "_ZN6S840C23v71Ev");}
void  S840C2 ::v72(){vfunc_called(this, "_ZN6S840C23v72Ev");}
void  S840C2 ::v73(){vfunc_called(this, "_ZN6S840C23v73Ev");}
void  S840C2 ::v74(){vfunc_called(this, "_ZN6S840C23v74Ev");}
void  S840C2 ::v75(){vfunc_called(this, "_ZN6S840C23v75Ev");}
void  S840C2 ::v76(){vfunc_called(this, "_ZN6S840C23v76Ev");}
void  S840C2 ::v77(){vfunc_called(this, "_ZN6S840C23v77Ev");}
void  S840C2 ::v78(){vfunc_called(this, "_ZN6S840C23v78Ev");}
void  S840C2 ::v79(){vfunc_called(this, "_ZN6S840C23v79Ev");}
void  S840C2 ::v80(){vfunc_called(this, "_ZN6S840C23v80Ev");}
S840C2 ::S840C2(){ note_ctor("S840C2", this);} // tgen

static void Test_S840C2()
{
  extern Class_Descriptor cd_S840C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,48)];
    init_test(&cd_S840C2, buf);
    S840C2 *dp, &lv = *(dp=new (buf) S840C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,188), "sizeof(S840C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S840C2)");
    check_base_class_offset(lv, (S840C5*)(S840C4*)(S840C3*), 0, "S840C2");
    check_base_class_offset(lv, (S840C6*)(S840C4*)(S840C3*), ABISELECT(8,4), "S840C2");
    check_base_class_offset(lv, (S840C4*)(S840C3*), 0, "S840C2");
    check_base_class_offset(lv, (S840C3*), 0, "S840C2");
    check_base_class_offset(lv, (S840C11*), ABISELECT(80,60), "S840C2");
    check_field_offset(lv, s840c2f0, ABISELECT(88,64), "S840C2.s840c2f0");
    check_field_offset(lv, s840c2f1, ABISELECT(120,96), "S840C2.s840c2f1");
    check_field_offset(lv, s840c2f2, ABISELECT(192,160), "S840C2.s840c2f2");
    check_field_offset(lv, s840c2f3, ABISELECT(200,164), "S840C2.s840c2f3");
    check_field_offset(lv, s840c2f4, ABISELECT(208,168), "S840C2.s840c2f4");
    check_field_offset(lv, s840c2f5, ABISELECT(240,184), "S840C2.s840c2f5");
    test_class_info(&lv, &cd_S840C2);
    dp->~S840C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS840C2(Test_S840C2, "S840C2", ABISELECT(248,188));

#else // __cplusplus

extern void _ZN6S840C2C1Ev();
extern void _ZN6S840C2D1Ev();
Name_Map name_map_S840C2[] = {
  NSPAIR(_ZN6S840C2C1Ev),
  NSPAIR(_ZN6S840C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S840C5;
extern VTBL_ENTRY _ZTI6S840C5[];
extern  VTBL_ENTRY _ZTV6S840C5[];
extern Class_Descriptor cd_S840C6;
extern VTBL_ENTRY _ZTI6S840C6[];
extern  VTBL_ENTRY _ZTV6S840C6[];
extern Class_Descriptor cd_S840C4;
extern VTBL_ENTRY _ZTI6S840C4[];
extern  VTBL_ENTRY _ZTV6S840C4[];
extern Class_Descriptor cd_S840C3;
extern VTBL_ENTRY _ZTI6S840C3[];
extern  VTBL_ENTRY _ZTV6S840C3[];
extern Class_Descriptor cd_S840C11;
extern VTBL_ENTRY _ZTI7S840C11[];
extern  VTBL_ENTRY _ZTV7S840C11[];
static Base_Class bases_S840C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S840C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S840C6,    ABISELECT(8,4), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_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_S840C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S840C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S840C11,    ABISELECT(80,60), //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},
  {0}};
extern VTBL_ENTRY _ZTI6S840C2[];
extern void _ZN6S840C2D1Ev();
extern void _ZN6S840C2D0Ev();
extern void _ZN6S840C53v10Ev();
extern void _ZN6S840C53v11Ev();
extern void _ZN6S840C53v12Ev();
extern void _ZN6S840C43v14Ev();
extern void _ZN6S840C43v15Ev();
extern void _ZN6S840C43v16Ev();
extern void _ZN6S840C43v17Ev();
extern void _ZN6S840C43v18Ev();
extern void _ZN6S840C43v19Ev();
extern void _ZN6S840C43v20Ev();
extern void _ZN6S840C43v21Ev();
extern void _ZN6S840C43v22Ev();
extern void _ZN6S840C43v23Ev();
extern void _ZN6S840C43v24Ev();
extern void _ZN6S840C43v25Ev();
extern void _ZN6S840C43v26Ev();
extern void _ZN6S840C43v27Ev();
extern void _ZN6S840C43v28Ev();
extern void _ZN6S840C43v29Ev();
extern void _ZN6S840C43v30Ev();
extern void _ZN6S840C43v31Ev();
extern void _ZN6S840C43v32Ev();
extern void _ZN6S840C43v33Ev();
extern void _ZN6S840C43v34Ev();
extern void _ZN6S840C43v35Ev();
extern void _ZN6S840C33v36Ev();
extern void _ZN6S840C33v37Ev();
extern void _ZN6S840C33v38Ev();
extern void _ZN6S840C23v40Ev();
extern void _ZN6S840C23v41Ev();
extern void _ZN6S840C23v42Ev();
extern void _ZN6S840C23v43Ev();
extern void _ZN6S840C23v44Ev();
extern void _ZN6S840C23v45Ev();
extern void _ZN6S840C23v46Ev();
extern void _ZN6S840C23v47Ev();
extern void _ZN6S840C23v48Ev();
extern void _ZN6S840C23v49Ev();
extern void _ZN6S840C23v50Ev();
extern void _ZN6S840C23v51Ev();
extern void _ZN6S840C23v52Ev();
extern void _ZN6S840C23v53Ev();
extern void _ZN6S840C23v54Ev();
extern void _ZN6S840C23v55Ev();
extern void _ZN6S840C23v56Ev();
extern void _ZN6S840C23v57Ev();
extern void _ZN6S840C23v58Ev();
extern void _ZN6S840C23v59Ev();
extern void _ZN6S840C23v60Ev();
extern void _ZN6S840C23v61Ev();
extern void _ZN6S840C23v62Ev();
extern void _ZN6S840C23v63Ev();
extern void _ZN6S840C23v64Ev();
extern void _ZN6S840C23v65Ev();
extern void _ZN6S840C23v66Ev();
extern void _ZN6S840C23v67Ev();
extern void _ZN6S840C23v68Ev();
extern void _ZN6S840C23v69Ev();
extern void _ZN6S840C23v70Ev();
extern void _ZN6S840C23v71Ev();
extern void _ZN6S840C23v72Ev();
extern void _ZN6S840C23v73Ev();
extern void _ZN6S840C23v74Ev();
extern void _ZN6S840C23v75Ev();
extern void _ZN6S840C23v76Ev();
extern void _ZN6S840C23v77Ev();
extern void _ZN6S840C23v78Ev();
extern void _ZN6S840C23v79Ev();
extern void _ZN6S840C23v80Ev();
extern void ABISELECT(_ZThn8_N6S840C2D1Ev,_ZThn4_N6S840C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S840C2D0Ev,_ZThn4_N6S840C2D0Ev)();
extern void _ZN6S840C63v13Ev();
extern void ABISELECT(_ZThn80_N6S840C2D1Ev,_ZThn60_N6S840C2D1Ev)();
extern void ABISELECT(_ZThn80_N6S840C2D0Ev,_ZThn60_N6S840C2D0Ev)();
extern void _ZN7S840C113v39Ev();
static  VTBL_ENTRY vtc_S840C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S840C2[0]),
  (VTBL_ENTRY)&_ZN6S840C2D1Ev,
  (VTBL_ENTRY)&_ZN6S840C2D0Ev,
  (VTBL_ENTRY)&_ZN6S840C53v10Ev,
  (VTBL_ENTRY)&_ZN6S840C53v11Ev,
  (VTBL_ENTRY)&_ZN6S840C53v12Ev,
  (VTBL_ENTRY)&_ZN6S840C43v14Ev,
  (VTBL_ENTRY)&_ZN6S840C43v15Ev,
  (VTBL_ENTRY)&_ZN6S840C43v16Ev,
  (VTBL_ENTRY)&_ZN6S840C43v17Ev,
  (VTBL_ENTRY)&_ZN6S840C43v18Ev,
  (VTBL_ENTRY)&_ZN6S840C43v19Ev,
  (VTBL_ENTRY)&_ZN6S840C43v20Ev,
  (VTBL_ENTRY)&_ZN6S840C43v21Ev,
  (VTBL_ENTRY)&_ZN6S840C43v22Ev,
  (VTBL_ENTRY)&_ZN6S840C43v23Ev,
  (VTBL_ENTRY)&_ZN6S840C43v24Ev,
  (VTBL_ENTRY)&_ZN6S840C43v25Ev,
  (VTBL_ENTRY)&_ZN6S840C43v26Ev,
  (VTBL_ENTRY)&_ZN6S840C43v27Ev,
  (VTBL_ENTRY)&_ZN6S840C43v28Ev,
  (VTBL_ENTRY)&_ZN6S840C43v29Ev,
  (VTBL_ENTRY)&_ZN6S840C43v30Ev,
  (VTBL_ENTRY)&_ZN6S840C43v31Ev,
  (VTBL_ENTRY)&_ZN6S840C43v32Ev,
  (VTBL_ENTRY)&_ZN6S840C43v33Ev,
  (VTBL_ENTRY)&_ZN6S840C43v34Ev,
  (VTBL_ENTRY)&_ZN6S840C43v35Ev,
  (VTBL_ENTRY)&_ZN6S840C33v36Ev,
  (VTBL_ENTRY)&_ZN6S840C33v37Ev,
  (VTBL_ENTRY)&_ZN6S840C33v38Ev,
  (VTBL_ENTRY)&_ZN6S840C23v40Ev,
  (VTBL_ENTRY)&_ZN6S840C23v41Ev,
  (VTBL_ENTRY)&_ZN6S840C23v42Ev,
  (VTBL_ENTRY)&_ZN6S840C23v43Ev,
  (VTBL_ENTRY)&_ZN6S840C23v44Ev,
  (VTBL_ENTRY)&_ZN6S840C23v45Ev,
  (VTBL_ENTRY)&_ZN6S840C23v46Ev,
  (VTBL_ENTRY)&_ZN6S840C23v47Ev,
  (VTBL_ENTRY)&_ZN6S840C23v48Ev,
  (VTBL_ENTRY)&_ZN6S840C23v49Ev,
  (VTBL_ENTRY)&_ZN6S840C23v50Ev,
  (VTBL_ENTRY)&_ZN6S840C23v51Ev,
  (VTBL_ENTRY)&_ZN6S840C23v52Ev,
  (VTBL_ENTRY)&_ZN6S840C23v53Ev,
  (VTBL_ENTRY)&_ZN6S840C23v54Ev,
  (VTBL_ENTRY)&_ZN6S840C23v55Ev,
  (VTBL_ENTRY)&_ZN6S840C23v56Ev,
  (VTBL_ENTRY)&_ZN6S840C23v57Ev,
  (VTBL_ENTRY)&_ZN6S840C23v58Ev,
  (VTBL_ENTRY)&_ZN6S840C23v59Ev,
  (VTBL_ENTRY)&_ZN6S840C23v60Ev,
  (VTBL_ENTRY)&_ZN6S840C23v61Ev,
  (VTBL_ENTRY)&_ZN6S840C23v62Ev,
  (VTBL_ENTRY)&_ZN6S840C23v63Ev,
  (VTBL_ENTRY)&_ZN6S840C23v64Ev,
  (VTBL_ENTRY)&_ZN6S840C23v65Ev,
  (VTBL_ENTRY)&_ZN6S840C23v66Ev,
  (VTBL_ENTRY)&_ZN6S840C23v67Ev,
  (VTBL_ENTRY)&_ZN6S840C23v68Ev,
  (VTBL_ENTRY)&_ZN6S840C23v69Ev,
  (VTBL_ENTRY)&_ZN6S840C23v70Ev,
  (VTBL_ENTRY)&_ZN6S840C23v71Ev,
  (VTBL_ENTRY)&_ZN6S840C23v72Ev,
  (VTBL_ENTRY)&_ZN6S840C23v73Ev,
  (VTBL_ENTRY)&_ZN6S840C23v74Ev,
  (VTBL_ENTRY)&_ZN6S840C23v75Ev,
  (VTBL_ENTRY)&_ZN6S840C23v76Ev,
  (VTBL_ENTRY)&_ZN6S840C23v77Ev,
  (VTBL_ENTRY)&_ZN6S840C23v78Ev,
  (VTBL_ENTRY)&_ZN6S840C23v79Ev,
  (VTBL_ENTRY)&_ZN6S840C23v80Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S840C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S840C2D1Ev,_ZThn4_N6S840C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S840C2D0Ev,_ZThn4_N6S840C2D0Ev),
  (VTBL_ENTRY)&_ZN6S840C63v13Ev,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI6S840C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S840C2D1Ev,_ZThn60_N6S840C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S840C2D0Ev,_ZThn60_N6S840C2D0Ev),
  (VTBL_ENTRY)&_ZN7S840C113v39Ev,
};
extern VTBL_ENTRY _ZTI6S840C2[];
extern  VTBL_ENTRY _ZTV6S840C2[];
Class_Descriptor cd_S840C2 = {  "S840C2", // class name
  bases_S840C2, 5,
  &(vtc_S840C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,188), // object size
  NSPAIRA(_ZTI6S840C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S840C2),83, //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  S840C1  : S840C2 {
  char s840c1f0;
  virtual  ~S840C1(); // _ZN6S840C1D1Ev
  virtual void  v1(); // _ZN6S840C12v1Ev
  virtual void  v2(); // _ZN6S840C12v2Ev
  virtual void  v3(); // _ZN6S840C12v3Ev
  virtual void  v4(); // _ZN6S840C12v4Ev
  virtual void  v5(); // _ZN6S840C12v5Ev
  virtual void  v6(); // _ZN6S840C12v6Ev
  virtual void  v7(); // _ZN6S840C12v7Ev
  virtual void  v8(); // _ZN6S840C12v8Ev
  virtual void  v9(); // _ZN6S840C12v9Ev
  S840C1(); // tgen
};
//SIG(1 S840C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v10 v11 v12} BC6{ vd v13} vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35} vd v36 v37 v38 FC7{ m Fp Fi[2] FC8{ m}} FC9{ m FC10{ FL[4]}} Fc} BC11{ vd v39} vd 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 FC12{ m FC10} FC13{ m Fp FC9 FC14{ m Fp FC15{ Fi[4]}} Fi Fc} Fc[3] Fp FC16{ BC17{ vd v83} BC18{ vd v84} vd v81 v82 Fp[2]} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fc}


 S840C1 ::~S840C1(){ note_dtor("S840C1", this);}
void  S840C1 ::v1(){vfunc_called(this, "_ZN6S840C12v1Ev");}
void  S840C1 ::v2(){vfunc_called(this, "_ZN6S840C12v2Ev");}
void  S840C1 ::v3(){vfunc_called(this, "_ZN6S840C12v3Ev");}
void  S840C1 ::v4(){vfunc_called(this, "_ZN6S840C12v4Ev");}
void  S840C1 ::v5(){vfunc_called(this, "_ZN6S840C12v5Ev");}
void  S840C1 ::v6(){vfunc_called(this, "_ZN6S840C12v6Ev");}
void  S840C1 ::v7(){vfunc_called(this, "_ZN6S840C12v7Ev");}
void  S840C1 ::v8(){vfunc_called(this, "_ZN6S840C12v8Ev");}
void  S840C1 ::v9(){vfunc_called(this, "_ZN6S840C12v9Ev");}
S840C1 ::S840C1(){ note_ctor("S840C1", this);} // tgen

static void Test_S840C1()
{
  extern Class_Descriptor cd_S840C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,49)];
    init_test(&cd_S840C1, buf);
    S840C1 *dp, &lv = *(dp=new (buf) S840C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,192), "sizeof(S840C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S840C1)");
    check_base_class_offset(lv, (S840C5*)(S840C4*)(S840C3*)(S840C2*), 0, "S840C1");
    check_base_class_offset(lv, (S840C6*)(S840C4*)(S840C3*)(S840C2*), ABISELECT(8,4), "S840C1");
    check_base_class_offset(lv, (S840C4*)(S840C3*)(S840C2*), 0, "S840C1");
    check_base_class_offset(lv, (S840C3*)(S840C2*), 0, "S840C1");
    check_base_class_offset(lv, (S840C11*)(S840C2*), ABISELECT(80,60), "S840C1");
    check_base_class_offset(lv, (S840C2*), 0, "S840C1");
    check_field_offset(lv, s840c1f0, ABISELECT(248,188), "S840C1.s840c1f0");
    test_class_info(&lv, &cd_S840C1);
    dp->~S840C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS840C1(Test_S840C1, "S840C1", ABISELECT(256,192));

#else // __cplusplus

extern void _ZN6S840C1C1Ev();
extern void _ZN6S840C1D1Ev();
Name_Map name_map_S840C1[] = {
  NSPAIR(_ZN6S840C1C1Ev),
  NSPAIR(_ZN6S840C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S840C5;
extern VTBL_ENTRY _ZTI6S840C5[];
extern  VTBL_ENTRY _ZTV6S840C5[];
extern Class_Descriptor cd_S840C6;
extern VTBL_ENTRY _ZTI6S840C6[];
extern  VTBL_ENTRY _ZTV6S840C6[];
extern Class_Descriptor cd_S840C4;
extern VTBL_ENTRY _ZTI6S840C4[];
extern  VTBL_ENTRY _ZTV6S840C4[];
extern Class_Descriptor cd_S840C3;
extern VTBL_ENTRY _ZTI6S840C3[];
extern  VTBL_ENTRY _ZTV6S840C3[];
extern Class_Descriptor cd_S840C11;
extern VTBL_ENTRY _ZTI7S840C11[];
extern  VTBL_ENTRY _ZTV7S840C11[];
extern Class_Descriptor cd_S840C2;
extern VTBL_ENTRY _ZTI6S840C2[];
extern  VTBL_ENTRY _ZTV6S840C2[];
static Base_Class bases_S840C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S840C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S840C6,    ABISELECT(8,4), //bcp->offset
    82, //bcp->virtual_function_table_offset
    2, //num_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_S840C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S840C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S840C11,    ABISELECT(80,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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S840C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S840C1[];
extern void _ZN6S840C1D1Ev();
extern void _ZN6S840C1D0Ev();
extern void _ZN6S840C53v10Ev();
extern void _ZN6S840C53v11Ev();
extern void _ZN6S840C53v12Ev();
extern void _ZN6S840C43v14Ev();
extern void _ZN6S840C43v15Ev();
extern void _ZN6S840C43v16Ev();
extern void _ZN6S840C43v17Ev();
extern void _ZN6S840C43v18Ev();
extern void _ZN6S840C43v19Ev();
extern void _ZN6S840C43v20Ev();
extern void _ZN6S840C43v21Ev();
extern void _ZN6S840C43v22Ev();
extern void _ZN6S840C43v23Ev();
extern void _ZN6S840C43v24Ev();
extern void _ZN6S840C43v25Ev();
extern void _ZN6S840C43v26Ev();
extern void _ZN6S840C43v27Ev();
extern void _ZN6S840C43v28Ev();
extern void _ZN6S840C43v29Ev();
extern void _ZN6S840C43v30Ev();
extern void _ZN6S840C43v31Ev();
extern void _ZN6S840C43v32Ev();
extern void _ZN6S840C43v33Ev();
extern void _ZN6S840C43v34Ev();
extern void _ZN6S840C43v35Ev();
extern void _ZN6S840C33v36Ev();
extern void _ZN6S840C33v37Ev();
extern void _ZN6S840C33v38Ev();
extern void _ZN6S840C23v40Ev();
extern void _ZN6S840C23v41Ev();
extern void _ZN6S840C23v42Ev();
extern void _ZN6S840C23v43Ev();
extern void _ZN6S840C23v44Ev();
extern void _ZN6S840C23v45Ev();
extern void _ZN6S840C23v46Ev();
extern void _ZN6S840C23v47Ev();
extern void _ZN6S840C23v48Ev();
extern void _ZN6S840C23v49Ev();
extern void _ZN6S840C23v50Ev();
extern void _ZN6S840C23v51Ev();
extern void _ZN6S840C23v52Ev();
extern void _ZN6S840C23v53Ev();
extern void _ZN6S840C23v54Ev();
extern void _ZN6S840C23v55Ev();
extern void _ZN6S840C23v56Ev();
extern void _ZN6S840C23v57Ev();
extern void _ZN6S840C23v58Ev();
extern void _ZN6S840C23v59Ev();
extern void _ZN6S840C23v60Ev();
extern void _ZN6S840C23v61Ev();
extern void _ZN6S840C23v62Ev();
extern void _ZN6S840C23v63Ev();
extern void _ZN6S840C23v64Ev();
extern void _ZN6S840C23v65Ev();
extern void _ZN6S840C23v66Ev();
extern void _ZN6S840C23v67Ev();
extern void _ZN6S840C23v68Ev();
extern void _ZN6S840C23v69Ev();
extern void _ZN6S840C23v70Ev();
extern void _ZN6S840C23v71Ev();
extern void _ZN6S840C23v72Ev();
extern void _ZN6S840C23v73Ev();
extern void _ZN6S840C23v74Ev();
extern void _ZN6S840C23v75Ev();
extern void _ZN6S840C23v76Ev();
extern void _ZN6S840C23v77Ev();
extern void _ZN6S840C23v78Ev();
extern void _ZN6S840C23v79Ev();
extern void _ZN6S840C23v80Ev();
extern void _ZN6S840C12v1Ev();
extern void _ZN6S840C12v2Ev();
extern void _ZN6S840C12v3Ev();
extern void _ZN6S840C12v4Ev();
extern void _ZN6S840C12v5Ev();
extern void _ZN6S840C12v6Ev();
extern void _ZN6S840C12v7Ev();
extern void _ZN6S840C12v8Ev();
extern void _ZN6S840C12v9Ev();
extern void ABISELECT(_ZThn8_N6S840C1D1Ev,_ZThn4_N6S840C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S840C1D0Ev,_ZThn4_N6S840C1D0Ev)();
extern void _ZN6S840C63v13Ev();
extern void ABISELECT(_ZThn80_N6S840C1D1Ev,_ZThn60_N6S840C1D1Ev)();
extern void ABISELECT(_ZThn80_N6S840C1D0Ev,_ZThn60_N6S840C1D0Ev)();
extern void _ZN7S840C113v39Ev();
static  VTBL_ENTRY vtc_S840C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S840C1[0]),
  (VTBL_ENTRY)&_ZN6S840C1D1Ev,
  (VTBL_ENTRY)&_ZN6S840C1D0Ev,
  (VTBL_ENTRY)&_ZN6S840C53v10Ev,
  (VTBL_ENTRY)&_ZN6S840C53v11Ev,
  (VTBL_ENTRY)&_ZN6S840C53v12Ev,
  (VTBL_ENTRY)&_ZN6S840C43v14Ev,
  (VTBL_ENTRY)&_ZN6S840C43v15Ev,
  (VTBL_ENTRY)&_ZN6S840C43v16Ev,
  (VTBL_ENTRY)&_ZN6S840C43v17Ev,
  (VTBL_ENTRY)&_ZN6S840C43v18Ev,
  (VTBL_ENTRY)&_ZN6S840C43v19Ev,
  (VTBL_ENTRY)&_ZN6S840C43v20Ev,
  (VTBL_ENTRY)&_ZN6S840C43v21Ev,
  (VTBL_ENTRY)&_ZN6S840C43v22Ev,
  (VTBL_ENTRY)&_ZN6S840C43v23Ev,
  (VTBL_ENTRY)&_ZN6S840C43v24Ev,
  (VTBL_ENTRY)&_ZN6S840C43v25Ev,
  (VTBL_ENTRY)&_ZN6S840C43v26Ev,
  (VTBL_ENTRY)&_ZN6S840C43v27Ev,
  (VTBL_ENTRY)&_ZN6S840C43v28Ev,
  (VTBL_ENTRY)&_ZN6S840C43v29Ev,
  (VTBL_ENTRY)&_ZN6S840C43v30Ev,
  (VTBL_ENTRY)&_ZN6S840C43v31Ev,
  (VTBL_ENTRY)&_ZN6S840C43v32Ev,
  (VTBL_ENTRY)&_ZN6S840C43v33Ev,
  (VTBL_ENTRY)&_ZN6S840C43v34Ev,
  (VTBL_ENTRY)&_ZN6S840C43v35Ev,
  (VTBL_ENTRY)&_ZN6S840C33v36Ev,
  (VTBL_ENTRY)&_ZN6S840C33v37Ev,
  (VTBL_ENTRY)&_ZN6S840C33v38Ev,
  (VTBL_ENTRY)&_ZN6S840C23v40Ev,
  (VTBL_ENTRY)&_ZN6S840C23v41Ev,
  (VTBL_ENTRY)&_ZN6S840C23v42Ev,
  (VTBL_ENTRY)&_ZN6S840C23v43Ev,
  (VTBL_ENTRY)&_ZN6S840C23v44Ev,
  (VTBL_ENTRY)&_ZN6S840C23v45Ev,
  (VTBL_ENTRY)&_ZN6S840C23v46Ev,
  (VTBL_ENTRY)&_ZN6S840C23v47Ev,
  (VTBL_ENTRY)&_ZN6S840C23v48Ev,
  (VTBL_ENTRY)&_ZN6S840C23v49Ev,
  (VTBL_ENTRY)&_ZN6S840C23v50Ev,
  (VTBL_ENTRY)&_ZN6S840C23v51Ev,
  (VTBL_ENTRY)&_ZN6S840C23v52Ev,
  (VTBL_ENTRY)&_ZN6S840C23v53Ev,
  (VTBL_ENTRY)&_ZN6S840C23v54Ev,
  (VTBL_ENTRY)&_ZN6S840C23v55Ev,
  (VTBL_ENTRY)&_ZN6S840C23v56Ev,
  (VTBL_ENTRY)&_ZN6S840C23v57Ev,
  (VTBL_ENTRY)&_ZN6S840C23v58Ev,
  (VTBL_ENTRY)&_ZN6S840C23v59Ev,
  (VTBL_ENTRY)&_ZN6S840C23v60Ev,
  (VTBL_ENTRY)&_ZN6S840C23v61Ev,
  (VTBL_ENTRY)&_ZN6S840C23v62Ev,
  (VTBL_ENTRY)&_ZN6S840C23v63Ev,
  (VTBL_ENTRY)&_ZN6S840C23v64Ev,
  (VTBL_ENTRY)&_ZN6S840C23v65Ev,
  (VTBL_ENTRY)&_ZN6S840C23v66Ev,
  (VTBL_ENTRY)&_ZN6S840C23v67Ev,
  (VTBL_ENTRY)&_ZN6S840C23v68Ev,
  (VTBL_ENTRY)&_ZN6S840C23v69Ev,
  (VTBL_ENTRY)&_ZN6S840C23v70Ev,
  (VTBL_ENTRY)&_ZN6S840C23v71Ev,
  (VTBL_ENTRY)&_ZN6S840C23v72Ev,
  (VTBL_ENTRY)&_ZN6S840C23v73Ev,
  (VTBL_ENTRY)&_ZN6S840C23v74Ev,
  (VTBL_ENTRY)&_ZN6S840C23v75Ev,
  (VTBL_ENTRY)&_ZN6S840C23v76Ev,
  (VTBL_ENTRY)&_ZN6S840C23v77Ev,
  (VTBL_ENTRY)&_ZN6S840C23v78Ev,
  (VTBL_ENTRY)&_ZN6S840C23v79Ev,
  (VTBL_ENTRY)&_ZN6S840C23v80Ev,
  (VTBL_ENTRY)&_ZN6S840C12v1Ev,
  (VTBL_ENTRY)&_ZN6S840C12v2Ev,
  (VTBL_ENTRY)&_ZN6S840C12v3Ev,
  (VTBL_ENTRY)&_ZN6S840C12v4Ev,
  (VTBL_ENTRY)&_ZN6S840C12v5Ev,
  (VTBL_ENTRY)&_ZN6S840C12v6Ev,
  (VTBL_ENTRY)&_ZN6S840C12v7Ev,
  (VTBL_ENTRY)&_ZN6S840C12v8Ev,
  (VTBL_ENTRY)&_ZN6S840C12v9Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S840C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S840C1D1Ev,_ZThn4_N6S840C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S840C1D0Ev,_ZThn4_N6S840C1D0Ev),
  (VTBL_ENTRY)&_ZN6S840C63v13Ev,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI6S840C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S840C1D1Ev,_ZThn60_N6S840C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S840C1D0Ev,_ZThn60_N6S840C1D0Ev),
  (VTBL_ENTRY)&_ZN7S840C113v39Ev,
};
extern VTBL_ENTRY _ZTI6S840C1[];
extern  VTBL_ENTRY _ZTV6S840C1[];
Class_Descriptor cd_S840C1 = {  "S840C1", // class name
  bases_S840C1, 6,
  &(vtc_S840C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,192), // object size
  NSPAIRA(_ZTI6S840C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S840C1),92, //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  S841C5  {
  virtual  ~S841C5(); // _ZN6S841C5D1Ev
  virtual void  v10(); // _ZN6S841C53v10Ev
  virtual void  v11(); // _ZN6S841C53v11Ev
  virtual void  v12(); // _ZN6S841C53v12Ev
  S841C5(); // tgen
};
//SIG(-1 S841C5) C1{ vd v1 v2 v3}


 S841C5 ::~S841C5(){ note_dtor("S841C5", this);}
void  S841C5 ::v10(){vfunc_called(this, "_ZN6S841C53v10Ev");}
void  S841C5 ::v11(){vfunc_called(this, "_ZN6S841C53v11Ev");}
void  S841C5 ::v12(){vfunc_called(this, "_ZN6S841C53v12Ev");}
S841C5 ::S841C5(){ note_ctor("S841C5", this);} // tgen

static void Test_S841C5()
{
  extern Class_Descriptor cd_S841C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S841C5, buf);
    S841C5 *dp, &lv = *(dp=new (buf) S841C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S841C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S841C5)");
    test_class_info(&lv, &cd_S841C5);
    dp->~S841C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS841C5(Test_S841C5, "S841C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S841C5C1Ev();
extern void _ZN6S841C5D1Ev();
Name_Map name_map_S841C5[] = {
  NSPAIR(_ZN6S841C5C1Ev),
  NSPAIR(_ZN6S841C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S841C5[];
extern void _ZN6S841C5D1Ev();
extern void _ZN6S841C5D0Ev();
extern void _ZN6S841C53v10Ev();
extern void _ZN6S841C53v11Ev();
extern void _ZN6S841C53v12Ev();
static  VTBL_ENTRY vtc_S841C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S841C5[0]),
  (VTBL_ENTRY)&_ZN6S841C5D1Ev,
  (VTBL_ENTRY)&_ZN6S841C5D0Ev,
  (VTBL_ENTRY)&_ZN6S841C53v10Ev,
  (VTBL_ENTRY)&_ZN6S841C53v11Ev,
  (VTBL_ENTRY)&_ZN6S841C53v12Ev,
};
extern VTBL_ENTRY _ZTI6S841C5[];
extern  VTBL_ENTRY _ZTV6S841C5[];
Class_Descriptor cd_S841C5 = {  "S841C5", // class name
  0,0,//no base classes
  &(vtc_S841C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S841C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S841C5),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  S841C6  {
  virtual  ~S841C6(); // _ZN6S841C6D1Ev
  virtual void  v13(); // _ZN6S841C63v13Ev
  S841C6(); // tgen
};
//SIG(-1 S841C6) C1{ vd v1}


 S841C6 ::~S841C6(){ note_dtor("S841C6", this);}
void  S841C6 ::v13(){vfunc_called(this, "_ZN6S841C63v13Ev");}
S841C6 ::S841C6(){ note_ctor("S841C6", this);} // tgen

static void Test_S841C6()
{
  extern Class_Descriptor cd_S841C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S841C6, buf);
    S841C6 *dp, &lv = *(dp=new (buf) S841C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S841C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S841C6)");
    test_class_info(&lv, &cd_S841C6);
    dp->~S841C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS841C6(Test_S841C6, "S841C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S841C6C1Ev();
extern void _ZN6S841C6D1Ev();
Name_Map name_map_S841C6[] = {
  NSPAIR(_ZN6S841C6C1Ev),
  NSPAIR(_ZN6S841C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S841C6[];
extern void _ZN6S841C6D1Ev();
extern void _ZN6S841C6D0Ev();
extern void _ZN6S841C63v13Ev();
static  VTBL_ENTRY vtc_S841C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S841C6[0]),
  (VTBL_ENTRY)&_ZN6S841C6D1Ev,
  (VTBL_ENTRY)&_ZN6S841C6D0Ev,
  (VTBL_ENTRY)&_ZN6S841C63v13Ev,
};
extern VTBL_ENTRY _ZTI6S841C6[];
extern  VTBL_ENTRY _ZTV6S841C6[];
Class_Descriptor cd_S841C6 = {  "S841C6", // class name
  0,0,//no base classes
  &(vtc_S841C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S841C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S841C6),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  S841C4  : S841C5 , S841C6 {
  virtual  ~S841C4(); // _ZN6S841C4D1Ev
  virtual void  v14(); // _ZN6S841C43v14Ev
  virtual void  v15(); // _ZN6S841C43v15Ev
  virtual void  v16(); // _ZN6S841C43v16Ev
  virtual void  v17(); // _ZN6S841C43v17Ev
  virtual void  v18(); // _ZN6S841C43v18Ev
  virtual void  v19(); // _ZN6S841C43v19Ev
  virtual void  v20(); // _ZN6S841C43v20Ev
  virtual void  v21(); // _ZN6S841C43v21Ev
  virtual void  v22(); // _ZN6S841C43v22Ev
  virtual void  v23(); // _ZN6S841C43v23Ev
  virtual void  v24(); // _ZN6S841C43v24Ev
  virtual void  v25(); // _ZN6S841C43v25Ev
  virtual void  v26(); // _ZN6S841C43v26Ev
  virtual void  v27(); // _ZN6S841C43v27Ev
  virtual void  v28(); // _ZN6S841C43v28Ev
  virtual void  v29(); // _ZN6S841C43v29Ev
  virtual void  v30(); // _ZN6S841C43v30Ev
  virtual void  v31(); // _ZN6S841C43v31Ev
  virtual void  v32(); // _ZN6S841C43v32Ev
  virtual void  v33(); // _ZN6S841C43v33Ev
  virtual void  v34(); // _ZN6S841C43v34Ev
  virtual void  v35(); // _ZN6S841C43v35Ev
  S841C4(); // tgen
};
//SIG(-1 S841C4) C1{ BC2{ vd v23 v24 v25} BC3{ vd v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S841C4 ::~S841C4(){ note_dtor("S841C4", this);}
void  S841C4 ::v14(){vfunc_called(this, "_ZN6S841C43v14Ev");}
void  S841C4 ::v15(){vfunc_called(this, "_ZN6S841C43v15Ev");}
void  S841C4 ::v16(){vfunc_called(this, "_ZN6S841C43v16Ev");}
void  S841C4 ::v17(){vfunc_called(this, "_ZN6S841C43v17Ev");}
void  S841C4 ::v18(){vfunc_called(this, "_ZN6S841C43v18Ev");}
void  S841C4 ::v19(){vfunc_called(this, "_ZN6S841C43v19Ev");}
void  S841C4 ::v20(){vfunc_called(this, "_ZN6S841C43v20Ev");}
void  S841C4 ::v21(){vfunc_called(this, "_ZN6S841C43v21Ev");}
void  S841C4 ::v22(){vfunc_called(this, "_ZN6S841C43v22Ev");}
void  S841C4 ::v23(){vfunc_called(this, "_ZN6S841C43v23Ev");}
void  S841C4 ::v24(){vfunc_called(this, "_ZN6S841C43v24Ev");}
void  S841C4 ::v25(){vfunc_called(this, "_ZN6S841C43v25Ev");}
void  S841C4 ::v26(){vfunc_called(this, "_ZN6S841C43v26Ev");}
void  S841C4 ::v27(){vfunc_called(this, "_ZN6S841C43v27Ev");}
void  S841C4 ::v28(){vfunc_called(this, "_ZN6S841C43v28Ev");}
void  S841C4 ::v29(){vfunc_called(this, "_ZN6S841C43v29Ev");}
void  S841C4 ::v30(){vfunc_called(this, "_ZN6S841C43v30Ev");}
void  S841C4 ::v31(){vfunc_called(this, "_ZN6S841C43v31Ev");}
void  S841C4 ::v32(){vfunc_called(this, "_ZN6S841C43v32Ev");}
void  S841C4 ::v33(){vfunc_called(this, "_ZN6S841C43v33Ev");}
void  S841C4 ::v34(){vfunc_called(this, "_ZN6S841C43v34Ev");}
void  S841C4 ::v35(){vfunc_called(this, "_ZN6S841C43v35Ev");}
S841C4 ::S841C4(){ note_ctor("S841C4", this);} // tgen

static void Test_S841C4()
{
  extern Class_Descriptor cd_S841C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S841C4, buf);
    S841C4 *dp, &lv = *(dp=new (buf) S841C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S841C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S841C4)");
    check_base_class_offset(lv, (S841C5*), 0, "S841C4");
    check_base_class_offset(lv, (S841C6*), ABISELECT(8,4), "S841C4");
    test_class_info(&lv, &cd_S841C4);
    dp->~S841C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS841C4(Test_S841C4, "S841C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S841C4C1Ev();
extern void _ZN6S841C4D1Ev();
Name_Map name_map_S841C4[] = {
  NSPAIR(_ZN6S841C4C1Ev),
  NSPAIR(_ZN6S841C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S841C5;
extern VTBL_ENTRY _ZTI6S841C5[];
extern  VTBL_ENTRY _ZTV6S841C5[];
extern Class_Descriptor cd_S841C6;
extern VTBL_ENTRY _ZTI6S841C6[];
extern  VTBL_ENTRY _ZTV6S841C6[];
static Base_Class bases_S841C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S841C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S841C6,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S841C4[];
extern void _ZN6S841C4D1Ev();
extern void _ZN6S841C4D0Ev();
extern void _ZN6S841C53v10Ev();
extern void _ZN6S841C53v11Ev();
extern void _ZN6S841C53v12Ev();
extern void _ZN6S841C43v14Ev();
extern void _ZN6S841C43v15Ev();
extern void _ZN6S841C43v16Ev();
extern void _ZN6S841C43v17Ev();
extern void _ZN6S841C43v18Ev();
extern void _ZN6S841C43v19Ev();
extern void _ZN6S841C43v20Ev();
extern void _ZN6S841C43v21Ev();
extern void _ZN6S841C43v22Ev();
extern void _ZN6S841C43v23Ev();
extern void _ZN6S841C43v24Ev();
extern void _ZN6S841C43v25Ev();
extern void _ZN6S841C43v26Ev();
extern void _ZN6S841C43v27Ev();
extern void _ZN6S841C43v28Ev();
extern void _ZN6S841C43v29Ev();
extern void _ZN6S841C43v30Ev();
extern void _ZN6S841C43v31Ev();
extern void _ZN6S841C43v32Ev();
extern void _ZN6S841C43v33Ev();
extern void _ZN6S841C43v34Ev();
extern void _ZN6S841C43v35Ev();
extern void ABISELECT(_ZThn8_N6S841C4D1Ev,_ZThn4_N6S841C4D1Ev)();
extern void ABISELECT(_ZThn8_N6S841C4D0Ev,_ZThn4_N6S841C4D0Ev)();
extern void _ZN6S841C63v13Ev();
static  VTBL_ENTRY vtc_S841C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S841C4[0]),
  (VTBL_ENTRY)&_ZN6S841C4D1Ev,
  (VTBL_ENTRY)&_ZN6S841C4D0Ev,
  (VTBL_ENTRY)&_ZN6S841C53v10Ev,
  (VTBL_ENTRY)&_ZN6S841C53v11Ev,
  (VTBL_ENTRY)&_ZN6S841C53v12Ev,
  (VTBL_ENTRY)&_ZN6S841C43v14Ev,
  (VTBL_ENTRY)&_ZN6S841C43v15Ev,
  (VTBL_ENTRY)&_ZN6S841C43v16Ev,
  (VTBL_ENTRY)&_ZN6S841C43v17Ev,
  (VTBL_ENTRY)&_ZN6S841C43v18Ev,
  (VTBL_ENTRY)&_ZN6S841C43v19Ev,
  (VTBL_ENTRY)&_ZN6S841C43v20Ev,
  (VTBL_ENTRY)&_ZN6S841C43v21Ev,
  (VTBL_ENTRY)&_ZN6S841C43v22Ev,
  (VTBL_ENTRY)&_ZN6S841C43v23Ev,
  (VTBL_ENTRY)&_ZN6S841C43v24Ev,
  (VTBL_ENTRY)&_ZN6S841C43v25Ev,
  (VTBL_ENTRY)&_ZN6S841C43v26Ev,
  (VTBL_ENTRY)&_ZN6S841C43v27Ev,
  (VTBL_ENTRY)&_ZN6S841C43v28Ev,
  (VTBL_ENTRY)&_ZN6S841C43v29Ev,
  (VTBL_ENTRY)&_ZN6S841C43v30Ev,
  (VTBL_ENTRY)&_ZN6S841C43v31Ev,
  (VTBL_ENTRY)&_ZN6S841C43v32Ev,
  (VTBL_ENTRY)&_ZN6S841C43v33Ev,
  (VTBL_ENTRY)&_ZN6S841C43v34Ev,
  (VTBL_ENTRY)&_ZN6S841C43v35Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S841C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S841C4D1Ev,_ZThn4_N6S841C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S841C4D0Ev,_ZThn4_N6S841C4D0Ev),
  (VTBL_ENTRY)&_ZN6S841C63v13Ev,
};
extern VTBL_ENTRY _ZTI6S841C4[];
extern  VTBL_ENTRY _ZTV6S841C4[];
Class_Descriptor cd_S841C4 = {  "S841C4", // class name
  bases_S841C4, 2,
  &(vtc_S841C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S841C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S841C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S841C3  : S841C4 {
  ::S857C7_nt s841c3f0;
  ::S856C9_nt s841c3f1;
  char s841c3f2;
  virtual  ~S841C3(); // _ZN6S841C3D1Ev
  virtual void  v36(); // _ZN6S841C33v36Ev
  virtual void  v37(); // _ZN6S841C33v37Ev
  virtual void  v38(); // _ZN6S841C33v38Ev
  S841C3(); // tgen
};
//SIG(-1 S841C3) C1{ BC2{ BC3{ vd v4 v5 v6} BC4{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ Fl[4]}} Fc}


 S841C3 ::~S841C3(){ note_dtor("S841C3", this);}
void  S841C3 ::v36(){vfunc_called(this, "_ZN6S841C33v36Ev");}
void  S841C3 ::v37(){vfunc_called(this, "_ZN6S841C33v37Ev");}
void  S841C3 ::v38(){vfunc_called(this, "_ZN6S841C33v38Ev");}
S841C3 ::S841C3(){ note_ctor("S841C3", this);} // tgen

static void Test_S841C3()
{
  extern Class_Descriptor cd_S841C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S841C3, buf);
    S841C3 *dp, &lv = *(dp=new (buf) S841C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S841C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S841C3)");
    check_base_class_offset(lv, (S841C5*)(S841C4*), 0, "S841C3");
    check_base_class_offset(lv, (S841C6*)(S841C4*), ABISELECT(8,4), "S841C3");
    check_base_class_offset(lv, (S841C4*), 0, "S841C3");
    check_field_offset(lv, s841c3f0, ABISELECT(16,8), "S841C3.s841c3f0");
    check_field_offset(lv, s841c3f1, ABISELECT(40,24), "S841C3.s841c3f1");
    check_field_offset(lv, s841c3f2, ABISELECT(72,40), "S841C3.s841c3f2");
    test_class_info(&lv, &cd_S841C3);
    dp->~S841C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS841C3(Test_S841C3, "S841C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S841C3C1Ev();
extern void _ZN6S841C3D1Ev();
Name_Map name_map_S841C3[] = {
  NSPAIR(_ZN6S841C3C1Ev),
  NSPAIR(_ZN6S841C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S841C5;
extern VTBL_ENTRY _ZTI6S841C5[];
extern  VTBL_ENTRY _ZTV6S841C5[];
extern Class_Descriptor cd_S841C6;
extern VTBL_ENTRY _ZTI6S841C6[];
extern  VTBL_ENTRY _ZTV6S841C6[];
extern Class_Descriptor cd_S841C4;
extern VTBL_ENTRY _ZTI6S841C4[];
extern  VTBL_ENTRY _ZTV6S841C4[];
static Base_Class bases_S841C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S841C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S841C6,    ABISELECT(8,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S841C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S841C3[];
extern void _ZN6S841C3D1Ev();
extern void _ZN6S841C3D0Ev();
extern void _ZN6S841C53v10Ev();
extern void _ZN6S841C53v11Ev();
extern void _ZN6S841C53v12Ev();
extern void _ZN6S841C43v14Ev();
extern void _ZN6S841C43v15Ev();
extern void _ZN6S841C43v16Ev();
extern void _ZN6S841C43v17Ev();
extern void _ZN6S841C43v18Ev();
extern void _ZN6S841C43v19Ev();
extern void _ZN6S841C43v20Ev();
extern void _ZN6S841C43v21Ev();
extern void _ZN6S841C43v22Ev();
extern void _ZN6S841C43v23Ev();
extern void _ZN6S841C43v24Ev();
extern void _ZN6S841C43v25Ev();
extern void _ZN6S841C43v26Ev();
extern void _ZN6S841C43v27Ev();
extern void _ZN6S841C43v28Ev();
extern void _ZN6S841C43v29Ev();
extern void _ZN6S841C43v30Ev();
extern void _ZN6S841C43v31Ev();
extern void _ZN6S841C43v32Ev();
extern void _ZN6S841C43v33Ev();
extern void _ZN6S841C43v34Ev();
extern void _ZN6S841C43v35Ev();
extern void _ZN6S841C33v36Ev();
extern void _ZN6S841C33v37Ev();
extern void _ZN6S841C33v38Ev();
extern void ABISELECT(_ZThn8_N6S841C3D1Ev,_ZThn4_N6S841C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S841C3D0Ev,_ZThn4_N6S841C3D0Ev)();
extern void _ZN6S841C63v13Ev();
static  VTBL_ENTRY vtc_S841C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S841C3[0]),
  (VTBL_ENTRY)&_ZN6S841C3D1Ev,
  (VTBL_ENTRY)&_ZN6S841C3D0Ev,
  (VTBL_ENTRY)&_ZN6S841C53v10Ev,
  (VTBL_ENTRY)&_ZN6S841C53v11Ev,
  (VTBL_ENTRY)&_ZN6S841C53v12Ev,
  (VTBL_ENTRY)&_ZN6S841C43v14Ev,
  (VTBL_ENTRY)&_ZN6S841C43v15Ev,
  (VTBL_ENTRY)&_ZN6S841C43v16Ev,
  (VTBL_ENTRY)&_ZN6S841C43v17Ev,
  (VTBL_ENTRY)&_ZN6S841C43v18Ev,
  (VTBL_ENTRY)&_ZN6S841C43v19Ev,
  (VTBL_ENTRY)&_ZN6S841C43v20Ev,
  (VTBL_ENTRY)&_ZN6S841C43v21Ev,
  (VTBL_ENTRY)&_ZN6S841C43v22Ev,
  (VTBL_ENTRY)&_ZN6S841C43v23Ev,
  (VTBL_ENTRY)&_ZN6S841C43v24Ev,
  (VTBL_ENTRY)&_ZN6S841C43v25Ev,
  (VTBL_ENTRY)&_ZN6S841C43v26Ev,
  (VTBL_ENTRY)&_ZN6S841C43v27Ev,
  (VTBL_ENTRY)&_ZN6S841C43v28Ev,
  (VTBL_ENTRY)&_ZN6S841C43v29Ev,
  (VTBL_ENTRY)&_ZN6S841C43v30Ev,
  (VTBL_ENTRY)&_ZN6S841C43v31Ev,
  (VTBL_ENTRY)&_ZN6S841C43v32Ev,
  (VTBL_ENTRY)&_ZN6S841C43v33Ev,
  (VTBL_ENTRY)&_ZN6S841C43v34Ev,
  (VTBL_ENTRY)&_ZN6S841C43v35Ev,
  (VTBL_ENTRY)&_ZN6S841C33v36Ev,
  (VTBL_ENTRY)&_ZN6S841C33v37Ev,
  (VTBL_ENTRY)&_ZN6S841C33v38Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S841C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S841C3D1Ev,_ZThn4_N6S841C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S841C3D0Ev,_ZThn4_N6S841C3D0Ev),
  (VTBL_ENTRY)&_ZN6S841C63v13Ev,
};
extern VTBL_ENTRY _ZTI6S841C3[];
extern  VTBL_ENTRY _ZTV6S841C3[];
Class_Descriptor cd_S841C3 = {  "S841C3", // class name
  bases_S841C3, 3,
  &(vtc_S841C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S841C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S841C3),37, //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  S841C11  {
  virtual  ~S841C11(); // _ZN7S841C11D1Ev
  virtual void  v39(); // _ZN7S841C113v39Ev
  S841C11(); // tgen
};
//SIG(-1 S841C11) C1{ vd v1}


 S841C11 ::~S841C11(){ note_dtor("S841C11", this);}
void  S841C11 ::v39(){vfunc_called(this, "_ZN7S841C113v39Ev");}
S841C11 ::S841C11(){ note_ctor("S841C11", this);} // tgen

static void Test_S841C11()
{
  extern Class_Descriptor cd_S841C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S841C11, buf);
    S841C11 *dp, &lv = *(dp=new (buf) S841C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S841C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S841C11)");
    test_class_info(&lv, &cd_S841C11);
    dp->~S841C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS841C11(Test_S841C11, "S841C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S841C11C1Ev();
extern void _ZN7S841C11D1Ev();
Name_Map name_map_S841C11[] = {
  NSPAIR(_ZN7S841C11C1Ev),
  NSPAIR(_ZN7S841C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S841C11[];
extern void _ZN7S841C11D1Ev();
extern void _ZN7S841C11D0Ev();
extern void _ZN7S841C113v39Ev();
static  VTBL_ENTRY vtc_S841C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S841C11[0]),
  (VTBL_ENTRY)&_ZN7S841C11D1Ev,
  (VTBL_ENTRY)&_ZN7S841C11D0Ev,
  (VTBL_ENTRY)&_ZN7S841C113v39Ev,
};
extern VTBL_ENTRY _ZTI7S841C11[];
extern  VTBL_ENTRY _ZTV7S841C11[];
Class_Descriptor cd_S841C11 = {  "S841C11", // class name
  0,0,//no base classes
  &(vtc_S841C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S841C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S841C11),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  S841C2  : S841C3 , S841C11 {
  ::S852C12 s841c2f0;
  ::S856C13_nt s841c2f1;
  char s841c2f2[3];
  void *s841c2f3;
  ::S857C16 s841c2f4;
  void *s841c2f5;
  virtual  ~S841C2(); // _ZN6S841C2D1Ev
  virtual void  v40(); // _ZN6S841C23v40Ev
  virtual void  v41(); // _ZN6S841C23v41Ev
  virtual void  v42(); // _ZN6S841C23v42Ev
  virtual void  v43(); // _ZN6S841C23v43Ev
  virtual void  v44(); // _ZN6S841C23v44Ev
  virtual void  v45(); // _ZN6S841C23v45Ev
  virtual void  v46(); // _ZN6S841C23v46Ev
  virtual void  v47(); // _ZN6S841C23v47Ev
  virtual void  v48(); // _ZN6S841C23v48Ev
  virtual void  v49(); // _ZN6S841C23v49Ev
  virtual void  v50(); // _ZN6S841C23v50Ev
  virtual void  v51(); // _ZN6S841C23v51Ev
  virtual void  v52(); // _ZN6S841C23v52Ev
  virtual void  v53(); // _ZN6S841C23v53Ev
  virtual void  v54(); // _ZN6S841C23v54Ev
  virtual void  v55(); // _ZN6S841C23v55Ev
  virtual void  v56(); // _ZN6S841C23v56Ev
  virtual void  v57(); // _ZN6S841C23v57Ev
  virtual void  v58(); // _ZN6S841C23v58Ev
  virtual void  v59(); // _ZN6S841C23v59Ev
  virtual void  v60(); // _ZN6S841C23v60Ev
  virtual void  v61(); // _ZN6S841C23v61Ev
  virtual void  v62(); // _ZN6S841C23v62Ev
  virtual void  v63(); // _ZN6S841C23v63Ev
  virtual void  v64(); // _ZN6S841C23v64Ev
  virtual void  v65(); // _ZN6S841C23v65Ev
  virtual void  v66(); // _ZN6S841C23v66Ev
  virtual void  v67(); // _ZN6S841C23v67Ev
  virtual void  v68(); // _ZN6S841C23v68Ev
  virtual void  v69(); // _ZN6S841C23v69Ev
  virtual void  v70(); // _ZN6S841C23v70Ev
  virtual void  v71(); // _ZN6S841C23v71Ev
  virtual void  v72(); // _ZN6S841C23v72Ev
  virtual void  v73(); // _ZN6S841C23v73Ev
  virtual void  v74(); // _ZN6S841C23v74Ev
  virtual void  v75(); // _ZN6S841C23v75Ev
  virtual void  v76(); // _ZN6S841C23v76Ev
  virtual void  v77(); // _ZN6S841C23v77Ev
  virtual void  v78(); // _ZN6S841C23v78Ev
  virtual void  v79(); // _ZN6S841C23v79Ev
  virtual void  v80(); // _ZN6S841C23v80Ev
  S841C2(); // tgen
};
//SIG(-1 S841C2) C1{ BC2{ BC3{ BC4{ vd v42 v43 v44} BC5{ vd v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67} vd v68 v69 v70 FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ Fl[4]}} Fc} BC10{ vd v71} 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 FC11{ m FC9} FC12{ m Fp FC8 FC13{ m Fp FC14{ Fi[4]}} Fi Fc} Fc[3] Fp FC15{ BC16{ vd v74} BC17{ vd v75} vd v72 v73 Fp[2]} Fp}


 S841C2 ::~S841C2(){ note_dtor("S841C2", this);}
void  S841C2 ::v40(){vfunc_called(this, "_ZN6S841C23v40Ev");}
void  S841C2 ::v41(){vfunc_called(this, "_ZN6S841C23v41Ev");}
void  S841C2 ::v42(){vfunc_called(this, "_ZN6S841C23v42Ev");}
void  S841C2 ::v43(){vfunc_called(this, "_ZN6S841C23v43Ev");}
void  S841C2 ::v44(){vfunc_called(this, "_ZN6S841C23v44Ev");}
void  S841C2 ::v45(){vfunc_called(this, "_ZN6S841C23v45Ev");}
void  S841C2 ::v46(){vfunc_called(this, "_ZN6S841C23v46Ev");}
void  S841C2 ::v47(){vfunc_called(this, "_ZN6S841C23v47Ev");}
void  S841C2 ::v48(){vfunc_called(this, "_ZN6S841C23v48Ev");}
void  S841C2 ::v49(){vfunc_called(this, "_ZN6S841C23v49Ev");}
void  S841C2 ::v50(){vfunc_called(this, "_ZN6S841C23v50Ev");}
void  S841C2 ::v51(){vfunc_called(this, "_ZN6S841C23v51Ev");}
void  S841C2 ::v52(){vfunc_called(this, "_ZN6S841C23v52Ev");}
void  S841C2 ::v53(){vfunc_called(this, "_ZN6S841C23v53Ev");}
void  S841C2 ::v54(){vfunc_called(this, "_ZN6S841C23v54Ev");}
void  S841C2 ::v55(){vfunc_called(this, "_ZN6S841C23v55Ev");}
void  S841C2 ::v56(){vfunc_called(this, "_ZN6S841C23v56Ev");}
void  S841C2 ::v57(){vfunc_called(this, "_ZN6S841C23v57Ev");}
void  S841C2 ::v58(){vfunc_called(this, "_ZN6S841C23v58Ev");}
void  S841C2 ::v59(){vfunc_called(this, "_ZN6S841C23v59Ev");}
void  S841C2 ::v60(){vfunc_called(this, "_ZN6S841C23v60Ev");}
void  S841C2 ::v61(){vfunc_called(this, "_ZN6S841C23v61Ev");}
void  S841C2 ::v62(){vfunc_called(this, "_ZN6S841C23v62Ev");}
void  S841C2 ::v63(){vfunc_called(this, "_ZN6S841C23v63Ev");}
void  S841C2 ::v64(){vfunc_called(this, "_ZN6S841C23v64Ev");}
void  S841C2 ::v65(){vfunc_called(this, "_ZN6S841C23v65Ev");}
void  S841C2 ::v66(){vfunc_called(this, "_ZN6S841C23v66Ev");}
void  S841C2 ::v67(){vfunc_called(this, "_ZN6S841C23v67Ev");}
void  S841C2 ::v68(){vfunc_called(this, "_ZN6S841C23v68Ev");}
void  S841C2 ::v69(){vfunc_called(this, "_ZN6S841C23v69Ev");}
void  S841C2 ::v70(){vfunc_called(this, "_ZN6S841C23v70Ev");}
void  S841C2 ::v71(){vfunc_called(this, "_ZN6S841C23v71Ev");}
void  S841C2 ::v72(){vfunc_called(this, "_ZN6S841C23v72Ev");}
void  S841C2 ::v73(){vfunc_called(this, "_ZN6S841C23v73Ev");}
void  S841C2 ::v74(){vfunc_called(this, "_ZN6S841C23v74Ev");}
void  S841C2 ::v75(){vfunc_called(this, "_ZN6S841C23v75Ev");}
void  S841C2 ::v76(){vfunc_called(this, "_ZN6S841C23v76Ev");}
void  S841C2 ::v77(){vfunc_called(this, "_ZN6S841C23v77Ev");}
void  S841C2 ::v78(){vfunc_called(this, "_ZN6S841C23v78Ev");}
void  S841C2 ::v79(){vfunc_called(this, "_ZN6S841C23v79Ev");}
void  S841C2 ::v80(){vfunc_called(this, "_ZN6S841C23v80Ev");}
S841C2 ::S841C2(){ note_ctor("S841C2", this);} // tgen

static void Test_S841C2()
{
  extern Class_Descriptor cd_S841C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,36)];
    init_test(&cd_S841C2, buf);
    S841C2 *dp, &lv = *(dp=new (buf) S841C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,140), "sizeof(S841C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S841C2)");
    check_base_class_offset(lv, (S841C5*)(S841C4*)(S841C3*), 0, "S841C2");
    check_base_class_offset(lv, (S841C6*)(S841C4*)(S841C3*), ABISELECT(8,4), "S841C2");
    check_base_class_offset(lv, (S841C4*)(S841C3*), 0, "S841C2");
    check_base_class_offset(lv, (S841C3*), 0, "S841C2");
    check_base_class_offset(lv, (S841C11*), ABISELECT(80,44), "S841C2");
    check_field_offset(lv, s841c2f0, ABISELECT(88,48), "S841C2.s841c2f0");
    check_field_offset(lv, s841c2f1, ABISELECT(120,64), "S841C2.s841c2f1");
    check_field_offset(lv, s841c2f2, ABISELECT(192,112), "S841C2.s841c2f2");
    check_field_offset(lv, s841c2f3, ABISELECT(200,116), "S841C2.s841c2f3");
    check_field_offset(lv, s841c2f4, ABISELECT(208,120), "S841C2.s841c2f4");
    check_field_offset(lv, s841c2f5, ABISELECT(240,136), "S841C2.s841c2f5");
    test_class_info(&lv, &cd_S841C2);
    dp->~S841C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS841C2(Test_S841C2, "S841C2", ABISELECT(248,140));

#else // __cplusplus

extern void _ZN6S841C2C1Ev();
extern void _ZN6S841C2D1Ev();
Name_Map name_map_S841C2[] = {
  NSPAIR(_ZN6S841C2C1Ev),
  NSPAIR(_ZN6S841C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S841C5;
extern VTBL_ENTRY _ZTI6S841C5[];
extern  VTBL_ENTRY _ZTV6S841C5[];
extern Class_Descriptor cd_S841C6;
extern VTBL_ENTRY _ZTI6S841C6[];
extern  VTBL_ENTRY _ZTV6S841C6[];
extern Class_Descriptor cd_S841C4;
extern VTBL_ENTRY _ZTI6S841C4[];
extern  VTBL_ENTRY _ZTV6S841C4[];
extern Class_Descriptor cd_S841C3;
extern VTBL_ENTRY _ZTI6S841C3[];
extern  VTBL_ENTRY _ZTV6S841C3[];
extern Class_Descriptor cd_S841C11;
extern VTBL_ENTRY _ZTI7S841C11[];
extern  VTBL_ENTRY _ZTV7S841C11[];
static Base_Class bases_S841C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S841C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S841C6,    ABISELECT(8,4), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_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_S841C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S841C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S841C11,    ABISELECT(80,44), //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},
  {0}};
extern VTBL_ENTRY _ZTI6S841C2[];
extern void _ZN6S841C2D1Ev();
extern void _ZN6S841C2D0Ev();
extern void _ZN6S841C53v10Ev();
extern void _ZN6S841C53v11Ev();
extern void _ZN6S841C53v12Ev();
extern void _ZN6S841C43v14Ev();
extern void _ZN6S841C43v15Ev();
extern void _ZN6S841C43v16Ev();
extern void _ZN6S841C43v17Ev();
extern void _ZN6S841C43v18Ev();
extern void _ZN6S841C43v19Ev();
extern void _ZN6S841C43v20Ev();
extern void _ZN6S841C43v21Ev();
extern void _ZN6S841C43v22Ev();
extern void _ZN6S841C43v23Ev();
extern void _ZN6S841C43v24Ev();
extern void _ZN6S841C43v25Ev();
extern void _ZN6S841C43v26Ev();
extern void _ZN6S841C43v27Ev();
extern void _ZN6S841C43v28Ev();
extern void _ZN6S841C43v29Ev();
extern void _ZN6S841C43v30Ev();
extern void _ZN6S841C43v31Ev();
extern void _ZN6S841C43v32Ev();
extern void _ZN6S841C43v33Ev();
extern void _ZN6S841C43v34Ev();
extern void _ZN6S841C43v35Ev();
extern void _ZN6S841C33v36Ev();
extern void _ZN6S841C33v37Ev();
extern void _ZN6S841C33v38Ev();
extern void _ZN6S841C23v40Ev();
extern void _ZN6S841C23v41Ev();
extern void _ZN6S841C23v42Ev();
extern void _ZN6S841C23v43Ev();
extern void _ZN6S841C23v44Ev();
extern void _ZN6S841C23v45Ev();
extern void _ZN6S841C23v46Ev();
extern void _ZN6S841C23v47Ev();
extern void _ZN6S841C23v48Ev();
extern void _ZN6S841C23v49Ev();
extern void _ZN6S841C23v50Ev();
extern void _ZN6S841C23v51Ev();
extern void _ZN6S841C23v52Ev();
extern void _ZN6S841C23v53Ev();
extern void _ZN6S841C23v54Ev();
extern void _ZN6S841C23v55Ev();
extern void _ZN6S841C23v56Ev();
extern void _ZN6S841C23v57Ev();
extern void _ZN6S841C23v58Ev();
extern void _ZN6S841C23v59Ev();
extern void _ZN6S841C23v60Ev();
extern void _ZN6S841C23v61Ev();
extern void _ZN6S841C23v62Ev();
extern void _ZN6S841C23v63Ev();
extern void _ZN6S841C23v64Ev();
extern void _ZN6S841C23v65Ev();
extern void _ZN6S841C23v66Ev();
extern void _ZN6S841C23v67Ev();
extern void _ZN6S841C23v68Ev();
extern void _ZN6S841C23v69Ev();
extern void _ZN6S841C23v70Ev();
extern void _ZN6S841C23v71Ev();
extern void _ZN6S841C23v72Ev();
extern void _ZN6S841C23v73Ev();
extern void _ZN6S841C23v74Ev();
extern void _ZN6S841C23v75Ev();
extern void _ZN6S841C23v76Ev();
extern void _ZN6S841C23v77Ev();
extern void _ZN6S841C23v78Ev();
extern void _ZN6S841C23v79Ev();
extern void _ZN6S841C23v80Ev();
extern void ABISELECT(_ZThn8_N6S841C2D1Ev,_ZThn4_N6S841C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S841C2D0Ev,_ZThn4_N6S841C2D0Ev)();
extern void _ZN6S841C63v13Ev();
extern void ABISELECT(_ZThn80_N6S841C2D1Ev,_ZThn44_N6S841C2D1Ev)();
extern void ABISELECT(_ZThn80_N6S841C2D0Ev,_ZThn44_N6S841C2D0Ev)();
extern void _ZN7S841C113v39Ev();
static  VTBL_ENTRY vtc_S841C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S841C2[0]),
  (VTBL_ENTRY)&_ZN6S841C2D1Ev,
  (VTBL_ENTRY)&_ZN6S841C2D0Ev,
  (VTBL_ENTRY)&_ZN6S841C53v10Ev,
  (VTBL_ENTRY)&_ZN6S841C53v11Ev,
  (VTBL_ENTRY)&_ZN6S841C53v12Ev,
  (VTBL_ENTRY)&_ZN6S841C43v14Ev,
  (VTBL_ENTRY)&_ZN6S841C43v15Ev,
  (VTBL_ENTRY)&_ZN6S841C43v16Ev,
  (VTBL_ENTRY)&_ZN6S841C43v17Ev,
  (VTBL_ENTRY)&_ZN6S841C43v18Ev,
  (VTBL_ENTRY)&_ZN6S841C43v19Ev,
  (VTBL_ENTRY)&_ZN6S841C43v20Ev,
  (VTBL_ENTRY)&_ZN6S841C43v21Ev,
  (VTBL_ENTRY)&_ZN6S841C43v22Ev,
  (VTBL_ENTRY)&_ZN6S841C43v23Ev,
  (VTBL_ENTRY)&_ZN6S841C43v24Ev,
  (VTBL_ENTRY)&_ZN6S841C43v25Ev,
  (VTBL_ENTRY)&_ZN6S841C43v26Ev,
  (VTBL_ENTRY)&_ZN6S841C43v27Ev,
  (VTBL_ENTRY)&_ZN6S841C43v28Ev,
  (VTBL_ENTRY)&_ZN6S841C43v29Ev,
  (VTBL_ENTRY)&_ZN6S841C43v30Ev,
  (VTBL_ENTRY)&_ZN6S841C43v31Ev,
  (VTBL_ENTRY)&_ZN6S841C43v32Ev,
  (VTBL_ENTRY)&_ZN6S841C43v33Ev,
  (VTBL_ENTRY)&_ZN6S841C43v34Ev,
  (VTBL_ENTRY)&_ZN6S841C43v35Ev,
  (VTBL_ENTRY)&_ZN6S841C33v36Ev,
  (VTBL_ENTRY)&_ZN6S841C33v37Ev,
  (VTBL_ENTRY)&_ZN6S841C33v38Ev,
  (VTBL_ENTRY)&_ZN6S841C23v40Ev,
  (VTBL_ENTRY)&_ZN6S841C23v41Ev,
  (VTBL_ENTRY)&_ZN6S841C23v42Ev,
  (VTBL_ENTRY)&_ZN6S841C23v43Ev,
  (VTBL_ENTRY)&_ZN6S841C23v44Ev,
  (VTBL_ENTRY)&_ZN6S841C23v45Ev,
  (VTBL_ENTRY)&_ZN6S841C23v46Ev,
  (VTBL_ENTRY)&_ZN6S841C23v47Ev,
  (VTBL_ENTRY)&_ZN6S841C23v48Ev,
  (VTBL_ENTRY)&_ZN6S841C23v49Ev,
  (VTBL_ENTRY)&_ZN6S841C23v50Ev,
  (VTBL_ENTRY)&_ZN6S841C23v51Ev,
  (VTBL_ENTRY)&_ZN6S841C23v52Ev,
  (VTBL_ENTRY)&_ZN6S841C23v53Ev,
  (VTBL_ENTRY)&_ZN6S841C23v54Ev,
  (VTBL_ENTRY)&_ZN6S841C23v55Ev,
  (VTBL_ENTRY)&_ZN6S841C23v56Ev,
  (VTBL_ENTRY)&_ZN6S841C23v57Ev,
  (VTBL_ENTRY)&_ZN6S841C23v58Ev,
  (VTBL_ENTRY)&_ZN6S841C23v59Ev,
  (VTBL_ENTRY)&_ZN6S841C23v60Ev,
  (VTBL_ENTRY)&_ZN6S841C23v61Ev,
  (VTBL_ENTRY)&_ZN6S841C23v62Ev,
  (VTBL_ENTRY)&_ZN6S841C23v63Ev,
  (VTBL_ENTRY)&_ZN6S841C23v64Ev,
  (VTBL_ENTRY)&_ZN6S841C23v65Ev,
  (VTBL_ENTRY)&_ZN6S841C23v66Ev,
  (VTBL_ENTRY)&_ZN6S841C23v67Ev,
  (VTBL_ENTRY)&_ZN6S841C23v68Ev,
  (VTBL_ENTRY)&_ZN6S841C23v69Ev,
  (VTBL_ENTRY)&_ZN6S841C23v70Ev,
  (VTBL_ENTRY)&_ZN6S841C23v71Ev,
  (VTBL_ENTRY)&_ZN6S841C23v72Ev,
  (VTBL_ENTRY)&_ZN6S841C23v73Ev,
  (VTBL_ENTRY)&_ZN6S841C23v74Ev,
  (VTBL_ENTRY)&_ZN6S841C23v75Ev,
  (VTBL_ENTRY)&_ZN6S841C23v76Ev,
  (VTBL_ENTRY)&_ZN6S841C23v77Ev,
  (VTBL_ENTRY)&_ZN6S841C23v78Ev,
  (VTBL_ENTRY)&_ZN6S841C23v79Ev,
  (VTBL_ENTRY)&_ZN6S841C23v80Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S841C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S841C2D1Ev,_ZThn4_N6S841C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S841C2D0Ev,_ZThn4_N6S841C2D0Ev),
  (VTBL_ENTRY)&_ZN6S841C63v13Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI6S841C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S841C2D1Ev,_ZThn44_N6S841C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S841C2D0Ev,_ZThn44_N6S841C2D0Ev),
  (VTBL_ENTRY)&_ZN7S841C113v39Ev,
};
extern VTBL_ENTRY _ZTI6S841C2[];
extern  VTBL_ENTRY _ZTV6S841C2[];
Class_Descriptor cd_S841C2 = {  "S841C2", // class name
  bases_S841C2, 5,
  &(vtc_S841C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,140), // object size
  NSPAIRA(_ZTI6S841C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S841C2),83, //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  S841C1  : S841C2 {
  virtual  ~S841C1(); // _ZN6S841C1D1Ev
  virtual void  v1(); // _ZN6S841C12v1Ev
  virtual void  v2(); // _ZN6S841C12v2Ev
  virtual void  v3(); // _ZN6S841C12v3Ev
  virtual void  v4(); // _ZN6S841C12v4Ev
  virtual void  v5(); // _ZN6S841C12v5Ev
  virtual void  v6(); // _ZN6S841C12v6Ev
  virtual void  v7(); // _ZN6S841C12v7Ev
  virtual void  v8(); // _ZN6S841C12v8Ev
  virtual void  v9(); // _ZN6S841C12v9Ev
  S841C1(); // tgen
};
//SIG(1 S841C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v10 v11 v12} BC6{ vd v13} vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35} vd v36 v37 v38 FC7{ m Fp Fi[2] FC8{ m}} FC9{ m FC10{ Fl[4]}} Fc} BC11{ vd v39} vd 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 FC12{ m FC10} FC13{ m Fp FC9 FC14{ m Fp FC15{ Fi[4]}} Fi Fc} Fc[3] Fp FC16{ BC17{ vd v83} BC18{ vd v84} vd v81 v82 Fp[2]} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S841C1 ::~S841C1(){ note_dtor("S841C1", this);}
void  S841C1 ::v1(){vfunc_called(this, "_ZN6S841C12v1Ev");}
void  S841C1 ::v2(){vfunc_called(this, "_ZN6S841C12v2Ev");}
void  S841C1 ::v3(){vfunc_called(this, "_ZN6S841C12v3Ev");}
void  S841C1 ::v4(){vfunc_called(this, "_ZN6S841C12v4Ev");}
void  S841C1 ::v5(){vfunc_called(this, "_ZN6S841C12v5Ev");}
void  S841C1 ::v6(){vfunc_called(this, "_ZN6S841C12v6Ev");}
void  S841C1 ::v7(){vfunc_called(this, "_ZN6S841C12v7Ev");}
void  S841C1 ::v8(){vfunc_called(this, "_ZN6S841C12v8Ev");}
void  S841C1 ::v9(){vfunc_called(this, "_ZN6S841C12v9Ev");}
S841C1 ::S841C1(){ note_ctor("S841C1", this);} // tgen

static void Test_S841C1()
{
  extern Class_Descriptor cd_S841C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,36)];
    init_test(&cd_S841C1, buf);
    S841C1 *dp, &lv = *(dp=new (buf) S841C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,140), "sizeof(S841C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S841C1)");
    check_base_class_offset(lv, (S841C5*)(S841C4*)(S841C3*)(S841C2*), 0, "S841C1");
    check_base_class_offset(lv, (S841C6*)(S841C4*)(S841C3*)(S841C2*), ABISELECT(8,4), "S841C1");
    check_base_class_offset(lv, (S841C4*)(S841C3*)(S841C2*), 0, "S841C1");
    check_base_class_offset(lv, (S841C3*)(S841C2*), 0, "S841C1");
    check_base_class_offset(lv, (S841C11*)(S841C2*), ABISELECT(80,44), "S841C1");
    check_base_class_offset(lv, (S841C2*), 0, "S841C1");
    test_class_info(&lv, &cd_S841C1);
    dp->~S841C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS841C1(Test_S841C1, "S841C1", ABISELECT(248,140));

#else // __cplusplus

extern void _ZN6S841C1C1Ev();
extern void _ZN6S841C1D1Ev();
Name_Map name_map_S841C1[] = {
  NSPAIR(_ZN6S841C1C1Ev),
  NSPAIR(_ZN6S841C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S841C5;
extern VTBL_ENTRY _ZTI6S841C5[];
extern  VTBL_ENTRY _ZTV6S841C5[];
extern Class_Descriptor cd_S841C6;
extern VTBL_ENTRY _ZTI6S841C6[];
extern  VTBL_ENTRY _ZTV6S841C6[];
extern Class_Descriptor cd_S841C4;
extern VTBL_ENTRY _ZTI6S841C4[];
extern  VTBL_ENTRY _ZTV6S841C4[];
extern Class_Descriptor cd_S841C3;
extern VTBL_ENTRY _ZTI6S841C3[];
extern  VTBL_ENTRY _ZTV6S841C3[];
extern Class_Descriptor cd_S841C11;
extern VTBL_ENTRY _ZTI7S841C11[];
extern  VTBL_ENTRY _ZTV7S841C11[];
extern Class_Descriptor cd_S841C2;
extern VTBL_ENTRY _ZTI6S841C2[];
extern  VTBL_ENTRY _ZTV6S841C2[];
static Base_Class bases_S841C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S841C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S841C6,    ABISELECT(8,4), //bcp->offset
    82, //bcp->virtual_function_table_offset
    2, //num_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_S841C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S841C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S841C11,    ABISELECT(80,44), //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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S841C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S841C1[];
extern void _ZN6S841C1D1Ev();
extern void _ZN6S841C1D0Ev();
extern void _ZN6S841C53v10Ev();
extern void _ZN6S841C53v11Ev();
extern void _ZN6S841C53v12Ev();
extern void _ZN6S841C43v14Ev();
extern void _ZN6S841C43v15Ev();
extern void _ZN6S841C43v16Ev();
extern void _ZN6S841C43v17Ev();
extern void _ZN6S841C43v18Ev();
extern void _ZN6S841C43v19Ev();
extern void _ZN6S841C43v20Ev();
extern void _ZN6S841C43v21Ev();
extern void _ZN6S841C43v22Ev();
extern void _ZN6S841C43v23Ev();
extern void _ZN6S841C43v24Ev();
extern void _ZN6S841C43v25Ev();
extern void _ZN6S841C43v26Ev();
extern void _ZN6S841C43v27Ev();
extern void _ZN6S841C43v28Ev();
extern void _ZN6S841C43v29Ev();
extern void _ZN6S841C43v30Ev();
extern void _ZN6S841C43v31Ev();
extern void _ZN6S841C43v32Ev();
extern void _ZN6S841C43v33Ev();
extern void _ZN6S841C43v34Ev();
extern void _ZN6S841C43v35Ev();
extern void _ZN6S841C33v36Ev();
extern void _ZN6S841C33v37Ev();
extern void _ZN6S841C33v38Ev();
extern void _ZN6S841C23v40Ev();
extern void _ZN6S841C23v41Ev();
extern void _ZN6S841C23v42Ev();
extern void _ZN6S841C23v43Ev();
extern void _ZN6S841C23v44Ev();
extern void _ZN6S841C23v45Ev();
extern void _ZN6S841C23v46Ev();
extern void _ZN6S841C23v47Ev();
extern void _ZN6S841C23v48Ev();
extern void _ZN6S841C23v49Ev();
extern void _ZN6S841C23v50Ev();
extern void _ZN6S841C23v51Ev();
extern void _ZN6S841C23v52Ev();
extern void _ZN6S841C23v53Ev();
extern void _ZN6S841C23v54Ev();
extern void _ZN6S841C23v55Ev();
extern void _ZN6S841C23v56Ev();
extern void _ZN6S841C23v57Ev();
extern void _ZN6S841C23v58Ev();
extern void _ZN6S841C23v59Ev();
extern void _ZN6S841C23v60Ev();
extern void _ZN6S841C23v61Ev();
extern void _ZN6S841C23v62Ev();
extern void _ZN6S841C23v63Ev();
extern void _ZN6S841C23v64Ev();
extern void _ZN6S841C23v65Ev();
extern void _ZN6S841C23v66Ev();
extern void _ZN6S841C23v67Ev();
extern void _ZN6S841C23v68Ev();
extern void _ZN6S841C23v69Ev();
extern void _ZN6S841C23v70Ev();
extern void _ZN6S841C23v71Ev();
extern void _ZN6S841C23v72Ev();
extern void _ZN6S841C23v73Ev();
extern void _ZN6S841C23v74Ev();
extern void _ZN6S841C23v75Ev();
extern void _ZN6S841C23v76Ev();
extern void _ZN6S841C23v77Ev();
extern void _ZN6S841C23v78Ev();
extern void _ZN6S841C23v79Ev();
extern void _ZN6S841C23v80Ev();
extern void _ZN6S841C12v1Ev();
extern void _ZN6S841C12v2Ev();
extern void _ZN6S841C12v3Ev();
extern void _ZN6S841C12v4Ev();
extern void _ZN6S841C12v5Ev();
extern void _ZN6S841C12v6Ev();
extern void _ZN6S841C12v7Ev();
extern void _ZN6S841C12v8Ev();
extern void _ZN6S841C12v9Ev();
extern void ABISELECT(_ZThn8_N6S841C1D1Ev,_ZThn4_N6S841C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S841C1D0Ev,_ZThn4_N6S841C1D0Ev)();
extern void _ZN6S841C63v13Ev();
extern void ABISELECT(_ZThn80_N6S841C1D1Ev,_ZThn44_N6S841C1D1Ev)();
extern void ABISELECT(_ZThn80_N6S841C1D0Ev,_ZThn44_N6S841C1D0Ev)();
extern void _ZN7S841C113v39Ev();
static  VTBL_ENTRY vtc_S841C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S841C1[0]),
  (VTBL_ENTRY)&_ZN6S841C1D1Ev,
  (VTBL_ENTRY)&_ZN6S841C1D0Ev,
  (VTBL_ENTRY)&_ZN6S841C53v10Ev,
  (VTBL_ENTRY)&_ZN6S841C53v11Ev,
  (VTBL_ENTRY)&_ZN6S841C53v12Ev,
  (VTBL_ENTRY)&_ZN6S841C43v14Ev,
  (VTBL_ENTRY)&_ZN6S841C43v15Ev,
  (VTBL_ENTRY)&_ZN6S841C43v16Ev,
  (VTBL_ENTRY)&_ZN6S841C43v17Ev,
  (VTBL_ENTRY)&_ZN6S841C43v18Ev,
  (VTBL_ENTRY)&_ZN6S841C43v19Ev,
  (VTBL_ENTRY)&_ZN6S841C43v20Ev,
  (VTBL_ENTRY)&_ZN6S841C43v21Ev,
  (VTBL_ENTRY)&_ZN6S841C43v22Ev,
  (VTBL_ENTRY)&_ZN6S841C43v23Ev,
  (VTBL_ENTRY)&_ZN6S841C43v24Ev,
  (VTBL_ENTRY)&_ZN6S841C43v25Ev,
  (VTBL_ENTRY)&_ZN6S841C43v26Ev,
  (VTBL_ENTRY)&_ZN6S841C43v27Ev,
  (VTBL_ENTRY)&_ZN6S841C43v28Ev,
  (VTBL_ENTRY)&_ZN6S841C43v29Ev,
  (VTBL_ENTRY)&_ZN6S841C43v30Ev,
  (VTBL_ENTRY)&_ZN6S841C43v31Ev,
  (VTBL_ENTRY)&_ZN6S841C43v32Ev,
  (VTBL_ENTRY)&_ZN6S841C43v33Ev,
  (VTBL_ENTRY)&_ZN6S841C43v34Ev,
  (VTBL_ENTRY)&_ZN6S841C43v35Ev,
  (VTBL_ENTRY)&_ZN6S841C33v36Ev,
  (VTBL_ENTRY)&_ZN6S841C33v37Ev,
  (VTBL_ENTRY)&_ZN6S841C33v38Ev,
  (VTBL_ENTRY)&_ZN6S841C23v40Ev,
  (VTBL_ENTRY)&_ZN6S841C23v41Ev,
  (VTBL_ENTRY)&_ZN6S841C23v42Ev,
  (VTBL_ENTRY)&_ZN6S841C23v43Ev,
  (VTBL_ENTRY)&_ZN6S841C23v44Ev,
  (VTBL_ENTRY)&_ZN6S841C23v45Ev,
  (VTBL_ENTRY)&_ZN6S841C23v46Ev,
  (VTBL_ENTRY)&_ZN6S841C23v47Ev,
  (VTBL_ENTRY)&_ZN6S841C23v48Ev,
  (VTBL_ENTRY)&_ZN6S841C23v49Ev,
  (VTBL_ENTRY)&_ZN6S841C23v50Ev,
  (VTBL_ENTRY)&_ZN6S841C23v51Ev,
  (VTBL_ENTRY)&_ZN6S841C23v52Ev,
  (VTBL_ENTRY)&_ZN6S841C23v53Ev,
  (VTBL_ENTRY)&_ZN6S841C23v54Ev,
  (VTBL_ENTRY)&_ZN6S841C23v55Ev,
  (VTBL_ENTRY)&_ZN6S841C23v56Ev,
  (VTBL_ENTRY)&_ZN6S841C23v57Ev,
  (VTBL_ENTRY)&_ZN6S841C23v58Ev,
  (VTBL_ENTRY)&_ZN6S841C23v59Ev,
  (VTBL_ENTRY)&_ZN6S841C23v60Ev,
  (VTBL_ENTRY)&_ZN6S841C23v61Ev,
  (VTBL_ENTRY)&_ZN6S841C23v62Ev,
  (VTBL_ENTRY)&_ZN6S841C23v63Ev,
  (VTBL_ENTRY)&_ZN6S841C23v64Ev,
  (VTBL_ENTRY)&_ZN6S841C23v65Ev,
  (VTBL_ENTRY)&_ZN6S841C23v66Ev,
  (VTBL_ENTRY)&_ZN6S841C23v67Ev,
  (VTBL_ENTRY)&_ZN6S841C23v68Ev,
  (VTBL_ENTRY)&_ZN6S841C23v69Ev,
  (VTBL_ENTRY)&_ZN6S841C23v70Ev,
  (VTBL_ENTRY)&_ZN6S841C23v71Ev,
  (VTBL_ENTRY)&_ZN6S841C23v72Ev,
  (VTBL_ENTRY)&_ZN6S841C23v73Ev,
  (VTBL_ENTRY)&_ZN6S841C23v74Ev,
  (VTBL_ENTRY)&_ZN6S841C23v75Ev,
  (VTBL_ENTRY)&_ZN6S841C23v76Ev,
  (VTBL_ENTRY)&_ZN6S841C23v77Ev,
  (VTBL_ENTRY)&_ZN6S841C23v78Ev,
  (VTBL_ENTRY)&_ZN6S841C23v79Ev,
  (VTBL_ENTRY)&_ZN6S841C23v80Ev,
  (VTBL_ENTRY)&_ZN6S841C12v1Ev,
  (VTBL_ENTRY)&_ZN6S841C12v2Ev,
  (VTBL_ENTRY)&_ZN6S841C12v3Ev,
  (VTBL_ENTRY)&_ZN6S841C12v4Ev,
  (VTBL_ENTRY)&_ZN6S841C12v5Ev,
  (VTBL_ENTRY)&_ZN6S841C12v6Ev,
  (VTBL_ENTRY)&_ZN6S841C12v7Ev,
  (VTBL_ENTRY)&_ZN6S841C12v8Ev,
  (VTBL_ENTRY)&_ZN6S841C12v9Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S841C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S841C1D1Ev,_ZThn4_N6S841C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S841C1D0Ev,_ZThn4_N6S841C1D0Ev),
  (VTBL_ENTRY)&_ZN6S841C63v13Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI6S841C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S841C1D1Ev,_ZThn44_N6S841C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S841C1D0Ev,_ZThn44_N6S841C1D0Ev),
  (VTBL_ENTRY)&_ZN7S841C113v39Ev,
};
extern VTBL_ENTRY _ZTI6S841C1[];
extern  VTBL_ENTRY _ZTV6S841C1[];
Class_Descriptor cd_S841C1 = {  "S841C1", // class name
  bases_S841C1, 6,
  &(vtc_S841C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,140), // object size
  NSPAIRA(_ZTI6S841C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S841C1),92, //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  S842C5  {
  virtual  ~S842C5(); // _ZN6S842C5D1Ev
  virtual void  v10(); // _ZN6S842C53v10Ev
  virtual void  v11(); // _ZN6S842C53v11Ev
  virtual void  v12(); // _ZN6S842C53v12Ev
  S842C5(); // tgen
};
//SIG(-1 S842C5) C1{ vd v1 v2 v3}


 S842C5 ::~S842C5(){ note_dtor("S842C5", this);}
void  S842C5 ::v10(){vfunc_called(this, "_ZN6S842C53v10Ev");}
void  S842C5 ::v11(){vfunc_called(this, "_ZN6S842C53v11Ev");}
void  S842C5 ::v12(){vfunc_called(this, "_ZN6S842C53v12Ev");}
S842C5 ::S842C5(){ note_ctor("S842C5", this);} // tgen

static void Test_S842C5()
{
  extern Class_Descriptor cd_S842C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S842C5, buf);
    S842C5 *dp, &lv = *(dp=new (buf) S842C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S842C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S842C5)");
    test_class_info(&lv, &cd_S842C5);
    dp->~S842C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS842C5(Test_S842C5, "S842C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S842C5C1Ev();
extern void _ZN6S842C5D1Ev();
Name_Map name_map_S842C5[] = {
  NSPAIR(_ZN6S842C5C1Ev),
  NSPAIR(_ZN6S842C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S842C5[];
extern void _ZN6S842C5D1Ev();
extern void _ZN6S842C5D0Ev();
extern void _ZN6S842C53v10Ev();
extern void _ZN6S842C53v11Ev();
extern void _ZN6S842C53v12Ev();
static  VTBL_ENTRY vtc_S842C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S842C5[0]),
  (VTBL_ENTRY)&_ZN6S842C5D1Ev,
  (VTBL_ENTRY)&_ZN6S842C5D0Ev,
  (VTBL_ENTRY)&_ZN6S842C53v10Ev,
  (VTBL_ENTRY)&_ZN6S842C53v11Ev,
  (VTBL_ENTRY)&_ZN6S842C53v12Ev,
};
extern VTBL_ENTRY _ZTI6S842C5[];
extern  VTBL_ENTRY _ZTV6S842C5[];
Class_Descriptor cd_S842C5 = {  "S842C5", // class name
  0,0,//no base classes
  &(vtc_S842C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S842C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S842C5),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  S842C6  {
  virtual  ~S842C6(); // _ZN6S842C6D1Ev
  virtual void  v13(); // _ZN6S842C63v13Ev
  S842C6(); // tgen
};
//SIG(-1 S842C6) C1{ vd v1}


 S842C6 ::~S842C6(){ note_dtor("S842C6", this);}
void  S842C6 ::v13(){vfunc_called(this, "_ZN6S842C63v13Ev");}
S842C6 ::S842C6(){ note_ctor("S842C6", this);} // tgen

static void Test_S842C6()
{
  extern Class_Descriptor cd_S842C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S842C6, buf);
    S842C6 *dp, &lv = *(dp=new (buf) S842C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S842C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S842C6)");
    test_class_info(&lv, &cd_S842C6);
    dp->~S842C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS842C6(Test_S842C6, "S842C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S842C6C1Ev();
extern void _ZN6S842C6D1Ev();
Name_Map name_map_S842C6[] = {
  NSPAIR(_ZN6S842C6C1Ev),
  NSPAIR(_ZN6S842C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S842C6[];
extern void _ZN6S842C6D1Ev();
extern void _ZN6S842C6D0Ev();
extern void _ZN6S842C63v13Ev();
static  VTBL_ENTRY vtc_S842C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S842C6[0]),
  (VTBL_ENTRY)&_ZN6S842C6D1Ev,
  (VTBL_ENTRY)&_ZN6S842C6D0Ev,
  (VTBL_ENTRY)&_ZN6S842C63v13Ev,
};
extern VTBL_ENTRY _ZTI6S842C6[];
extern  VTBL_ENTRY _ZTV6S842C6[];
Class_Descriptor cd_S842C6 = {  "S842C6", // class name
  0,0,//no base classes
  &(vtc_S842C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S842C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S842C6),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  S842C4  : S842C5 , S842C6 {
  virtual  ~S842C4(); // _ZN6S842C4D1Ev
  virtual void  v14(); // _ZN6S842C43v14Ev
  virtual void  v15(); // _ZN6S842C43v15Ev
  virtual void  v16(); // _ZN6S842C43v16Ev
  virtual void  v17(); // _ZN6S842C43v17Ev
  virtual void  v18(); // _ZN6S842C43v18Ev
  virtual void  v19(); // _ZN6S842C43v19Ev
  virtual void  v20(); // _ZN6S842C43v20Ev
  virtual void  v21(); // _ZN6S842C43v21Ev
  virtual void  v22(); // _ZN6S842C43v22Ev
  virtual void  v23(); // _ZN6S842C43v23Ev
  virtual void  v24(); // _ZN6S842C43v24Ev
  virtual void  v25(); // _ZN6S842C43v25Ev
  virtual void  v26(); // _ZN6S842C43v26Ev
  virtual void  v27(); // _ZN6S842C43v27Ev
  virtual void  v28(); // _ZN6S842C43v28Ev
  virtual void  v29(); // _ZN6S842C43v29Ev
  virtual void  v30(); // _ZN6S842C43v30Ev
  virtual void  v31(); // _ZN6S842C43v31Ev
  virtual void  v32(); // _ZN6S842C43v32Ev
  virtual void  v33(); // _ZN6S842C43v33Ev
  virtual void  v34(); // _ZN6S842C43v34Ev
  virtual void  v35(); // _ZN6S842C43v35Ev
  S842C4(); // tgen
};
//SIG(-1 S842C4) C1{ BC2{ vd v23 v24 v25} BC3{ vd v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S842C4 ::~S842C4(){ note_dtor("S842C4", this);}
void  S842C4 ::v14(){vfunc_called(this, "_ZN6S842C43v14Ev");}
void  S842C4 ::v15(){vfunc_called(this, "_ZN6S842C43v15Ev");}
void  S842C4 ::v16(){vfunc_called(this, "_ZN6S842C43v16Ev");}
void  S842C4 ::v17(){vfunc_called(this, "_ZN6S842C43v17Ev");}
void  S842C4 ::v18(){vfunc_called(this, "_ZN6S842C43v18Ev");}
void  S842C4 ::v19(){vfunc_called(this, "_ZN6S842C43v19Ev");}
void  S842C4 ::v20(){vfunc_called(this, "_ZN6S842C43v20Ev");}
void  S842C4 ::v21(){vfunc_called(this, "_ZN6S842C43v21Ev");}
void  S842C4 ::v22(){vfunc_called(this, "_ZN6S842C43v22Ev");}
void  S842C4 ::v23(){vfunc_called(this, "_ZN6S842C43v23Ev");}
void  S842C4 ::v24(){vfunc_called(this, "_ZN6S842C43v24Ev");}
void  S842C4 ::v25(){vfunc_called(this, "_ZN6S842C43v25Ev");}
void  S842C4 ::v26(){vfunc_called(this, "_ZN6S842C43v26Ev");}
void  S842C4 ::v27(){vfunc_called(this, "_ZN6S842C43v27Ev");}
void  S842C4 ::v28(){vfunc_called(this, "_ZN6S842C43v28Ev");}
void  S842C4 ::v29(){vfunc_called(this, "_ZN6S842C43v29Ev");}
void  S842C4 ::v30(){vfunc_called(this, "_ZN6S842C43v30Ev");}
void  S842C4 ::v31(){vfunc_called(this, "_ZN6S842C43v31Ev");}
void  S842C4 ::v32(){vfunc_called(this, "_ZN6S842C43v32Ev");}
void  S842C4 ::v33(){vfunc_called(this, "_ZN6S842C43v33Ev");}
void  S842C4 ::v34(){vfunc_called(this, "_ZN6S842C43v34Ev");}
void  S842C4 ::v35(){vfunc_called(this, "_ZN6S842C43v35Ev");}
S842C4 ::S842C4(){ note_ctor("S842C4", this);} // tgen

static void Test_S842C4()
{
  extern Class_Descriptor cd_S842C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S842C4, buf);
    S842C4 *dp, &lv = *(dp=new (buf) S842C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S842C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S842C4)");
    check_base_class_offset(lv, (S842C5*), 0, "S842C4");
    check_base_class_offset(lv, (S842C6*), ABISELECT(8,4), "S842C4");
    test_class_info(&lv, &cd_S842C4);
    dp->~S842C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS842C4(Test_S842C4, "S842C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S842C4C1Ev();
extern void _ZN6S842C4D1Ev();
Name_Map name_map_S842C4[] = {
  NSPAIR(_ZN6S842C4C1Ev),
  NSPAIR(_ZN6S842C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S842C5;
extern VTBL_ENTRY _ZTI6S842C5[];
extern  VTBL_ENTRY _ZTV6S842C5[];
extern Class_Descriptor cd_S842C6;
extern VTBL_ENTRY _ZTI6S842C6[];
extern  VTBL_ENTRY _ZTV6S842C6[];
static Base_Class bases_S842C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S842C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S842C6,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S842C4[];
extern void _ZN6S842C4D1Ev();
extern void _ZN6S842C4D0Ev();
extern void _ZN6S842C53v10Ev();
extern void _ZN6S842C53v11Ev();
extern void _ZN6S842C53v12Ev();
extern void _ZN6S842C43v14Ev();
extern void _ZN6S842C43v15Ev();
extern void _ZN6S842C43v16Ev();
extern void _ZN6S842C43v17Ev();
extern void _ZN6S842C43v18Ev();
extern void _ZN6S842C43v19Ev();
extern void _ZN6S842C43v20Ev();
extern void _ZN6S842C43v21Ev();
extern void _ZN6S842C43v22Ev();
extern void _ZN6S842C43v23Ev();
extern void _ZN6S842C43v24Ev();
extern void _ZN6S842C43v25Ev();
extern void _ZN6S842C43v26Ev();
extern void _ZN6S842C43v27Ev();
extern void _ZN6S842C43v28Ev();
extern void _ZN6S842C43v29Ev();
extern void _ZN6S842C43v30Ev();
extern void _ZN6S842C43v31Ev();
extern void _ZN6S842C43v32Ev();
extern void _ZN6S842C43v33Ev();
extern void _ZN6S842C43v34Ev();
extern void _ZN6S842C43v35Ev();
extern void ABISELECT(_ZThn8_N6S842C4D1Ev,_ZThn4_N6S842C4D1Ev)();
extern void ABISELECT(_ZThn8_N6S842C4D0Ev,_ZThn4_N6S842C4D0Ev)();
extern void _ZN6S842C63v13Ev();
static  VTBL_ENTRY vtc_S842C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S842C4[0]),
  (VTBL_ENTRY)&_ZN6S842C4D1Ev,
  (VTBL_ENTRY)&_ZN6S842C4D0Ev,
  (VTBL_ENTRY)&_ZN6S842C53v10Ev,
  (VTBL_ENTRY)&_ZN6S842C53v11Ev,
  (VTBL_ENTRY)&_ZN6S842C53v12Ev,
  (VTBL_ENTRY)&_ZN6S842C43v14Ev,
  (VTBL_ENTRY)&_ZN6S842C43v15Ev,
  (VTBL_ENTRY)&_ZN6S842C43v16Ev,
  (VTBL_ENTRY)&_ZN6S842C43v17Ev,
  (VTBL_ENTRY)&_ZN6S842C43v18Ev,
  (VTBL_ENTRY)&_ZN6S842C43v19Ev,
  (VTBL_ENTRY)&_ZN6S842C43v20Ev,
  (VTBL_ENTRY)&_ZN6S842C43v21Ev,
  (VTBL_ENTRY)&_ZN6S842C43v22Ev,
  (VTBL_ENTRY)&_ZN6S842C43v23Ev,
  (VTBL_ENTRY)&_ZN6S842C43v24Ev,
  (VTBL_ENTRY)&_ZN6S842C43v25Ev,
  (VTBL_ENTRY)&_ZN6S842C43v26Ev,
  (VTBL_ENTRY)&_ZN6S842C43v27Ev,
  (VTBL_ENTRY)&_ZN6S842C43v28Ev,
  (VTBL_ENTRY)&_ZN6S842C43v29Ev,
  (VTBL_ENTRY)&_ZN6S842C43v30Ev,
  (VTBL_ENTRY)&_ZN6S842C43v31Ev,
  (VTBL_ENTRY)&_ZN6S842C43v32Ev,
  (VTBL_ENTRY)&_ZN6S842C43v33Ev,
  (VTBL_ENTRY)&_ZN6S842C43v34Ev,
  (VTBL_ENTRY)&_ZN6S842C43v35Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S842C4D1Ev,_ZThn4_N6S842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S842C4D0Ev,_ZThn4_N6S842C4D0Ev),
  (VTBL_ENTRY)&_ZN6S842C63v13Ev,
};
extern VTBL_ENTRY _ZTI6S842C4[];
extern  VTBL_ENTRY _ZTV6S842C4[];
Class_Descriptor cd_S842C4 = {  "S842C4", // class name
  bases_S842C4, 2,
  &(vtc_S842C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S842C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S842C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S842C3  : S842C4 {
  ::S857C7_nt s842c3f0;
  ::S857C9_nt s842c3f1;
  char s842c3f2;
  virtual  ~S842C3(); // _ZN6S842C3D1Ev
  virtual void  v36(); // _ZN6S842C33v36Ev
  virtual void  v37(); // _ZN6S842C33v37Ev
  virtual void  v38(); // _ZN6S842C33v38Ev
  S842C3(); // tgen
};
//SIG(-1 S842C3) C1{ BC2{ BC3{ vd v4 v5 v6} BC4{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ FL[4]}} Fc}


 S842C3 ::~S842C3(){ note_dtor("S842C3", this);}
void  S842C3 ::v36(){vfunc_called(this, "_ZN6S842C33v36Ev");}
void  S842C3 ::v37(){vfunc_called(this, "_ZN6S842C33v37Ev");}
void  S842C3 ::v38(){vfunc_called(this, "_ZN6S842C33v38Ev");}
S842C3 ::S842C3(){ note_ctor("S842C3", this);} // tgen

static void Test_S842C3()
{
  extern Class_Descriptor cd_S842C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S842C3, buf);
    S842C3 *dp, &lv = *(dp=new (buf) S842C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S842C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S842C3)");
    check_base_class_offset(lv, (S842C5*)(S842C4*), 0, "S842C3");
    check_base_class_offset(lv, (S842C6*)(S842C4*), ABISELECT(8,4), "S842C3");
    check_base_class_offset(lv, (S842C4*), 0, "S842C3");
    check_field_offset(lv, s842c3f0, ABISELECT(16,8), "S842C3.s842c3f0");
    check_field_offset(lv, s842c3f1, ABISELECT(40,24), "S842C3.s842c3f1");
    check_field_offset(lv, s842c3f2, ABISELECT(72,56), "S842C3.s842c3f2");
    test_class_info(&lv, &cd_S842C3);
    dp->~S842C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS842C3(Test_S842C3, "S842C3", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN6S842C3C1Ev();
extern void _ZN6S842C3D1Ev();
Name_Map name_map_S842C3[] = {
  NSPAIR(_ZN6S842C3C1Ev),
  NSPAIR(_ZN6S842C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S842C5;
extern VTBL_ENTRY _ZTI6S842C5[];
extern  VTBL_ENTRY _ZTV6S842C5[];
extern Class_Descriptor cd_S842C6;
extern VTBL_ENTRY _ZTI6S842C6[];
extern  VTBL_ENTRY _ZTV6S842C6[];
extern Class_Descriptor cd_S842C4;
extern VTBL_ENTRY _ZTI6S842C4[];
extern  VTBL_ENTRY _ZTV6S842C4[];
static Base_Class bases_S842C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S842C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S842C6,    ABISELECT(8,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S842C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S842C3[];
extern void _ZN6S842C3D1Ev();
extern void _ZN6S842C3D0Ev();
extern void _ZN6S842C53v10Ev();
extern void _ZN6S842C53v11Ev();
extern void _ZN6S842C53v12Ev();
extern void _ZN6S842C43v14Ev();
extern void _ZN6S842C43v15Ev();
extern void _ZN6S842C43v16Ev();
extern void _ZN6S842C43v17Ev();
extern void _ZN6S842C43v18Ev();
extern void _ZN6S842C43v19Ev();
extern void _ZN6S842C43v20Ev();
extern void _ZN6S842C43v21Ev();
extern void _ZN6S842C43v22Ev();
extern void _ZN6S842C43v23Ev();
extern void _ZN6S842C43v24Ev();
extern void _ZN6S842C43v25Ev();
extern void _ZN6S842C43v26Ev();
extern void _ZN6S842C43v27Ev();
extern void _ZN6S842C43v28Ev();
extern void _ZN6S842C43v29Ev();
extern void _ZN6S842C43v30Ev();
extern void _ZN6S842C43v31Ev();
extern void _ZN6S842C43v32Ev();
extern void _ZN6S842C43v33Ev();
extern void _ZN6S842C43v34Ev();
extern void _ZN6S842C43v35Ev();
extern void _ZN6S842C33v36Ev();
extern void _ZN6S842C33v37Ev();
extern void _ZN6S842C33v38Ev();
extern void ABISELECT(_ZThn8_N6S842C3D1Ev,_ZThn4_N6S842C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S842C3D0Ev,_ZThn4_N6S842C3D0Ev)();
extern void _ZN6S842C63v13Ev();
static  VTBL_ENTRY vtc_S842C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S842C3[0]),
  (VTBL_ENTRY)&_ZN6S842C3D1Ev,
  (VTBL_ENTRY)&_ZN6S842C3D0Ev,
  (VTBL_ENTRY)&_ZN6S842C53v10Ev,
  (VTBL_ENTRY)&_ZN6S842C53v11Ev,
  (VTBL_ENTRY)&_ZN6S842C53v12Ev,
  (VTBL_ENTRY)&_ZN6S842C43v14Ev,
  (VTBL_ENTRY)&_ZN6S842C43v15Ev,
  (VTBL_ENTRY)&_ZN6S842C43v16Ev,
  (VTBL_ENTRY)&_ZN6S842C43v17Ev,
  (VTBL_ENTRY)&_ZN6S842C43v18Ev,
  (VTBL_ENTRY)&_ZN6S842C43v19Ev,
  (VTBL_ENTRY)&_ZN6S842C43v20Ev,
  (VTBL_ENTRY)&_ZN6S842C43v21Ev,
  (VTBL_ENTRY)&_ZN6S842C43v22Ev,
  (VTBL_ENTRY)&_ZN6S842C43v23Ev,
  (VTBL_ENTRY)&_ZN6S842C43v24Ev,
  (VTBL_ENTRY)&_ZN6S842C43v25Ev,
  (VTBL_ENTRY)&_ZN6S842C43v26Ev,
  (VTBL_ENTRY)&_ZN6S842C43v27Ev,
  (VTBL_ENTRY)&_ZN6S842C43v28Ev,
  (VTBL_ENTRY)&_ZN6S842C43v29Ev,
  (VTBL_ENTRY)&_ZN6S842C43v30Ev,
  (VTBL_ENTRY)&_ZN6S842C43v31Ev,
  (VTBL_ENTRY)&_ZN6S842C43v32Ev,
  (VTBL_ENTRY)&_ZN6S842C43v33Ev,
  (VTBL_ENTRY)&_ZN6S842C43v34Ev,
  (VTBL_ENTRY)&_ZN6S842C43v35Ev,
  (VTBL_ENTRY)&_ZN6S842C33v36Ev,
  (VTBL_ENTRY)&_ZN6S842C33v37Ev,
  (VTBL_ENTRY)&_ZN6S842C33v38Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S842C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S842C3D1Ev,_ZThn4_N6S842C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S842C3D0Ev,_ZThn4_N6S842C3D0Ev),
  (VTBL_ENTRY)&_ZN6S842C63v13Ev,
};
extern VTBL_ENTRY _ZTI6S842C3[];
extern  VTBL_ENTRY _ZTV6S842C3[];
Class_Descriptor cd_S842C3 = {  "S842C3", // class name
  bases_S842C3, 3,
  &(vtc_S842C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI6S842C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S842C3),37, //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  S842C11  {
  virtual  ~S842C11(); // _ZN7S842C11D1Ev
  virtual void  v39(); // _ZN7S842C113v39Ev
  S842C11(); // tgen
};
//SIG(-1 S842C11) C1{ vd v1}


 S842C11 ::~S842C11(){ note_dtor("S842C11", this);}
void  S842C11 ::v39(){vfunc_called(this, "_ZN7S842C113v39Ev");}
S842C11 ::S842C11(){ note_ctor("S842C11", this);} // tgen

static void Test_S842C11()
{
  extern Class_Descriptor cd_S842C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S842C11, buf);
    S842C11 *dp, &lv = *(dp=new (buf) S842C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S842C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S842C11)");
    test_class_info(&lv, &cd_S842C11);
    dp->~S842C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS842C11(Test_S842C11, "S842C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S842C11C1Ev();
extern void _ZN7S842C11D1Ev();
Name_Map name_map_S842C11[] = {
  NSPAIR(_ZN7S842C11C1Ev),
  NSPAIR(_ZN7S842C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S842C11[];
extern void _ZN7S842C11D1Ev();
extern void _ZN7S842C11D0Ev();
extern void _ZN7S842C113v39Ev();
static  VTBL_ENTRY vtc_S842C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S842C11[0]),
  (VTBL_ENTRY)&_ZN7S842C11D1Ev,
  (VTBL_ENTRY)&_ZN7S842C11D0Ev,
  (VTBL_ENTRY)&_ZN7S842C113v39Ev,
};
extern VTBL_ENTRY _ZTI7S842C11[];
extern  VTBL_ENTRY _ZTV7S842C11[];
Class_Descriptor cd_S842C11 = {  "S842C11", // class name
  0,0,//no base classes
  &(vtc_S842C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S842C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S842C11),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  S842C2  : S842C3 , S842C11 {
  ::S853C12 s842c2f0;
  ::S857C13_nt s842c2f1;
  char s842c2f2[3];
  void *s842c2f3;
  ::S857C16 s842c2f4;
  void *s842c2f5;
  virtual  ~S842C2(); // _ZN6S842C2D1Ev
  virtual void  v40(); // _ZN6S842C23v40Ev
  virtual void  v41(); // _ZN6S842C23v41Ev
  virtual void  v42(); // _ZN6S842C23v42Ev
  virtual void  v43(); // _ZN6S842C23v43Ev
  virtual void  v44(); // _ZN6S842C23v44Ev
  virtual void  v45(); // _ZN6S842C23v45Ev
  virtual void  v46(); // _ZN6S842C23v46Ev
  virtual void  v47(); // _ZN6S842C23v47Ev
  virtual void  v48(); // _ZN6S842C23v48Ev
  virtual void  v49(); // _ZN6S842C23v49Ev
  virtual void  v50(); // _ZN6S842C23v50Ev
  virtual void  v51(); // _ZN6S842C23v51Ev
  virtual void  v52(); // _ZN6S842C23v52Ev
  virtual void  v53(); // _ZN6S842C23v53Ev
  virtual void  v54(); // _ZN6S842C23v54Ev
  virtual void  v55(); // _ZN6S842C23v55Ev
  virtual void  v56(); // _ZN6S842C23v56Ev
  virtual void  v57(); // _ZN6S842C23v57Ev
  virtual void  v58(); // _ZN6S842C23v58Ev
  virtual void  v59(); // _ZN6S842C23v59Ev
  virtual void  v60(); // _ZN6S842C23v60Ev
  virtual void  v61(); // _ZN6S842C23v61Ev
  virtual void  v62(); // _ZN6S842C23v62Ev
  virtual void  v63(); // _ZN6S842C23v63Ev
  virtual void  v64(); // _ZN6S842C23v64Ev
  virtual void  v65(); // _ZN6S842C23v65Ev
  virtual void  v66(); // _ZN6S842C23v66Ev
  virtual void  v67(); // _ZN6S842C23v67Ev
  virtual void  v68(); // _ZN6S842C23v68Ev
  virtual void  v69(); // _ZN6S842C23v69Ev
  virtual void  v70(); // _ZN6S842C23v70Ev
  virtual void  v71(); // _ZN6S842C23v71Ev
  virtual void  v72(); // _ZN6S842C23v72Ev
  virtual void  v73(); // _ZN6S842C23v73Ev
  virtual void  v74(); // _ZN6S842C23v74Ev
  virtual void  v75(); // _ZN6S842C23v75Ev
  virtual void  v76(); // _ZN6S842C23v76Ev
  virtual void  v77(); // _ZN6S842C23v77Ev
  virtual void  v78(); // _ZN6S842C23v78Ev
  virtual void  v79(); // _ZN6S842C23v79Ev
  virtual void  v80(); // _ZN6S842C23v80Ev
  S842C2(); // tgen
};
//SIG(-1 S842C2) C1{ BC2{ BC3{ BC4{ vd v42 v43 v44} BC5{ vd v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67} vd v68 v69 v70 FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ FL[4]}} Fc} BC10{ vd v71} 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 FC11{ m FC9} FC12{ m Fp FC8 FC13{ m Fp FC14{ Fi[4]}} Fi Fc} Fc[3] Fp FC15{ BC16{ vd v74} BC17{ vd v75} vd v72 v73 Fp[2]} Fp}


 S842C2 ::~S842C2(){ note_dtor("S842C2", this);}
void  S842C2 ::v40(){vfunc_called(this, "_ZN6S842C23v40Ev");}
void  S842C2 ::v41(){vfunc_called(this, "_ZN6S842C23v41Ev");}
void  S842C2 ::v42(){vfunc_called(this, "_ZN6S842C23v42Ev");}
void  S842C2 ::v43(){vfunc_called(this, "_ZN6S842C23v43Ev");}
void  S842C2 ::v44(){vfunc_called(this, "_ZN6S842C23v44Ev");}
void  S842C2 ::v45(){vfunc_called(this, "_ZN6S842C23v45Ev");}
void  S842C2 ::v46(){vfunc_called(this, "_ZN6S842C23v46Ev");}
void  S842C2 ::v47(){vfunc_called(this, "_ZN6S842C23v47Ev");}
void  S842C2 ::v48(){vfunc_called(this, "_ZN6S842C23v48Ev");}
void  S842C2 ::v49(){vfunc_called(this, "_ZN6S842C23v49Ev");}
void  S842C2 ::v50(){vfunc_called(this, "_ZN6S842C23v50Ev");}
void  S842C2 ::v51(){vfunc_called(this, "_ZN6S842C23v51Ev");}
void  S842C2 ::v52(){vfunc_called(this, "_ZN6S842C23v52Ev");}
void  S842C2 ::v53(){vfunc_called(this, "_ZN6S842C23v53Ev");}
void  S842C2 ::v54(){vfunc_called(this, "_ZN6S842C23v54Ev");}
void  S842C2 ::v55(){vfunc_called(this, "_ZN6S842C23v55Ev");}
void  S842C2 ::v56(){vfunc_called(this, "_ZN6S842C23v56Ev");}
void  S842C2 ::v57(){vfunc_called(this, "_ZN6S842C23v57Ev");}
void  S842C2 ::v58(){vfunc_called(this, "_ZN6S842C23v58Ev");}
void  S842C2 ::v59(){vfunc_called(this, "_ZN6S842C23v59Ev");}
void  S842C2 ::v60(){vfunc_called(this, "_ZN6S842C23v60Ev");}
void  S842C2 ::v61(){vfunc_called(this, "_ZN6S842C23v61Ev");}
void  S842C2 ::v62(){vfunc_called(this, "_ZN6S842C23v62Ev");}
void  S842C2 ::v63(){vfunc_called(this, "_ZN6S842C23v63Ev");}
void  S842C2 ::v64(){vfunc_called(this, "_ZN6S842C23v64Ev");}
void  S842C2 ::v65(){vfunc_called(this, "_ZN6S842C23v65Ev");}
void  S842C2 ::v66(){vfunc_called(this, "_ZN6S842C23v66Ev");}
void  S842C2 ::v67(){vfunc_called(this, "_ZN6S842C23v67Ev");}
void  S842C2 ::v68(){vfunc_called(this, "_ZN6S842C23v68Ev");}
void  S842C2 ::v69(){vfunc_called(this, "_ZN6S842C23v69Ev");}
void  S842C2 ::v70(){vfunc_called(this, "_ZN6S842C23v70Ev");}
void  S842C2 ::v71(){vfunc_called(this, "_ZN6S842C23v71Ev");}
void  S842C2 ::v72(){vfunc_called(this, "_ZN6S842C23v72Ev");}
void  S842C2 ::v73(){vfunc_called(this, "_ZN6S842C23v73Ev");}
void  S842C2 ::v74(){vfunc_called(this, "_ZN6S842C23v74Ev");}
void  S842C2 ::v75(){vfunc_called(this, "_ZN6S842C23v75Ev");}
void  S842C2 ::v76(){vfunc_called(this, "_ZN6S842C23v76Ev");}
void  S842C2 ::v77(){vfunc_called(this, "_ZN6S842C23v77Ev");}
void  S842C2 ::v78(){vfunc_called(this, "_ZN6S842C23v78Ev");}
void  S842C2 ::v79(){vfunc_called(this, "_ZN6S842C23v79Ev");}
void  S842C2 ::v80(){vfunc_called(this, "_ZN6S842C23v80Ev");}
S842C2 ::S842C2(){ note_ctor("S842C2", this);} // tgen

static void Test_S842C2()
{
  extern Class_Descriptor cd_S842C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,48)];
    init_test(&cd_S842C2, buf);
    S842C2 *dp, &lv = *(dp=new (buf) S842C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,188), "sizeof(S842C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S842C2)");
    check_base_class_offset(lv, (S842C5*)(S842C4*)(S842C3*), 0, "S842C2");
    check_base_class_offset(lv, (S842C6*)(S842C4*)(S842C3*), ABISELECT(8,4), "S842C2");
    check_base_class_offset(lv, (S842C4*)(S842C3*), 0, "S842C2");
    check_base_class_offset(lv, (S842C3*), 0, "S842C2");
    check_base_class_offset(lv, (S842C11*), ABISELECT(80,60), "S842C2");
    check_field_offset(lv, s842c2f0, ABISELECT(88,64), "S842C2.s842c2f0");
    check_field_offset(lv, s842c2f1, ABISELECT(120,96), "S842C2.s842c2f1");
    check_field_offset(lv, s842c2f2, ABISELECT(192,160), "S842C2.s842c2f2");
    check_field_offset(lv, s842c2f3, ABISELECT(200,164), "S842C2.s842c2f3");
    check_field_offset(lv, s842c2f4, ABISELECT(208,168), "S842C2.s842c2f4");
    check_field_offset(lv, s842c2f5, ABISELECT(240,184), "S842C2.s842c2f5");
    test_class_info(&lv, &cd_S842C2);
    dp->~S842C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS842C2(Test_S842C2, "S842C2", ABISELECT(248,188));

#else // __cplusplus

extern void _ZN6S842C2C1Ev();
extern void _ZN6S842C2D1Ev();
Name_Map name_map_S842C2[] = {
  NSPAIR(_ZN6S842C2C1Ev),
  NSPAIR(_ZN6S842C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S842C5;
extern VTBL_ENTRY _ZTI6S842C5[];
extern  VTBL_ENTRY _ZTV6S842C5[];
extern Class_Descriptor cd_S842C6;
extern VTBL_ENTRY _ZTI6S842C6[];
extern  VTBL_ENTRY _ZTV6S842C6[];
extern Class_Descriptor cd_S842C4;
extern VTBL_ENTRY _ZTI6S842C4[];
extern  VTBL_ENTRY _ZTV6S842C4[];
extern Class_Descriptor cd_S842C3;
extern VTBL_ENTRY _ZTI6S842C3[];
extern  VTBL_ENTRY _ZTV6S842C3[];
extern Class_Descriptor cd_S842C11;
extern VTBL_ENTRY _ZTI7S842C11[];
extern  VTBL_ENTRY _ZTV7S842C11[];
static Base_Class bases_S842C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S842C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S842C6,    ABISELECT(8,4), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_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_S842C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S842C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S842C11,    ABISELECT(80,60), //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},
  {0}};
extern VTBL_ENTRY _ZTI6S842C2[];
extern void _ZN6S842C2D1Ev();
extern void _ZN6S842C2D0Ev();
extern void _ZN6S842C53v10Ev();
extern void _ZN6S842C53v11Ev();
extern void _ZN6S842C53v12Ev();
extern void _ZN6S842C43v14Ev();
extern void _ZN6S842C43v15Ev();
extern void _ZN6S842C43v16Ev();
extern void _ZN6S842C43v17Ev();
extern void _ZN6S842C43v18Ev();
extern void _ZN6S842C43v19Ev();
extern void _ZN6S842C43v20Ev();
extern void _ZN6S842C43v21Ev();
extern void _ZN6S842C43v22Ev();
extern void _ZN6S842C43v23Ev();
extern void _ZN6S842C43v24Ev();
extern void _ZN6S842C43v25Ev();
extern void _ZN6S842C43v26Ev();
extern void _ZN6S842C43v27Ev();
extern void _ZN6S842C43v28Ev();
extern void _ZN6S842C43v29Ev();
extern void _ZN6S842C43v30Ev();
extern void _ZN6S842C43v31Ev();
extern void _ZN6S842C43v32Ev();
extern void _ZN6S842C43v33Ev();
extern void _ZN6S842C43v34Ev();
extern void _ZN6S842C43v35Ev();
extern void _ZN6S842C33v36Ev();
extern void _ZN6S842C33v37Ev();
extern void _ZN6S842C33v38Ev();
extern void _ZN6S842C23v40Ev();
extern void _ZN6S842C23v41Ev();
extern void _ZN6S842C23v42Ev();
extern void _ZN6S842C23v43Ev();
extern void _ZN6S842C23v44Ev();
extern void _ZN6S842C23v45Ev();
extern void _ZN6S842C23v46Ev();
extern void _ZN6S842C23v47Ev();
extern void _ZN6S842C23v48Ev();
extern void _ZN6S842C23v49Ev();
extern void _ZN6S842C23v50Ev();
extern void _ZN6S842C23v51Ev();
extern void _ZN6S842C23v52Ev();
extern void _ZN6S842C23v53Ev();
extern void _ZN6S842C23v54Ev();
extern void _ZN6S842C23v55Ev();
extern void _ZN6S842C23v56Ev();
extern void _ZN6S842C23v57Ev();
extern void _ZN6S842C23v58Ev();
extern void _ZN6S842C23v59Ev();
extern void _ZN6S842C23v60Ev();
extern void _ZN6S842C23v61Ev();
extern void _ZN6S842C23v62Ev();
extern void _ZN6S842C23v63Ev();
extern void _ZN6S842C23v64Ev();
extern void _ZN6S842C23v65Ev();
extern void _ZN6S842C23v66Ev();
extern void _ZN6S842C23v67Ev();
extern void _ZN6S842C23v68Ev();
extern void _ZN6S842C23v69Ev();
extern void _ZN6S842C23v70Ev();
extern void _ZN6S842C23v71Ev();
extern void _ZN6S842C23v72Ev();
extern void _ZN6S842C23v73Ev();
extern void _ZN6S842C23v74Ev();
extern void _ZN6S842C23v75Ev();
extern void _ZN6S842C23v76Ev();
extern void _ZN6S842C23v77Ev();
extern void _ZN6S842C23v78Ev();
extern void _ZN6S842C23v79Ev();
extern void _ZN6S842C23v80Ev();
extern void ABISELECT(_ZThn8_N6S842C2D1Ev,_ZThn4_N6S842C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S842C2D0Ev,_ZThn4_N6S842C2D0Ev)();
extern void _ZN6S842C63v13Ev();
extern void ABISELECT(_ZThn80_N6S842C2D1Ev,_ZThn60_N6S842C2D1Ev)();
extern void ABISELECT(_ZThn80_N6S842C2D0Ev,_ZThn60_N6S842C2D0Ev)();
extern void _ZN7S842C113v39Ev();
static  VTBL_ENTRY vtc_S842C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S842C2[0]),
  (VTBL_ENTRY)&_ZN6S842C2D1Ev,
  (VTBL_ENTRY)&_ZN6S842C2D0Ev,
  (VTBL_ENTRY)&_ZN6S842C53v10Ev,
  (VTBL_ENTRY)&_ZN6S842C53v11Ev,
  (VTBL_ENTRY)&_ZN6S842C53v12Ev,
  (VTBL_ENTRY)&_ZN6S842C43v14Ev,
  (VTBL_ENTRY)&_ZN6S842C43v15Ev,
  (VTBL_ENTRY)&_ZN6S842C43v16Ev,
  (VTBL_ENTRY)&_ZN6S842C43v17Ev,
  (VTBL_ENTRY)&_ZN6S842C43v18Ev,
  (VTBL_ENTRY)&_ZN6S842C43v19Ev,
  (VTBL_ENTRY)&_ZN6S842C43v20Ev,
  (VTBL_ENTRY)&_ZN6S842C43v21Ev,
  (VTBL_ENTRY)&_ZN6S842C43v22Ev,
  (VTBL_ENTRY)&_ZN6S842C43v23Ev,
  (VTBL_ENTRY)&_ZN6S842C43v24Ev,
  (VTBL_ENTRY)&_ZN6S842C43v25Ev,
  (VTBL_ENTRY)&_ZN6S842C43v26Ev,
  (VTBL_ENTRY)&_ZN6S842C43v27Ev,
  (VTBL_ENTRY)&_ZN6S842C43v28Ev,
  (VTBL_ENTRY)&_ZN6S842C43v29Ev,
  (VTBL_ENTRY)&_ZN6S842C43v30Ev,
  (VTBL_ENTRY)&_ZN6S842C43v31Ev,
  (VTBL_ENTRY)&_ZN6S842C43v32Ev,
  (VTBL_ENTRY)&_ZN6S842C43v33Ev,
  (VTBL_ENTRY)&_ZN6S842C43v34Ev,
  (VTBL_ENTRY)&_ZN6S842C43v35Ev,
  (VTBL_ENTRY)&_ZN6S842C33v36Ev,
  (VTBL_ENTRY)&_ZN6S842C33v37Ev,
  (VTBL_ENTRY)&_ZN6S842C33v38Ev,
  (VTBL_ENTRY)&_ZN6S842C23v40Ev,
  (VTBL_ENTRY)&_ZN6S842C23v41Ev,
  (VTBL_ENTRY)&_ZN6S842C23v42Ev,
  (VTBL_ENTRY)&_ZN6S842C23v43Ev,
  (VTBL_ENTRY)&_ZN6S842C23v44Ev,
  (VTBL_ENTRY)&_ZN6S842C23v45Ev,
  (VTBL_ENTRY)&_ZN6S842C23v46Ev,
  (VTBL_ENTRY)&_ZN6S842C23v47Ev,
  (VTBL_ENTRY)&_ZN6S842C23v48Ev,
  (VTBL_ENTRY)&_ZN6S842C23v49Ev,
  (VTBL_ENTRY)&_ZN6S842C23v50Ev,
  (VTBL_ENTRY)&_ZN6S842C23v51Ev,
  (VTBL_ENTRY)&_ZN6S842C23v52Ev,
  (VTBL_ENTRY)&_ZN6S842C23v53Ev,
  (VTBL_ENTRY)&_ZN6S842C23v54Ev,
  (VTBL_ENTRY)&_ZN6S842C23v55Ev,
  (VTBL_ENTRY)&_ZN6S842C23v56Ev,
  (VTBL_ENTRY)&_ZN6S842C23v57Ev,
  (VTBL_ENTRY)&_ZN6S842C23v58Ev,
  (VTBL_ENTRY)&_ZN6S842C23v59Ev,
  (VTBL_ENTRY)&_ZN6S842C23v60Ev,
  (VTBL_ENTRY)&_ZN6S842C23v61Ev,
  (VTBL_ENTRY)&_ZN6S842C23v62Ev,
  (VTBL_ENTRY)&_ZN6S842C23v63Ev,
  (VTBL_ENTRY)&_ZN6S842C23v64Ev,
  (VTBL_ENTRY)&_ZN6S842C23v65Ev,
  (VTBL_ENTRY)&_ZN6S842C23v66Ev,
  (VTBL_ENTRY)&_ZN6S842C23v67Ev,
  (VTBL_ENTRY)&_ZN6S842C23v68Ev,
  (VTBL_ENTRY)&_ZN6S842C23v69Ev,
  (VTBL_ENTRY)&_ZN6S842C23v70Ev,
  (VTBL_ENTRY)&_ZN6S842C23v71Ev,
  (VTBL_ENTRY)&_ZN6S842C23v72Ev,
  (VTBL_ENTRY)&_ZN6S842C23v73Ev,
  (VTBL_ENTRY)&_ZN6S842C23v74Ev,
  (VTBL_ENTRY)&_ZN6S842C23v75Ev,
  (VTBL_ENTRY)&_ZN6S842C23v76Ev,
  (VTBL_ENTRY)&_ZN6S842C23v77Ev,
  (VTBL_ENTRY)&_ZN6S842C23v78Ev,
  (VTBL_ENTRY)&_ZN6S842C23v79Ev,
  (VTBL_ENTRY)&_ZN6S842C23v80Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S842C2D1Ev,_ZThn4_N6S842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S842C2D0Ev,_ZThn4_N6S842C2D0Ev),
  (VTBL_ENTRY)&_ZN6S842C63v13Ev,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI6S842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S842C2D1Ev,_ZThn60_N6S842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S842C2D0Ev,_ZThn60_N6S842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S842C113v39Ev,
};
extern VTBL_ENTRY _ZTI6S842C2[];
extern  VTBL_ENTRY _ZTV6S842C2[];
Class_Descriptor cd_S842C2 = {  "S842C2", // class name
  bases_S842C2, 5,
  &(vtc_S842C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,188), // object size
  NSPAIRA(_ZTI6S842C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S842C2),83, //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  S842C1  : S842C2 {
  virtual  ~S842C1(); // _ZN6S842C1D1Ev
  virtual void  v1(); // _ZN6S842C12v1Ev
  virtual void  v2(); // _ZN6S842C12v2Ev
  virtual void  v3(); // _ZN6S842C12v3Ev
  virtual void  v4(); // _ZN6S842C12v4Ev
  virtual void  v5(); // _ZN6S842C12v5Ev
  virtual void  v6(); // _ZN6S842C12v6Ev
  virtual void  v7(); // _ZN6S842C12v7Ev
  virtual void  v8(); // _ZN6S842C12v8Ev
  virtual void  v9(); // _ZN6S842C12v9Ev
  S842C1(); // tgen
};
//SIG(1 S842C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v10 v11 v12} BC6{ vd v13} vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35} vd v36 v37 v38 FC7{ m Fp Fi[2] FC8{ m}} FC9{ m FC10{ FL[4]}} Fc} BC11{ vd v39} vd 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 FC12{ m FC10} FC13{ m Fp FC9 FC14{ m Fp FC15{ Fi[4]}} Fi Fc} Fc[3] Fp FC16{ BC17{ vd v83} BC18{ vd v84} vd v81 v82 Fp[2]} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S842C1 ::~S842C1(){ note_dtor("S842C1", this);}
void  S842C1 ::v1(){vfunc_called(this, "_ZN6S842C12v1Ev");}
void  S842C1 ::v2(){vfunc_called(this, "_ZN6S842C12v2Ev");}
void  S842C1 ::v3(){vfunc_called(this, "_ZN6S842C12v3Ev");}
void  S842C1 ::v4(){vfunc_called(this, "_ZN6S842C12v4Ev");}
void  S842C1 ::v5(){vfunc_called(this, "_ZN6S842C12v5Ev");}
void  S842C1 ::v6(){vfunc_called(this, "_ZN6S842C12v6Ev");}
void  S842C1 ::v7(){vfunc_called(this, "_ZN6S842C12v7Ev");}
void  S842C1 ::v8(){vfunc_called(this, "_ZN6S842C12v8Ev");}
void  S842C1 ::v9(){vfunc_called(this, "_ZN6S842C12v9Ev");}
S842C1 ::S842C1(){ note_ctor("S842C1", this);} // tgen

static void Test_S842C1()
{
  extern Class_Descriptor cd_S842C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,48)];
    init_test(&cd_S842C1, buf);
    S842C1 *dp, &lv = *(dp=new (buf) S842C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,188), "sizeof(S842C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S842C1)");
    check_base_class_offset(lv, (S842C5*)(S842C4*)(S842C3*)(S842C2*), 0, "S842C1");
    check_base_class_offset(lv, (S842C6*)(S842C4*)(S842C3*)(S842C2*), ABISELECT(8,4), "S842C1");
    check_base_class_offset(lv, (S842C4*)(S842C3*)(S842C2*), 0, "S842C1");
    check_base_class_offset(lv, (S842C3*)(S842C2*), 0, "S842C1");
    check_base_class_offset(lv, (S842C11*)(S842C2*), ABISELECT(80,60), "S842C1");
    check_base_class_offset(lv, (S842C2*), 0, "S842C1");
    test_class_info(&lv, &cd_S842C1);
    dp->~S842C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS842C1(Test_S842C1, "S842C1", ABISELECT(248,188));

#else // __cplusplus

extern void _ZN6S842C1C1Ev();
extern void _ZN6S842C1D1Ev();
Name_Map name_map_S842C1[] = {
  NSPAIR(_ZN6S842C1C1Ev),
  NSPAIR(_ZN6S842C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S842C5;
extern VTBL_ENTRY _ZTI6S842C5[];
extern  VTBL_ENTRY _ZTV6S842C5[];
extern Class_Descriptor cd_S842C6;
extern VTBL_ENTRY _ZTI6S842C6[];
extern  VTBL_ENTRY _ZTV6S842C6[];
extern Class_Descriptor cd_S842C4;
extern VTBL_ENTRY _ZTI6S842C4[];
extern  VTBL_ENTRY _ZTV6S842C4[];
extern Class_Descriptor cd_S842C3;
extern VTBL_ENTRY _ZTI6S842C3[];
extern  VTBL_ENTRY _ZTV6S842C3[];
extern Class_Descriptor cd_S842C11;
extern VTBL_ENTRY _ZTI7S842C11[];
extern  VTBL_ENTRY _ZTV7S842C11[];
extern Class_Descriptor cd_S842C2;
extern VTBL_ENTRY _ZTI6S842C2[];
extern  VTBL_ENTRY _ZTV6S842C2[];
static Base_Class bases_S842C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S842C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S842C6,    ABISELECT(8,4), //bcp->offset
    82, //bcp->virtual_function_table_offset
    2, //num_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_S842C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S842C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S842C11,    ABISELECT(80,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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S842C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S842C1[];
extern void _ZN6S842C1D1Ev();
extern void _ZN6S842C1D0Ev();
extern void _ZN6S842C53v10Ev();
extern void _ZN6S842C53v11Ev();
extern void _ZN6S842C53v12Ev();
extern void _ZN6S842C43v14Ev();
extern void _ZN6S842C43v15Ev();
extern void _ZN6S842C43v16Ev();
extern void _ZN6S842C43v17Ev();
extern void _ZN6S842C43v18Ev();
extern void _ZN6S842C43v19Ev();
extern void _ZN6S842C43v20Ev();
extern void _ZN6S842C43v21Ev();
extern void _ZN6S842C43v22Ev();
extern void _ZN6S842C43v23Ev();
extern void _ZN6S842C43v24Ev();
extern void _ZN6S842C43v25Ev();
extern void _ZN6S842C43v26Ev();
extern void _ZN6S842C43v27Ev();
extern void _ZN6S842C43v28Ev();
extern void _ZN6S842C43v29Ev();
extern void _ZN6S842C43v30Ev();
extern void _ZN6S842C43v31Ev();
extern void _ZN6S842C43v32Ev();
extern void _ZN6S842C43v33Ev();
extern void _ZN6S842C43v34Ev();
extern void _ZN6S842C43v35Ev();
extern void _ZN6S842C33v36Ev();
extern void _ZN6S842C33v37Ev();
extern void _ZN6S842C33v38Ev();
extern void _ZN6S842C23v40Ev();
extern void _ZN6S842C23v41Ev();
extern void _ZN6S842C23v42Ev();
extern void _ZN6S842C23v43Ev();
extern void _ZN6S842C23v44Ev();
extern void _ZN6S842C23v45Ev();
extern void _ZN6S842C23v46Ev();
extern void _ZN6S842C23v47Ev();
extern void _ZN6S842C23v48Ev();
extern void _ZN6S842C23v49Ev();
extern void _ZN6S842C23v50Ev();
extern void _ZN6S842C23v51Ev();
extern void _ZN6S842C23v52Ev();
extern void _ZN6S842C23v53Ev();
extern void _ZN6S842C23v54Ev();
extern void _ZN6S842C23v55Ev();
extern void _ZN6S842C23v56Ev();
extern void _ZN6S842C23v57Ev();
extern void _ZN6S842C23v58Ev();
extern void _ZN6S842C23v59Ev();
extern void _ZN6S842C23v60Ev();
extern void _ZN6S842C23v61Ev();
extern void _ZN6S842C23v62Ev();
extern void _ZN6S842C23v63Ev();
extern void _ZN6S842C23v64Ev();
extern void _ZN6S842C23v65Ev();
extern void _ZN6S842C23v66Ev();
extern void _ZN6S842C23v67Ev();
extern void _ZN6S842C23v68Ev();
extern void _ZN6S842C23v69Ev();
extern void _ZN6S842C23v70Ev();
extern void _ZN6S842C23v71Ev();
extern void _ZN6S842C23v72Ev();
extern void _ZN6S842C23v73Ev();
extern void _ZN6S842C23v74Ev();
extern void _ZN6S842C23v75Ev();
extern void _ZN6S842C23v76Ev();
extern void _ZN6S842C23v77Ev();
extern void _ZN6S842C23v78Ev();
extern void _ZN6S842C23v79Ev();
extern void _ZN6S842C23v80Ev();
extern void _ZN6S842C12v1Ev();
extern void _ZN6S842C12v2Ev();
extern void _ZN6S842C12v3Ev();
extern void _ZN6S842C12v4Ev();
extern void _ZN6S842C12v5Ev();
extern void _ZN6S842C12v6Ev();
extern void _ZN6S842C12v7Ev();
extern void _ZN6S842C12v8Ev();
extern void _ZN6S842C12v9Ev();
extern void ABISELECT(_ZThn8_N6S842C1D1Ev,_ZThn4_N6S842C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S842C1D0Ev,_ZThn4_N6S842C1D0Ev)();
extern void _ZN6S842C63v13Ev();
extern void ABISELECT(_ZThn80_N6S842C1D1Ev,_ZThn60_N6S842C1D1Ev)();
extern void ABISELECT(_ZThn80_N6S842C1D0Ev,_ZThn60_N6S842C1D0Ev)();
extern void _ZN7S842C113v39Ev();
static  VTBL_ENTRY vtc_S842C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S842C1[0]),
  (VTBL_ENTRY)&_ZN6S842C1D1Ev,
  (VTBL_ENTRY)&_ZN6S842C1D0Ev,
  (VTBL_ENTRY)&_ZN6S842C53v10Ev,
  (VTBL_ENTRY)&_ZN6S842C53v11Ev,
  (VTBL_ENTRY)&_ZN6S842C53v12Ev,
  (VTBL_ENTRY)&_ZN6S842C43v14Ev,
  (VTBL_ENTRY)&_ZN6S842C43v15Ev,
  (VTBL_ENTRY)&_ZN6S842C43v16Ev,
  (VTBL_ENTRY)&_ZN6S842C43v17Ev,
  (VTBL_ENTRY)&_ZN6S842C43v18Ev,
  (VTBL_ENTRY)&_ZN6S842C43v19Ev,
  (VTBL_ENTRY)&_ZN6S842C43v20Ev,
  (VTBL_ENTRY)&_ZN6S842C43v21Ev,
  (VTBL_ENTRY)&_ZN6S842C43v22Ev,
  (VTBL_ENTRY)&_ZN6S842C43v23Ev,
  (VTBL_ENTRY)&_ZN6S842C43v24Ev,
  (VTBL_ENTRY)&_ZN6S842C43v25Ev,
  (VTBL_ENTRY)&_ZN6S842C43v26Ev,
  (VTBL_ENTRY)&_ZN6S842C43v27Ev,
  (VTBL_ENTRY)&_ZN6S842C43v28Ev,
  (VTBL_ENTRY)&_ZN6S842C43v29Ev,
  (VTBL_ENTRY)&_ZN6S842C43v30Ev,
  (VTBL_ENTRY)&_ZN6S842C43v31Ev,
  (VTBL_ENTRY)&_ZN6S842C43v32Ev,
  (VTBL_ENTRY)&_ZN6S842C43v33Ev,
  (VTBL_ENTRY)&_ZN6S842C43v34Ev,
  (VTBL_ENTRY)&_ZN6S842C43v35Ev,
  (VTBL_ENTRY)&_ZN6S842C33v36Ev,
  (VTBL_ENTRY)&_ZN6S842C33v37Ev,
  (VTBL_ENTRY)&_ZN6S842C33v38Ev,
  (VTBL_ENTRY)&_ZN6S842C23v40Ev,
  (VTBL_ENTRY)&_ZN6S842C23v41Ev,
  (VTBL_ENTRY)&_ZN6S842C23v42Ev,
  (VTBL_ENTRY)&_ZN6S842C23v43Ev,
  (VTBL_ENTRY)&_ZN6S842C23v44Ev,
  (VTBL_ENTRY)&_ZN6S842C23v45Ev,
  (VTBL_ENTRY)&_ZN6S842C23v46Ev,
  (VTBL_ENTRY)&_ZN6S842C23v47Ev,
  (VTBL_ENTRY)&_ZN6S842C23v48Ev,
  (VTBL_ENTRY)&_ZN6S842C23v49Ev,
  (VTBL_ENTRY)&_ZN6S842C23v50Ev,
  (VTBL_ENTRY)&_ZN6S842C23v51Ev,
  (VTBL_ENTRY)&_ZN6S842C23v52Ev,
  (VTBL_ENTRY)&_ZN6S842C23v53Ev,
  (VTBL_ENTRY)&_ZN6S842C23v54Ev,
  (VTBL_ENTRY)&_ZN6S842C23v55Ev,
  (VTBL_ENTRY)&_ZN6S842C23v56Ev,
  (VTBL_ENTRY)&_ZN6S842C23v57Ev,
  (VTBL_ENTRY)&_ZN6S842C23v58Ev,
  (VTBL_ENTRY)&_ZN6S842C23v59Ev,
  (VTBL_ENTRY)&_ZN6S842C23v60Ev,
  (VTBL_ENTRY)&_ZN6S842C23v61Ev,
  (VTBL_ENTRY)&_ZN6S842C23v62Ev,
  (VTBL_ENTRY)&_ZN6S842C23v63Ev,
  (VTBL_ENTRY)&_ZN6S842C23v64Ev,
  (VTBL_ENTRY)&_ZN6S842C23v65Ev,
  (VTBL_ENTRY)&_ZN6S842C23v66Ev,
  (VTBL_ENTRY)&_ZN6S842C23v67Ev,
  (VTBL_ENTRY)&_ZN6S842C23v68Ev,
  (VTBL_ENTRY)&_ZN6S842C23v69Ev,
  (VTBL_ENTRY)&_ZN6S842C23v70Ev,
  (VTBL_ENTRY)&_ZN6S842C23v71Ev,
  (VTBL_ENTRY)&_ZN6S842C23v72Ev,
  (VTBL_ENTRY)&_ZN6S842C23v73Ev,
  (VTBL_ENTRY)&_ZN6S842C23v74Ev,
  (VTBL_ENTRY)&_ZN6S842C23v75Ev,
  (VTBL_ENTRY)&_ZN6S842C23v76Ev,
  (VTBL_ENTRY)&_ZN6S842C23v77Ev,
  (VTBL_ENTRY)&_ZN6S842C23v78Ev,
  (VTBL_ENTRY)&_ZN6S842C23v79Ev,
  (VTBL_ENTRY)&_ZN6S842C23v80Ev,
  (VTBL_ENTRY)&_ZN6S842C12v1Ev,
  (VTBL_ENTRY)&_ZN6S842C12v2Ev,
  (VTBL_ENTRY)&_ZN6S842C12v3Ev,
  (VTBL_ENTRY)&_ZN6S842C12v4Ev,
  (VTBL_ENTRY)&_ZN6S842C12v5Ev,
  (VTBL_ENTRY)&_ZN6S842C12v6Ev,
  (VTBL_ENTRY)&_ZN6S842C12v7Ev,
  (VTBL_ENTRY)&_ZN6S842C12v8Ev,
  (VTBL_ENTRY)&_ZN6S842C12v9Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S842C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S842C1D1Ev,_ZThn4_N6S842C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S842C1D0Ev,_ZThn4_N6S842C1D0Ev),
  (VTBL_ENTRY)&_ZN6S842C63v13Ev,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI6S842C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S842C1D1Ev,_ZThn60_N6S842C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S842C1D0Ev,_ZThn60_N6S842C1D0Ev),
  (VTBL_ENTRY)&_ZN7S842C113v39Ev,
};
extern VTBL_ENTRY _ZTI6S842C1[];
extern  VTBL_ENTRY _ZTV6S842C1[];
Class_Descriptor cd_S842C1 = {  "S842C1", // class name
  bases_S842C1, 6,
  &(vtc_S842C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,188), // object size
  NSPAIRA(_ZTI6S842C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S842C1),92, //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  S5408C7_nt  {
  void  mf5408c7(); // _ZN10S5408C7_nt8mf5408c7Ev
};
//SIG(-1 S5408C7_nt) C1{ m}


void  S5408C7_nt ::mf5408c7(){}

//skip512 S5408C7_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S5408C7_nt[];
VTBL_ENTRY *P__ZTI10S5408C7_nt = _ZTI10S5408C7_nt; 
Class_Descriptor cd_S5408C7_nt = {  "S5408C7_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI10S5408C7_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  S5408C5_nt  {
  void *s5408c5f0;
  int s5408c5f1;
  ::S239C12_nt s5408c5f2;
  ::S5408C7_nt s5408c5f3;
  void  mf5408c5(); // _ZN10S5408C5_nt8mf5408c5Ev
};
//SIG(-1 S5408C5_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S5408C5_nt ::mf5408c5(){}

//skip512 S5408C5_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

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



//skip512 S5408C4_nt

#else // __cplusplus

extern Class_Descriptor cd_S5408C5_nt;
static Base_Class bases_S5408C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5408C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S5408C3_nt  {
  void *s5408c3f0;
  ::S5408C4_nt s5408c3f1;
  ::S857C9_nt s5408c3f2;
  char s5408c3f3;
  virtual  ~S5408C3_nt(); // _ZN10S5408C3_ntD1Ev
  virtual void  v8(); // _ZN10S5408C3_nt2v8Ev
  virtual void  v9(); // _ZN10S5408C3_nt2v9Ev
  virtual void  v10(); // _ZN10S5408C3_nt3v10Ev
  virtual void  v11(); // _ZN10S5408C3_nt3v11Ev
  virtual void  v12(); // _ZN10S5408C3_nt3v12Ev
  virtual void  v13(); // _ZN10S5408C3_nt3v13Ev
  virtual void  v14(); // _ZN10S5408C3_nt3v14Ev
  virtual void  v15(); // _ZN10S5408C3_nt3v15Ev
  virtual void  v16(); // _ZN10S5408C3_nt3v16Ev
  virtual void  v17(); // _ZN10S5408C3_nt3v17Ev
  virtual void  v18(); // _ZN10S5408C3_nt3v18Ev
  virtual void  v19(); // _ZN10S5408C3_nt3v19Ev
  S5408C3_nt(); // tgen
};
//SIG(-1 S5408C3_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}} FC6{ m FC7{ FL[4]}} Fc}


 S5408C3_nt ::~S5408C3_nt(){ note_dtor("S5408C3_nt", this);}
void  S5408C3_nt ::v8(){vfunc_called(this, "_ZN10S5408C3_nt2v8Ev");}
void  S5408C3_nt ::v9(){vfunc_called(this, "_ZN10S5408C3_nt2v9Ev");}
void  S5408C3_nt ::v10(){vfunc_called(this, "_ZN10S5408C3_nt3v10Ev");}
void  S5408C3_nt ::v11(){vfunc_called(this, "_ZN10S5408C3_nt3v11Ev");}
void  S5408C3_nt ::v12(){vfunc_called(this, "_ZN10S5408C3_nt3v12Ev");}
void  S5408C3_nt ::v13(){vfunc_called(this, "_ZN10S5408C3_nt3v13Ev");}
void  S5408C3_nt ::v14(){vfunc_called(this, "_ZN10S5408C3_nt3v14Ev");}
void  S5408C3_nt ::v15(){vfunc_called(this, "_ZN10S5408C3_nt3v15Ev");}
void  S5408C3_nt ::v16(){vfunc_called(this, "_ZN10S5408C3_nt3v16Ev");}
void  S5408C3_nt ::v17(){vfunc_called(this, "_ZN10S5408C3_nt3v17Ev");}
void  S5408C3_nt ::v18(){vfunc_called(this, "_ZN10S5408C3_nt3v18Ev");}
void  S5408C3_nt ::v19(){vfunc_called(this, "_ZN10S5408C3_nt3v19Ev");}
S5408C3_nt ::S5408C3_nt(){ note_ctor("S5408C3_nt", this);} // tgen

//skip512 S5408C3_nt

#else // __cplusplus

extern void _ZN10S5408C3_ntC1Ev();
extern void _ZN10S5408C3_ntD1Ev();
Name_Map name_map_S5408C3_nt[] = {
  NSPAIR(_ZN10S5408C3_ntC1Ev),
  NSPAIR(_ZN10S5408C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5408C3_nt[];
extern void _ZN10S5408C3_ntD1Ev();
extern void _ZN10S5408C3_ntD0Ev();
extern void _ZN10S5408C3_nt2v8Ev();
extern void _ZN10S5408C3_nt2v9Ev();
extern void _ZN10S5408C3_nt3v10Ev();
extern void _ZN10S5408C3_nt3v11Ev();
extern void _ZN10S5408C3_nt3v12Ev();
extern void _ZN10S5408C3_nt3v13Ev();
extern void _ZN10S5408C3_nt3v14Ev();
extern void _ZN10S5408C3_nt3v15Ev();
extern void _ZN10S5408C3_nt3v16Ev();
extern void _ZN10S5408C3_nt3v17Ev();
extern void _ZN10S5408C3_nt3v18Ev();
extern void _ZN10S5408C3_nt3v19Ev();
static  VTBL_ENTRY vtc_S5408C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5408C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S5408C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v19Ev,
};
extern VTBL_ENTRY _ZTI10S5408C3_nt[];
VTBL_ENTRY *P__ZTI10S5408C3_nt = _ZTI10S5408C3_nt; 
extern  VTBL_ENTRY _ZTV10S5408C3_nt[];
Class_Descriptor cd_S5408C3_nt = {  "S5408C3_nt", // class name
  0,0,//no base classes
  &(vtc_S5408C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI10S5408C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5408C3_nt),16, //virtual function table var
  2, // 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  S5408C2_nt  : S5408C3_nt {
  ::S857C7_nt s5408c2f0;
  virtual  ~S5408C2_nt(); // _ZN10S5408C2_ntD1Ev
  virtual void  v20(); // _ZN10S5408C2_nt3v20Ev
  virtual void  v21(); // _ZN10S5408C2_nt3v21Ev
  virtual void  v22(); // _ZN10S5408C2_nt3v22Ev
  virtual void  v23(); // _ZN10S5408C2_nt3v23Ev
  virtual void  v24(); // _ZN10S5408C2_nt3v24Ev
  virtual void  v25(); // _ZN10S5408C2_nt3v25Ev
  virtual void  v26(); // _ZN10S5408C2_nt3v26Ev
  S5408C2_nt(); // tgen
};
//SIG(-1 S5408C2_nt) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}} FC7{ m FC8{ FL[4]}} Fc} vd v1 v2 v3 v4 v5 v6 v7 FC9{ m Fp Fi[2] FC5}}


 S5408C2_nt ::~S5408C2_nt(){ note_dtor("S5408C2_nt", this);}
void  S5408C2_nt ::v20(){vfunc_called(this, "_ZN10S5408C2_nt3v20Ev");}
void  S5408C2_nt ::v21(){vfunc_called(this, "_ZN10S5408C2_nt3v21Ev");}
void  S5408C2_nt ::v22(){vfunc_called(this, "_ZN10S5408C2_nt3v22Ev");}
void  S5408C2_nt ::v23(){vfunc_called(this, "_ZN10S5408C2_nt3v23Ev");}
void  S5408C2_nt ::v24(){vfunc_called(this, "_ZN10S5408C2_nt3v24Ev");}
void  S5408C2_nt ::v25(){vfunc_called(this, "_ZN10S5408C2_nt3v25Ev");}
void  S5408C2_nt ::v26(){vfunc_called(this, "_ZN10S5408C2_nt3v26Ev");}
S5408C2_nt ::S5408C2_nt(){ note_ctor("S5408C2_nt", this);} // tgen

//skip512 S5408C2_nt

#else // __cplusplus

extern void _ZN10S5408C2_ntC1Ev();
extern void _ZN10S5408C2_ntD1Ev();
Name_Map name_map_S5408C2_nt[] = {
  NSPAIR(_ZN10S5408C2_ntC1Ev),
  NSPAIR(_ZN10S5408C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5408C3_nt;
extern VTBL_ENTRY _ZTI10S5408C3_nt[];
extern  VTBL_ENTRY _ZTV10S5408C3_nt[];
static Base_Class bases_S5408C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5408C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S5408C2_nt[];
extern void _ZN10S5408C2_ntD1Ev();
extern void _ZN10S5408C2_ntD0Ev();
extern void _ZN10S5408C3_nt2v8Ev();
extern void _ZN10S5408C3_nt2v9Ev();
extern void _ZN10S5408C3_nt3v10Ev();
extern void _ZN10S5408C3_nt3v11Ev();
extern void _ZN10S5408C3_nt3v12Ev();
extern void _ZN10S5408C3_nt3v13Ev();
extern void _ZN10S5408C3_nt3v14Ev();
extern void _ZN10S5408C3_nt3v15Ev();
extern void _ZN10S5408C3_nt3v16Ev();
extern void _ZN10S5408C3_nt3v17Ev();
extern void _ZN10S5408C3_nt3v18Ev();
extern void _ZN10S5408C3_nt3v19Ev();
extern void _ZN10S5408C2_nt3v20Ev();
extern void _ZN10S5408C2_nt3v21Ev();
extern void _ZN10S5408C2_nt3v22Ev();
extern void _ZN10S5408C2_nt3v23Ev();
extern void _ZN10S5408C2_nt3v24Ev();
extern void _ZN10S5408C2_nt3v25Ev();
extern void _ZN10S5408C2_nt3v26Ev();
static  VTBL_ENTRY vtc_S5408C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5408C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S5408C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5408C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S5408C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S5408C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S5408C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S5408C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S5408C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S5408C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S5408C2_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI10S5408C2_nt[];
VTBL_ENTRY *P__ZTI10S5408C2_nt = _ZTI10S5408C2_nt; 
extern  VTBL_ENTRY _ZTV10S5408C2_nt[];
Class_Descriptor cd_S5408C2_nt = {  "S5408C2_nt", // class name
  bases_S5408C2_nt, 1,
  &(vtc_S5408C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI10S5408C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S5408C2_nt),23, //virtual function table var
  2, // 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  S5408C14  {
  virtual  ~S5408C14(); // _ZN8S5408C14D1Ev
  virtual void  v27(); // _ZN8S5408C143v27Ev
  virtual void  v28(); // _ZN8S5408C143v28Ev
  virtual void  v29(); // _ZN8S5408C143v29Ev
  S5408C14(); // tgen
};
//SIG(-1 S5408C14) C1{ vd v1 v2 v3}


 S5408C14 ::~S5408C14(){ note_dtor("S5408C14", this);}
void  S5408C14 ::v27(){vfunc_called(this, "_ZN8S5408C143v27Ev");}
void  S5408C14 ::v28(){vfunc_called(this, "_ZN8S5408C143v28Ev");}
void  S5408C14 ::v29(){vfunc_called(this, "_ZN8S5408C143v29Ev");}
S5408C14 ::S5408C14(){ note_ctor("S5408C14", this);} // tgen

static void Test_S5408C14()
{
  extern Class_Descriptor cd_S5408C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5408C14, buf);
    S5408C14 *dp, &lv = *(dp=new (buf) S5408C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5408C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5408C14)");
    test_class_info(&lv, &cd_S5408C14);
    dp->~S5408C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5408C14(Test_S5408C14, "S5408C14", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S5408C14C1Ev();
extern void _ZN8S5408C14D1Ev();
Name_Map name_map_S5408C14[] = {
  NSPAIR(_ZN8S5408C14C1Ev),
  NSPAIR(_ZN8S5408C14D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S5408C14[];
extern void _ZN8S5408C14D1Ev();
extern void _ZN8S5408C14D0Ev();
extern void _ZN8S5408C143v27Ev();
extern void _ZN8S5408C143v28Ev();
extern void _ZN8S5408C143v29Ev();
static  VTBL_ENTRY vtc_S5408C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S5408C14[0]),
  (VTBL_ENTRY)&_ZN8S5408C14D1Ev,
  (VTBL_ENTRY)&_ZN8S5408C14D0Ev,
  (VTBL_ENTRY)&_ZN8S5408C143v27Ev,
  (VTBL_ENTRY)&_ZN8S5408C143v28Ev,
  (VTBL_ENTRY)&_ZN8S5408C143v29Ev,
};
extern VTBL_ENTRY _ZTI8S5408C14[];
extern  VTBL_ENTRY _ZTV8S5408C14[];
Class_Descriptor cd_S5408C14 = {  "S5408C14", // class name
  0,0,//no base classes
  &(vtc_S5408C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S5408C14),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S5408C14),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  S5408C13_nt  : S5408C14 {
  virtual  ~S5408C13_nt(); // _ZN11S5408C13_ntD1Ev
  virtual void  v30(); // _ZN11S5408C13_nt3v30Ev
  virtual void  v31(); // _ZN11S5408C13_nt3v31Ev
  virtual void  v32(); // _ZN11S5408C13_nt3v32Ev
  virtual void  v33(); // _ZN11S5408C13_nt3v33Ev
  S5408C13_nt(); // tgen
};
//SIG(-1 S5408C13_nt) C1{ BC2{ vd v5 v6 v7} vd v1 v2 v3 v4}


 S5408C13_nt ::~S5408C13_nt(){ note_dtor("S5408C13_nt", this);}
void  S5408C13_nt ::v30(){vfunc_called(this, "_ZN11S5408C13_nt3v30Ev");}
void  S5408C13_nt ::v31(){vfunc_called(this, "_ZN11S5408C13_nt3v31Ev");}
void  S5408C13_nt ::v32(){vfunc_called(this, "_ZN11S5408C13_nt3v32Ev");}
void  S5408C13_nt ::v33(){vfunc_called(this, "_ZN11S5408C13_nt3v33Ev");}
S5408C13_nt ::S5408C13_nt(){ note_ctor("S5408C13_nt", this);} // tgen

//skip512 S5408C13_nt

#else // __cplusplus

extern void _ZN11S5408C13_ntC1Ev();
extern void _ZN11S5408C13_ntD1Ev();
Name_Map name_map_S5408C13_nt[] = {
  NSPAIR(_ZN11S5408C13_ntC1Ev),
  NSPAIR(_ZN11S5408C13_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5408C14;
extern VTBL_ENTRY _ZTI8S5408C14[];
extern  VTBL_ENTRY _ZTV8S5408C14[];
static Base_Class bases_S5408C13_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5408C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S5408C13_nt[];
extern void _ZN11S5408C13_ntD1Ev();
extern void _ZN11S5408C13_ntD0Ev();
extern void _ZN8S5408C143v27Ev();
extern void _ZN8S5408C143v28Ev();
extern void _ZN8S5408C143v29Ev();
extern void _ZN11S5408C13_nt3v30Ev();
extern void _ZN11S5408C13_nt3v31Ev();
extern void _ZN11S5408C13_nt3v32Ev();
extern void _ZN11S5408C13_nt3v33Ev();
static  VTBL_ENTRY vtc_S5408C13_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S5408C13_nt[0]),
  (VTBL_ENTRY)&_ZN11S5408C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S5408C13_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S5408C143v27Ev,
  (VTBL_ENTRY)&_ZN8S5408C143v28Ev,
  (VTBL_ENTRY)&_ZN8S5408C143v29Ev,
  (VTBL_ENTRY)&_ZN11S5408C13_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S5408C13_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S5408C13_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S5408C13_nt3v33Ev,
};
extern VTBL_ENTRY _ZTI11S5408C13_nt[];
VTBL_ENTRY *P__ZTI11S5408C13_nt = _ZTI11S5408C13_nt; 
extern  VTBL_ENTRY _ZTV11S5408C13_nt[];
Class_Descriptor cd_S5408C13_nt = {  "S5408C13_nt", // class name
  bases_S5408C13_nt, 1,
  &(vtc_S5408C13_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S5408C13_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV11S5408C13_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5408C15_nt  {
  void *s5408c15f0;
  int s5408c15f1[2];
  ::S5408C7_nt s5408c15f2;
  void  mf5408c15(); // _ZN11S5408C15_nt9mf5408c15Ev
};
//SIG(-1 S5408C15_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S5408C15_nt ::mf5408c15(){}

//skip512 S5408C15_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S5408C12_nt  : S5408C13_nt {
  ::S5408C15_nt s5408c12f0;
  ::S853C12 s5408c12f1;
  char s5408c12f2;
  virtual  ~S5408C12_nt(); // _ZN11S5408C12_ntD1Ev
  virtual void  v34(); // _ZN11S5408C12_nt3v34Ev
  virtual void  v35(); // _ZN11S5408C12_nt3v35Ev
  virtual void  v36(); // _ZN11S5408C12_nt3v36Ev
  S5408C12_nt(); // tgen
};
//SIG(-1 S5408C12_nt) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ FL[4]}} Fc}


 S5408C12_nt ::~S5408C12_nt(){ note_dtor("S5408C12_nt", this);}
void  S5408C12_nt ::v34(){vfunc_called(this, "_ZN11S5408C12_nt3v34Ev");}
void  S5408C12_nt ::v35(){vfunc_called(this, "_ZN11S5408C12_nt3v35Ev");}
void  S5408C12_nt ::v36(){vfunc_called(this, "_ZN11S5408C12_nt3v36Ev");}
S5408C12_nt ::S5408C12_nt(){ note_ctor("S5408C12_nt", this);} // tgen

//skip512 S5408C12_nt

#else // __cplusplus

extern void _ZN11S5408C12_ntC1Ev();
extern void _ZN11S5408C12_ntD1Ev();
Name_Map name_map_S5408C12_nt[] = {
  NSPAIR(_ZN11S5408C12_ntC1Ev),
  NSPAIR(_ZN11S5408C12_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5408C14;
extern VTBL_ENTRY _ZTI8S5408C14[];
extern  VTBL_ENTRY _ZTV8S5408C14[];
extern Class_Descriptor cd_S5408C13_nt;
extern VTBL_ENTRY _ZTI11S5408C13_nt[];
extern  VTBL_ENTRY _ZTV11S5408C13_nt[];
static Base_Class bases_S5408C12_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5408C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5408C13_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI11S5408C12_nt[];
extern void _ZN11S5408C12_ntD1Ev();
extern void _ZN11S5408C12_ntD0Ev();
extern void _ZN8S5408C143v27Ev();
extern void _ZN8S5408C143v28Ev();
extern void _ZN8S5408C143v29Ev();
extern void _ZN11S5408C13_nt3v30Ev();
extern void _ZN11S5408C13_nt3v31Ev();
extern void _ZN11S5408C13_nt3v32Ev();
extern void _ZN11S5408C13_nt3v33Ev();
extern void _ZN11S5408C12_nt3v34Ev();
extern void _ZN11S5408C12_nt3v35Ev();
extern void _ZN11S5408C12_nt3v36Ev();
static  VTBL_ENTRY vtc_S5408C12_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S5408C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S5408C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S5408C12_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S5408C143v27Ev,
  (VTBL_ENTRY)&_ZN8S5408C143v28Ev,
  (VTBL_ENTRY)&_ZN8S5408C143v29Ev,
  (VTBL_ENTRY)&_ZN11S5408C13_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S5408C13_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S5408C13_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S5408C13_nt3v33Ev,
  (VTBL_ENTRY)&_ZN11S5408C12_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S5408C12_nt3v35Ev,
  (VTBL_ENTRY)&_ZN11S5408C12_nt3v36Ev,
};
extern VTBL_ENTRY _ZTI11S5408C12_nt[];
VTBL_ENTRY *P__ZTI11S5408C12_nt = _ZTI11S5408C12_nt; 
extern  VTBL_ENTRY _ZTV11S5408C12_nt[];
Class_Descriptor cd_S5408C12_nt = {  "S5408C12_nt", // class name
  bases_S5408C12_nt, 2,
  &(vtc_S5408C12_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI11S5408C12_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV11S5408C12_nt),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5408C19_nt  {
};
//SIG(-1 S5408C19_nt) C1{}



//skip512 S5408C19_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S5408C18_nt  : S5408C19_nt {
};
//SIG(-1 S5408C18_nt) C1{ BC2{}}



//skip512 S5408C18_nt

#else // __cplusplus

extern Class_Descriptor cd_S5408C19_nt;
static Base_Class bases_S5408C18_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5408C19_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S5408C1  : S5408C2_nt , S5408C12_nt {
  ::S5408C18_nt s5408c1f0;
  ::S857C9_nt s5408c1f1;
  ::S857C13_nt s5408c1f2;
  int s5408c1f3;
  virtual  ~S5408C1(); // _ZN7S5408C1D1Ev
  virtual void  v1(); // _ZN7S5408C12v1Ev
  virtual void  v2(); // _ZN7S5408C12v2Ev
  virtual void  v3(); // _ZN7S5408C12v3Ev
  virtual void  v4(); // _ZN7S5408C12v4Ev
  virtual void  v5(); // _ZN7S5408C12v5Ev
  virtual void  v6(); // _ZN7S5408C12v6Ev
  virtual void  v7(); // _ZN7S5408C12v7Ev
  S5408C1(); // tgen
};
//SIG(1 S5408C1) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC8{ m FC9{ FL[4]}} Fc} vd v20 v21 v22 v23 v24 v25 v26 FC10{ m Fp Fi[2] FC6}} BC11{ BC12{ BC13{ vd v27 v28 v29} vd v30 v31 v32 v33} vd v34 v35 v36 FC14{ m Fp Fi[2] FC7} FC15{ m FC9} Fc} vd v1 v2 v3 v4 v5 v6 v7 FC16{ BC17{}} FC8 FC18{ m Fp FC8 FC19{ m Fp FC20{ Fi[4]}} Fi Fc} Fi}


 S5408C1 ::~S5408C1(){ note_dtor("S5408C1", this);}
void  S5408C1 ::v1(){vfunc_called(this, "_ZN7S5408C12v1Ev");}
void  S5408C1 ::v2(){vfunc_called(this, "_ZN7S5408C12v2Ev");}
void  S5408C1 ::v3(){vfunc_called(this, "_ZN7S5408C12v3Ev");}
void  S5408C1 ::v4(){vfunc_called(this, "_ZN7S5408C12v4Ev");}
void  S5408C1 ::v5(){vfunc_called(this, "_ZN7S5408C12v5Ev");}
void  S5408C1 ::v6(){vfunc_called(this, "_ZN7S5408C12v6Ev");}
void  S5408C1 ::v7(){vfunc_called(this, "_ZN7S5408C12v7Ev");}
S5408C1 ::S5408C1(){ note_ctor("S5408C1", this);} // tgen

static void Test_S5408C1()
{
  extern Class_Descriptor cd_S5408C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,58)];
    init_test(&cd_S5408C1, buf);
    S5408C1 *dp, &lv = *(dp=new (buf) S5408C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,228), "sizeof(S5408C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5408C1)");
    check_base_class_offset(lv, (S5408C3_nt*)(S5408C2_nt*), 0, "S5408C1");
    check_base_class_offset(lv, (S5408C2_nt*), 0, "S5408C1");
    check_base_class_offset(lv, (S5408C14*)(S5408C13_nt*)(S5408C12_nt*), ABISELECT(96,72), "S5408C1");
    check_base_class_offset(lv, (S5408C13_nt*)(S5408C12_nt*), ABISELECT(96,72), "S5408C1");
    check_base_class_offset(lv, (S5408C12_nt*), ABISELECT(96,72), "S5408C1");
    check_field_offset(lv, s5408c1f0, ABISELECT(161,125), "S5408C1.s5408c1f0");
    check_field_offset(lv, s5408c1f1, ABISELECT(168,128), "S5408C1.s5408c1f1");
    check_field_offset(lv, s5408c1f2, ABISELECT(200,160), "S5408C1.s5408c1f2");
    check_field_offset(lv, s5408c1f3, ABISELECT(272,224), "S5408C1.s5408c1f3");
    test_class_info(&lv, &cd_S5408C1);
    dp->~S5408C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5408C1(Test_S5408C1, "S5408C1", ABISELECT(280,228));

#else // __cplusplus

extern void _ZN7S5408C1C1Ev();
extern void _ZN7S5408C1D1Ev();
Name_Map name_map_S5408C1[] = {
  NSPAIR(_ZN7S5408C1C1Ev),
  NSPAIR(_ZN7S5408C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5408C3_nt;
extern VTBL_ENTRY _ZTI10S5408C3_nt[];
extern  VTBL_ENTRY _ZTV10S5408C3_nt[];
extern Class_Descriptor cd_S5408C2_nt;
extern VTBL_ENTRY _ZTI10S5408C2_nt[];
extern  VTBL_ENTRY _ZTV10S5408C2_nt[];
extern Class_Descriptor cd_S5408C14;
extern VTBL_ENTRY _ZTI8S5408C14[];
extern  VTBL_ENTRY _ZTV8S5408C14[];
extern Class_Descriptor cd_S5408C13_nt;
extern VTBL_ENTRY _ZTI11S5408C13_nt[];
extern  VTBL_ENTRY _ZTV11S5408C13_nt[];
extern Class_Descriptor cd_S5408C12_nt;
extern VTBL_ENTRY _ZTI11S5408C12_nt[];
extern  VTBL_ENTRY _ZTV11S5408C12_nt[];
static Base_Class bases_S5408C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5408C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5408C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5408C14,    ABISELECT(96,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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5408C13_nt,    ABISELECT(96,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5408C12_nt,    ABISELECT(96,72), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5408C1[];
extern void _ZN7S5408C1D1Ev();
extern void _ZN7S5408C1D0Ev();
extern void _ZN10S5408C3_nt2v8Ev();
extern void _ZN10S5408C3_nt2v9Ev();
extern void _ZN10S5408C3_nt3v10Ev();
extern void _ZN10S5408C3_nt3v11Ev();
extern void _ZN10S5408C3_nt3v12Ev();
extern void _ZN10S5408C3_nt3v13Ev();
extern void _ZN10S5408C3_nt3v14Ev();
extern void _ZN10S5408C3_nt3v15Ev();
extern void _ZN10S5408C3_nt3v16Ev();
extern void _ZN10S5408C3_nt3v17Ev();
extern void _ZN10S5408C3_nt3v18Ev();
extern void _ZN10S5408C3_nt3v19Ev();
extern void _ZN10S5408C2_nt3v20Ev();
extern void _ZN10S5408C2_nt3v21Ev();
extern void _ZN10S5408C2_nt3v22Ev();
extern void _ZN10S5408C2_nt3v23Ev();
extern void _ZN10S5408C2_nt3v24Ev();
extern void _ZN10S5408C2_nt3v25Ev();
extern void _ZN10S5408C2_nt3v26Ev();
extern void _ZN7S5408C12v1Ev();
extern void _ZN7S5408C12v2Ev();
extern void _ZN7S5408C12v3Ev();
extern void _ZN7S5408C12v4Ev();
extern void _ZN7S5408C12v5Ev();
extern void _ZN7S5408C12v6Ev();
extern void _ZN7S5408C12v7Ev();
extern void ABISELECT(_ZThn96_N7S5408C1D1Ev,_ZThn72_N7S5408C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S5408C1D0Ev,_ZThn72_N7S5408C1D0Ev)();
extern void _ZN8S5408C143v27Ev();
extern void _ZN8S5408C143v28Ev();
extern void _ZN8S5408C143v29Ev();
extern void _ZN11S5408C13_nt3v30Ev();
extern void _ZN11S5408C13_nt3v31Ev();
extern void _ZN11S5408C13_nt3v32Ev();
extern void _ZN11S5408C13_nt3v33Ev();
extern void _ZN11S5408C12_nt3v34Ev();
extern void _ZN11S5408C12_nt3v35Ev();
extern void _ZN11S5408C12_nt3v36Ev();
static  VTBL_ENTRY vtc_S5408C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5408C1[0]),
  (VTBL_ENTRY)&_ZN7S5408C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5408C1D0Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5408C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S5408C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S5408C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S5408C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S5408C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S5408C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S5408C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S5408C2_nt3v26Ev,
  (VTBL_ENTRY)&_ZN7S5408C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5408C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5408C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5408C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5408C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5408C12v6Ev,
  (VTBL_ENTRY)&_ZN7S5408C12v7Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S5408C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S5408C1D1Ev,_ZThn72_N7S5408C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S5408C1D0Ev,_ZThn72_N7S5408C1D0Ev),
  (VTBL_ENTRY)&_ZN8S5408C143v27Ev,
  (VTBL_ENTRY)&_ZN8S5408C143v28Ev,
  (VTBL_ENTRY)&_ZN8S5408C143v29Ev,
  (VTBL_ENTRY)&_ZN11S5408C13_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S5408C13_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S5408C13_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S5408C13_nt3v33Ev,
  (VTBL_ENTRY)&_ZN11S5408C12_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S5408C12_nt3v35Ev,
  (VTBL_ENTRY)&_ZN11S5408C12_nt3v36Ev,
};
extern VTBL_ENTRY _ZTI7S5408C1[];
extern  VTBL_ENTRY _ZTV7S5408C1[];
Class_Descriptor cd_S5408C1 = {  "S5408C1", // class name
  bases_S5408C1, 5,
  &(vtc_S5408C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,228), // object size
  NSPAIRA(_ZTI7S5408C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5408C1),44, //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  S5409C3_nt  {
  void *s5409c3f0;
  ::S5408C4_nt s5409c3f1;
  ::S856C9_nt s5409c3f2;
  char s5409c3f3;
  virtual  ~S5409C3_nt(); // _ZN10S5409C3_ntD1Ev
  virtual void  v8(); // _ZN10S5409C3_nt2v8Ev
  virtual void  v9(); // _ZN10S5409C3_nt2v9Ev
  virtual void  v10(); // _ZN10S5409C3_nt3v10Ev
  virtual void  v11(); // _ZN10S5409C3_nt3v11Ev
  virtual void  v12(); // _ZN10S5409C3_nt3v12Ev
  virtual void  v13(); // _ZN10S5409C3_nt3v13Ev
  virtual void  v14(); // _ZN10S5409C3_nt3v14Ev
  virtual void  v15(); // _ZN10S5409C3_nt3v15Ev
  virtual void  v16(); // _ZN10S5409C3_nt3v16Ev
  virtual void  v17(); // _ZN10S5409C3_nt3v17Ev
  virtual void  v18(); // _ZN10S5409C3_nt3v18Ev
  virtual void  v19(); // _ZN10S5409C3_nt3v19Ev
  S5409C3_nt(); // tgen
};
//SIG(-1 S5409C3_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}} FC6{ m FC7{ Fl[4]}} Fc}


 S5409C3_nt ::~S5409C3_nt(){ note_dtor("S5409C3_nt", this);}
void  S5409C3_nt ::v8(){vfunc_called(this, "_ZN10S5409C3_nt2v8Ev");}
void  S5409C3_nt ::v9(){vfunc_called(this, "_ZN10S5409C3_nt2v9Ev");}
void  S5409C3_nt ::v10(){vfunc_called(this, "_ZN10S5409C3_nt3v10Ev");}
void  S5409C3_nt ::v11(){vfunc_called(this, "_ZN10S5409C3_nt3v11Ev");}
void  S5409C3_nt ::v12(){vfunc_called(this, "_ZN10S5409C3_nt3v12Ev");}
void  S5409C3_nt ::v13(){vfunc_called(this, "_ZN10S5409C3_nt3v13Ev");}
void  S5409C3_nt ::v14(){vfunc_called(this, "_ZN10S5409C3_nt3v14Ev");}
void  S5409C3_nt ::v15(){vfunc_called(this, "_ZN10S5409C3_nt3v15Ev");}
void  S5409C3_nt ::v16(){vfunc_called(this, "_ZN10S5409C3_nt3v16Ev");}
void  S5409C3_nt ::v17(){vfunc_called(this, "_ZN10S5409C3_nt3v17Ev");}
void  S5409C3_nt ::v18(){vfunc_called(this, "_ZN10S5409C3_nt3v18Ev");}
void  S5409C3_nt ::v19(){vfunc_called(this, "_ZN10S5409C3_nt3v19Ev");}
S5409C3_nt ::S5409C3_nt(){ note_ctor("S5409C3_nt", this);} // tgen

//skip512 S5409C3_nt

#else // __cplusplus

extern void _ZN10S5409C3_ntC1Ev();
extern void _ZN10S5409C3_ntD1Ev();
Name_Map name_map_S5409C3_nt[] = {
  NSPAIR(_ZN10S5409C3_ntC1Ev),
  NSPAIR(_ZN10S5409C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5409C3_nt[];
extern void _ZN10S5409C3_ntD1Ev();
extern void _ZN10S5409C3_ntD0Ev();
extern void _ZN10S5409C3_nt2v8Ev();
extern void _ZN10S5409C3_nt2v9Ev();
extern void _ZN10S5409C3_nt3v10Ev();
extern void _ZN10S5409C3_nt3v11Ev();
extern void _ZN10S5409C3_nt3v12Ev();
extern void _ZN10S5409C3_nt3v13Ev();
extern void _ZN10S5409C3_nt3v14Ev();
extern void _ZN10S5409C3_nt3v15Ev();
extern void _ZN10S5409C3_nt3v16Ev();
extern void _ZN10S5409C3_nt3v17Ev();
extern void _ZN10S5409C3_nt3v18Ev();
extern void _ZN10S5409C3_nt3v19Ev();
static  VTBL_ENTRY vtc_S5409C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5409C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S5409C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v19Ev,
};
extern VTBL_ENTRY _ZTI10S5409C3_nt[];
VTBL_ENTRY *P__ZTI10S5409C3_nt = _ZTI10S5409C3_nt; 
extern  VTBL_ENTRY _ZTV10S5409C3_nt[];
Class_Descriptor cd_S5409C3_nt = {  "S5409C3_nt", // class name
  0,0,//no base classes
  &(vtc_S5409C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI10S5409C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5409C3_nt),16, //virtual function table var
  2, // 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  S5409C2_nt  : S5409C3_nt {
  ::S5408C15_nt s5409c2f0;
  virtual  ~S5409C2_nt(); // _ZN10S5409C2_ntD1Ev
  virtual void  v20(); // _ZN10S5409C2_nt3v20Ev
  virtual void  v21(); // _ZN10S5409C2_nt3v21Ev
  virtual void  v22(); // _ZN10S5409C2_nt3v22Ev
  virtual void  v23(); // _ZN10S5409C2_nt3v23Ev
  virtual void  v24(); // _ZN10S5409C2_nt3v24Ev
  virtual void  v25(); // _ZN10S5409C2_nt3v25Ev
  virtual void  v26(); // _ZN10S5409C2_nt3v26Ev
  S5409C2_nt(); // tgen
};
//SIG(-1 S5409C2_nt) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}} FC7{ m FC8{ Fl[4]}} Fc} vd v1 v2 v3 v4 v5 v6 v7 FC9{ m Fp Fi[2] FC6}}


 S5409C2_nt ::~S5409C2_nt(){ note_dtor("S5409C2_nt", this);}
void  S5409C2_nt ::v20(){vfunc_called(this, "_ZN10S5409C2_nt3v20Ev");}
void  S5409C2_nt ::v21(){vfunc_called(this, "_ZN10S5409C2_nt3v21Ev");}
void  S5409C2_nt ::v22(){vfunc_called(this, "_ZN10S5409C2_nt3v22Ev");}
void  S5409C2_nt ::v23(){vfunc_called(this, "_ZN10S5409C2_nt3v23Ev");}
void  S5409C2_nt ::v24(){vfunc_called(this, "_ZN10S5409C2_nt3v24Ev");}
void  S5409C2_nt ::v25(){vfunc_called(this, "_ZN10S5409C2_nt3v25Ev");}
void  S5409C2_nt ::v26(){vfunc_called(this, "_ZN10S5409C2_nt3v26Ev");}
S5409C2_nt ::S5409C2_nt(){ note_ctor("S5409C2_nt", this);} // tgen

//skip512 S5409C2_nt

#else // __cplusplus

extern void _ZN10S5409C2_ntC1Ev();
extern void _ZN10S5409C2_ntD1Ev();
Name_Map name_map_S5409C2_nt[] = {
  NSPAIR(_ZN10S5409C2_ntC1Ev),
  NSPAIR(_ZN10S5409C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5409C3_nt;
extern VTBL_ENTRY _ZTI10S5409C3_nt[];
extern  VTBL_ENTRY _ZTV10S5409C3_nt[];
static Base_Class bases_S5409C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5409C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S5409C2_nt[];
extern void _ZN10S5409C2_ntD1Ev();
extern void _ZN10S5409C2_ntD0Ev();
extern void _ZN10S5409C3_nt2v8Ev();
extern void _ZN10S5409C3_nt2v9Ev();
extern void _ZN10S5409C3_nt3v10Ev();
extern void _ZN10S5409C3_nt3v11Ev();
extern void _ZN10S5409C3_nt3v12Ev();
extern void _ZN10S5409C3_nt3v13Ev();
extern void _ZN10S5409C3_nt3v14Ev();
extern void _ZN10S5409C3_nt3v15Ev();
extern void _ZN10S5409C3_nt3v16Ev();
extern void _ZN10S5409C3_nt3v17Ev();
extern void _ZN10S5409C3_nt3v18Ev();
extern void _ZN10S5409C3_nt3v19Ev();
extern void _ZN10S5409C2_nt3v20Ev();
extern void _ZN10S5409C2_nt3v21Ev();
extern void _ZN10S5409C2_nt3v22Ev();
extern void _ZN10S5409C2_nt3v23Ev();
extern void _ZN10S5409C2_nt3v24Ev();
extern void _ZN10S5409C2_nt3v25Ev();
extern void _ZN10S5409C2_nt3v26Ev();
static  VTBL_ENTRY vtc_S5409C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5409C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S5409C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5409C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S5409C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S5409C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S5409C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S5409C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S5409C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S5409C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S5409C2_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI10S5409C2_nt[];
VTBL_ENTRY *P__ZTI10S5409C2_nt = _ZTI10S5409C2_nt; 
extern  VTBL_ENTRY _ZTV10S5409C2_nt[];
Class_Descriptor cd_S5409C2_nt = {  "S5409C2_nt", // class name
  bases_S5409C2_nt, 1,
  &(vtc_S5409C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI10S5409C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S5409C2_nt),23, //virtual function table var
  2, // 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  S5409C14  {
  virtual  ~S5409C14(); // _ZN8S5409C14D1Ev
  virtual void  v27(); // _ZN8S5409C143v27Ev
  virtual void  v28(); // _ZN8S5409C143v28Ev
  virtual void  v29(); // _ZN8S5409C143v29Ev
  S5409C14(); // tgen
};
//SIG(-1 S5409C14) C1{ vd v1 v2 v3}


 S5409C14 ::~S5409C14(){ note_dtor("S5409C14", this);}
void  S5409C14 ::v27(){vfunc_called(this, "_ZN8S5409C143v27Ev");}
void  S5409C14 ::v28(){vfunc_called(this, "_ZN8S5409C143v28Ev");}
void  S5409C14 ::v29(){vfunc_called(this, "_ZN8S5409C143v29Ev");}
S5409C14 ::S5409C14(){ note_ctor("S5409C14", this);} // tgen

static void Test_S5409C14()
{
  extern Class_Descriptor cd_S5409C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5409C14, buf);
    S5409C14 *dp, &lv = *(dp=new (buf) S5409C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5409C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5409C14)");
    test_class_info(&lv, &cd_S5409C14);
    dp->~S5409C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5409C14(Test_S5409C14, "S5409C14", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S5409C14C1Ev();
extern void _ZN8S5409C14D1Ev();
Name_Map name_map_S5409C14[] = {
  NSPAIR(_ZN8S5409C14C1Ev),
  NSPAIR(_ZN8S5409C14D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S5409C14[];
extern void _ZN8S5409C14D1Ev();
extern void _ZN8S5409C14D0Ev();
extern void _ZN8S5409C143v27Ev();
extern void _ZN8S5409C143v28Ev();
extern void _ZN8S5409C143v29Ev();
static  VTBL_ENTRY vtc_S5409C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S5409C14[0]),
  (VTBL_ENTRY)&_ZN8S5409C14D1Ev,
  (VTBL_ENTRY)&_ZN8S5409C14D0Ev,
  (VTBL_ENTRY)&_ZN8S5409C143v27Ev,
  (VTBL_ENTRY)&_ZN8S5409C143v28Ev,
  (VTBL_ENTRY)&_ZN8S5409C143v29Ev,
};
extern VTBL_ENTRY _ZTI8S5409C14[];
extern  VTBL_ENTRY _ZTV8S5409C14[];
Class_Descriptor cd_S5409C14 = {  "S5409C14", // class name
  0,0,//no base classes
  &(vtc_S5409C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S5409C14),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S5409C14),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  S5409C13  : S5409C14 {
  virtual  ~S5409C13(); // _ZN8S5409C13D1Ev
  virtual void  v30(); // _ZN8S5409C133v30Ev
  virtual void  v31(); // _ZN8S5409C133v31Ev
  virtual void  v32(); // _ZN8S5409C133v32Ev
  virtual void  v33(); // _ZN8S5409C133v33Ev
  S5409C13(); // tgen
};
//SIG(-1 S5409C13) C1{ BC2{ vd v5 v6 v7} vd v1 v2 v3 v4}


 S5409C13 ::~S5409C13(){ note_dtor("S5409C13", this);}
void  S5409C13 ::v30(){vfunc_called(this, "_ZN8S5409C133v30Ev");}
void  S5409C13 ::v31(){vfunc_called(this, "_ZN8S5409C133v31Ev");}
void  S5409C13 ::v32(){vfunc_called(this, "_ZN8S5409C133v32Ev");}
void  S5409C13 ::v33(){vfunc_called(this, "_ZN8S5409C133v33Ev");}
S5409C13 ::S5409C13(){ note_ctor("S5409C13", this);} // tgen

static void Test_S5409C13()
{
  extern Class_Descriptor cd_S5409C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5409C13, buf);
    S5409C13 *dp, &lv = *(dp=new (buf) S5409C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5409C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5409C13)");
    check_base_class_offset(lv, (S5409C14*), 0, "S5409C13");
    test_class_info(&lv, &cd_S5409C13);
    dp->~S5409C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5409C13(Test_S5409C13, "S5409C13", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S5409C13C1Ev();
extern void _ZN8S5409C13D1Ev();
Name_Map name_map_S5409C13[] = {
  NSPAIR(_ZN8S5409C13C1Ev),
  NSPAIR(_ZN8S5409C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5409C14;
extern VTBL_ENTRY _ZTI8S5409C14[];
extern  VTBL_ENTRY _ZTV8S5409C14[];
static Base_Class bases_S5409C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5409C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S5409C13[];
extern void _ZN8S5409C13D1Ev();
extern void _ZN8S5409C13D0Ev();
extern void _ZN8S5409C143v27Ev();
extern void _ZN8S5409C143v28Ev();
extern void _ZN8S5409C143v29Ev();
extern void _ZN8S5409C133v30Ev();
extern void _ZN8S5409C133v31Ev();
extern void _ZN8S5409C133v32Ev();
extern void _ZN8S5409C133v33Ev();
static  VTBL_ENTRY vtc_S5409C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S5409C13[0]),
  (VTBL_ENTRY)&_ZN8S5409C13D1Ev,
  (VTBL_ENTRY)&_ZN8S5409C13D0Ev,
  (VTBL_ENTRY)&_ZN8S5409C143v27Ev,
  (VTBL_ENTRY)&_ZN8S5409C143v28Ev,
  (VTBL_ENTRY)&_ZN8S5409C143v29Ev,
  (VTBL_ENTRY)&_ZN8S5409C133v30Ev,
  (VTBL_ENTRY)&_ZN8S5409C133v31Ev,
  (VTBL_ENTRY)&_ZN8S5409C133v32Ev,
  (VTBL_ENTRY)&_ZN8S5409C133v33Ev,
};
extern VTBL_ENTRY _ZTI8S5409C13[];
extern  VTBL_ENTRY _ZTV8S5409C13[];
Class_Descriptor cd_S5409C13 = {  "S5409C13", // class name
  bases_S5409C13, 1,
  &(vtc_S5409C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S5409C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S5409C13),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5409C12_nt  : S5409C13 {
  ::S857C7_nt s5409c12f0;
  ::S852C12 s5409c12f1;
  char s5409c12f2;
  virtual  ~S5409C12_nt(); // _ZN11S5409C12_ntD1Ev
  virtual void  v34(); // _ZN11S5409C12_nt3v34Ev
  virtual void  v35(); // _ZN11S5409C12_nt3v35Ev
  virtual void  v36(); // _ZN11S5409C12_nt3v36Ev
  S5409C12_nt(); // tgen
};
//SIG(-1 S5409C12_nt) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ Fl[4]}} Fc}


 S5409C12_nt ::~S5409C12_nt(){ note_dtor("S5409C12_nt", this);}
void  S5409C12_nt ::v34(){vfunc_called(this, "_ZN11S5409C12_nt3v34Ev");}
void  S5409C12_nt ::v35(){vfunc_called(this, "_ZN11S5409C12_nt3v35Ev");}
void  S5409C12_nt ::v36(){vfunc_called(this, "_ZN11S5409C12_nt3v36Ev");}
S5409C12_nt ::S5409C12_nt(){ note_ctor("S5409C12_nt", this);} // tgen

//skip512 S5409C12_nt

#else // __cplusplus

extern void _ZN11S5409C12_ntC1Ev();
extern void _ZN11S5409C12_ntD1Ev();
Name_Map name_map_S5409C12_nt[] = {
  NSPAIR(_ZN11S5409C12_ntC1Ev),
  NSPAIR(_ZN11S5409C12_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5409C14;
extern VTBL_ENTRY _ZTI8S5409C14[];
extern  VTBL_ENTRY _ZTV8S5409C14[];
extern Class_Descriptor cd_S5409C13;
extern VTBL_ENTRY _ZTI8S5409C13[];
extern  VTBL_ENTRY _ZTV8S5409C13[];
static Base_Class bases_S5409C12_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5409C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5409C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI11S5409C12_nt[];
extern void _ZN11S5409C12_ntD1Ev();
extern void _ZN11S5409C12_ntD0Ev();
extern void _ZN8S5409C143v27Ev();
extern void _ZN8S5409C143v28Ev();
extern void _ZN8S5409C143v29Ev();
extern void _ZN8S5409C133v30Ev();
extern void _ZN8S5409C133v31Ev();
extern void _ZN8S5409C133v32Ev();
extern void _ZN8S5409C133v33Ev();
extern void _ZN11S5409C12_nt3v34Ev();
extern void _ZN11S5409C12_nt3v35Ev();
extern void _ZN11S5409C12_nt3v36Ev();
static  VTBL_ENTRY vtc_S5409C12_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S5409C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S5409C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S5409C12_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S5409C143v27Ev,
  (VTBL_ENTRY)&_ZN8S5409C143v28Ev,
  (VTBL_ENTRY)&_ZN8S5409C143v29Ev,
  (VTBL_ENTRY)&_ZN8S5409C133v30Ev,
  (VTBL_ENTRY)&_ZN8S5409C133v31Ev,
  (VTBL_ENTRY)&_ZN8S5409C133v32Ev,
  (VTBL_ENTRY)&_ZN8S5409C133v33Ev,
  (VTBL_ENTRY)&_ZN11S5409C12_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S5409C12_nt3v35Ev,
  (VTBL_ENTRY)&_ZN11S5409C12_nt3v36Ev,
};
extern VTBL_ENTRY _ZTI11S5409C12_nt[];
VTBL_ENTRY *P__ZTI11S5409C12_nt = _ZTI11S5409C12_nt; 
extern  VTBL_ENTRY _ZTV11S5409C12_nt[];
Class_Descriptor cd_S5409C12_nt = {  "S5409C12_nt", // class name
  bases_S5409C12_nt, 2,
  &(vtc_S5409C12_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI11S5409C12_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV11S5409C12_nt),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5409C1  : S5409C2_nt , S5409C12_nt {
  ::S856C9_nt s5409c1f0;
  ::S856C13_nt s5409c1f1;
  int s5409c1f2;
  virtual  ~S5409C1(); // _ZN7S5409C1D1Ev
  virtual void  v1(); // _ZN7S5409C12v1Ev
  virtual void  v2(); // _ZN7S5409C12v2Ev
  virtual void  v3(); // _ZN7S5409C12v3Ev
  virtual void  v4(); // _ZN7S5409C12v4Ev
  virtual void  v5(); // _ZN7S5409C12v5Ev
  virtual void  v6(); // _ZN7S5409C12v6Ev
  virtual void  v7(); // _ZN7S5409C12v7Ev
  S5409C1(); // tgen
};
//SIG(1 S5409C1) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC8{ m FC9{ Fl[4]}} Fc} vd v20 v21 v22 v23 v24 v25 v26 FC10{ m Fp Fi[2] FC7}} BC11{ BC12{ BC13{ vd v27 v28 v29} vd v30 v31 v32 v33} vd v34 v35 v36 FC14{ m Fp Fi[2] FC6} FC15{ m FC9} Fc} vd v1 v2 v3 v4 v5 v6 v7 FC8 FC16{ m Fp FC8 FC17{ m Fp FC18{ Fi[4]}} Fi Fc} Fi}


 S5409C1 ::~S5409C1(){ note_dtor("S5409C1", this);}
void  S5409C1 ::v1(){vfunc_called(this, "_ZN7S5409C12v1Ev");}
void  S5409C1 ::v2(){vfunc_called(this, "_ZN7S5409C12v2Ev");}
void  S5409C1 ::v3(){vfunc_called(this, "_ZN7S5409C12v3Ev");}
void  S5409C1 ::v4(){vfunc_called(this, "_ZN7S5409C12v4Ev");}
void  S5409C1 ::v5(){vfunc_called(this, "_ZN7S5409C12v5Ev");}
void  S5409C1 ::v6(){vfunc_called(this, "_ZN7S5409C12v6Ev");}
void  S5409C1 ::v7(){vfunc_called(this, "_ZN7S5409C12v7Ev");}
S5409C1 ::S5409C1(){ note_ctor("S5409C1", this);} // tgen

static void Test_S5409C1()
{
  extern Class_Descriptor cd_S5409C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,42)];
    init_test(&cd_S5409C1, buf);
    S5409C1 *dp, &lv = *(dp=new (buf) S5409C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,164), "sizeof(S5409C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5409C1)");
    check_base_class_offset(lv, (S5409C3_nt*)(S5409C2_nt*), 0, "S5409C1");
    check_base_class_offset(lv, (S5409C2_nt*), 0, "S5409C1");
    check_base_class_offset(lv, (S5409C14*)(S5409C13*)(S5409C12_nt*), ABISELECT(96,56), "S5409C1");
    check_base_class_offset(lv, (S5409C13*)(S5409C12_nt*), ABISELECT(96,56), "S5409C1");
    check_base_class_offset(lv, (S5409C12_nt*), ABISELECT(96,56), "S5409C1");
    check_field_offset(lv, s5409c1f0, ABISELECT(168,96), "S5409C1.s5409c1f0");
    check_field_offset(lv, s5409c1f1, ABISELECT(200,112), "S5409C1.s5409c1f1");
    check_field_offset(lv, s5409c1f2, ABISELECT(272,160), "S5409C1.s5409c1f2");
    test_class_info(&lv, &cd_S5409C1);
    dp->~S5409C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5409C1(Test_S5409C1, "S5409C1", ABISELECT(280,164));

#else // __cplusplus

extern void _ZN7S5409C1C1Ev();
extern void _ZN7S5409C1D1Ev();
Name_Map name_map_S5409C1[] = {
  NSPAIR(_ZN7S5409C1C1Ev),
  NSPAIR(_ZN7S5409C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5409C3_nt;
extern VTBL_ENTRY _ZTI10S5409C3_nt[];
extern  VTBL_ENTRY _ZTV10S5409C3_nt[];
extern Class_Descriptor cd_S5409C2_nt;
extern VTBL_ENTRY _ZTI10S5409C2_nt[];
extern  VTBL_ENTRY _ZTV10S5409C2_nt[];
extern Class_Descriptor cd_S5409C14;
extern VTBL_ENTRY _ZTI8S5409C14[];
extern  VTBL_ENTRY _ZTV8S5409C14[];
extern Class_Descriptor cd_S5409C13;
extern VTBL_ENTRY _ZTI8S5409C13[];
extern  VTBL_ENTRY _ZTV8S5409C13[];
extern Class_Descriptor cd_S5409C12_nt;
extern VTBL_ENTRY _ZTI11S5409C12_nt[];
extern  VTBL_ENTRY _ZTV11S5409C12_nt[];
static Base_Class bases_S5409C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5409C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5409C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5409C14,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5409C13,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5409C12_nt,    ABISELECT(96,56), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5409C1[];
extern void _ZN7S5409C1D1Ev();
extern void _ZN7S5409C1D0Ev();
extern void _ZN10S5409C3_nt2v8Ev();
extern void _ZN10S5409C3_nt2v9Ev();
extern void _ZN10S5409C3_nt3v10Ev();
extern void _ZN10S5409C3_nt3v11Ev();
extern void _ZN10S5409C3_nt3v12Ev();
extern void _ZN10S5409C3_nt3v13Ev();
extern void _ZN10S5409C3_nt3v14Ev();
extern void _ZN10S5409C3_nt3v15Ev();
extern void _ZN10S5409C3_nt3v16Ev();
extern void _ZN10S5409C3_nt3v17Ev();
extern void _ZN10S5409C3_nt3v18Ev();
extern void _ZN10S5409C3_nt3v19Ev();
extern void _ZN10S5409C2_nt3v20Ev();
extern void _ZN10S5409C2_nt3v21Ev();
extern void _ZN10S5409C2_nt3v22Ev();
extern void _ZN10S5409C2_nt3v23Ev();
extern void _ZN10S5409C2_nt3v24Ev();
extern void _ZN10S5409C2_nt3v25Ev();
extern void _ZN10S5409C2_nt3v26Ev();
extern void _ZN7S5409C12v1Ev();
extern void _ZN7S5409C12v2Ev();
extern void _ZN7S5409C12v3Ev();
extern void _ZN7S5409C12v4Ev();
extern void _ZN7S5409C12v5Ev();
extern void _ZN7S5409C12v6Ev();
extern void _ZN7S5409C12v7Ev();
extern void ABISELECT(_ZThn96_N7S5409C1D1Ev,_ZThn56_N7S5409C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S5409C1D0Ev,_ZThn56_N7S5409C1D0Ev)();
extern void _ZN8S5409C143v27Ev();
extern void _ZN8S5409C143v28Ev();
extern void _ZN8S5409C143v29Ev();
extern void _ZN8S5409C133v30Ev();
extern void _ZN8S5409C133v31Ev();
extern void _ZN8S5409C133v32Ev();
extern void _ZN8S5409C133v33Ev();
extern void _ZN11S5409C12_nt3v34Ev();
extern void _ZN11S5409C12_nt3v35Ev();
extern void _ZN11S5409C12_nt3v36Ev();
static  VTBL_ENTRY vtc_S5409C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5409C1[0]),
  (VTBL_ENTRY)&_ZN7S5409C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5409C1D0Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5409C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S5409C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S5409C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S5409C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S5409C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S5409C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S5409C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S5409C2_nt3v26Ev,
  (VTBL_ENTRY)&_ZN7S5409C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5409C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5409C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5409C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5409C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5409C12v6Ev,
  (VTBL_ENTRY)&_ZN7S5409C12v7Ev,
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S5409C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S5409C1D1Ev,_ZThn56_N7S5409C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S5409C1D0Ev,_ZThn56_N7S5409C1D0Ev),
  (VTBL_ENTRY)&_ZN8S5409C143v27Ev,
  (VTBL_ENTRY)&_ZN8S5409C143v28Ev,
  (VTBL_ENTRY)&_ZN8S5409C143v29Ev,
  (VTBL_ENTRY)&_ZN8S5409C133v30Ev,
  (VTBL_ENTRY)&_ZN8S5409C133v31Ev,
  (VTBL_ENTRY)&_ZN8S5409C133v32Ev,
  (VTBL_ENTRY)&_ZN8S5409C133v33Ev,
  (VTBL_ENTRY)&_ZN11S5409C12_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S5409C12_nt3v35Ev,
  (VTBL_ENTRY)&_ZN11S5409C12_nt3v36Ev,
};
extern VTBL_ENTRY _ZTI7S5409C1[];
extern  VTBL_ENTRY _ZTV7S5409C1[];
Class_Descriptor cd_S5409C1 = {  "S5409C1", // class name
  bases_S5409C1, 5,
  &(vtc_S5409C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,164), // object size
  NSPAIRA(_ZTI7S5409C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5409C1),44, //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  S5410C3  {
  void *s5410c3f0;
  ::S5408C4_nt s5410c3f1;
  ::S857C9_nt s5410c3f2;
  char s5410c3f3;
  virtual  ~S5410C3(); // _ZN7S5410C3D1Ev
  virtual void  v8(); // _ZN7S5410C32v8Ev
  virtual void  v9(); // _ZN7S5410C32v9Ev
  virtual void  v10(); // _ZN7S5410C33v10Ev
  virtual void  v11(); // _ZN7S5410C33v11Ev
  virtual void  v12(); // _ZN7S5410C33v12Ev
  virtual void  v13(); // _ZN7S5410C33v13Ev
  virtual void  v14(); // _ZN7S5410C33v14Ev
  virtual void  v15(); // _ZN7S5410C33v15Ev
  virtual void  v16(); // _ZN7S5410C33v16Ev
  virtual void  v17(); // _ZN7S5410C33v17Ev
  virtual void  v18(); // _ZN7S5410C33v18Ev
  virtual void  v19(); // _ZN7S5410C33v19Ev
  S5410C3(); // tgen
};
//SIG(-1 S5410C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}} FC6{ m FC7{ FL[4]}} Fc}


 S5410C3 ::~S5410C3(){ note_dtor("S5410C3", this);}
void  S5410C3 ::v8(){vfunc_called(this, "_ZN7S5410C32v8Ev");}
void  S5410C3 ::v9(){vfunc_called(this, "_ZN7S5410C32v9Ev");}
void  S5410C3 ::v10(){vfunc_called(this, "_ZN7S5410C33v10Ev");}
void  S5410C3 ::v11(){vfunc_called(this, "_ZN7S5410C33v11Ev");}
void  S5410C3 ::v12(){vfunc_called(this, "_ZN7S5410C33v12Ev");}
void  S5410C3 ::v13(){vfunc_called(this, "_ZN7S5410C33v13Ev");}
void  S5410C3 ::v14(){vfunc_called(this, "_ZN7S5410C33v14Ev");}
void  S5410C3 ::v15(){vfunc_called(this, "_ZN7S5410C33v15Ev");}
void  S5410C3 ::v16(){vfunc_called(this, "_ZN7S5410C33v16Ev");}
void  S5410C3 ::v17(){vfunc_called(this, "_ZN7S5410C33v17Ev");}
void  S5410C3 ::v18(){vfunc_called(this, "_ZN7S5410C33v18Ev");}
void  S5410C3 ::v19(){vfunc_called(this, "_ZN7S5410C33v19Ev");}
S5410C3 ::S5410C3(){ note_ctor("S5410C3", this);} // tgen

static void Test_S5410C3()
{
  extern Class_Descriptor cd_S5410C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S5410C3, buf);
    S5410C3 *dp, &lv = *(dp=new (buf) S5410C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S5410C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5410C3)");
    check_field_offset(lv, s5410c3f0, ABISELECT(8,4), "S5410C3.s5410c3f0");
    check_field_offset(lv, s5410c3f1, ABISELECT(16,8), "S5410C3.s5410c3f1");
    check_field_offset(lv, s5410c3f2, ABISELECT(32,20), "S5410C3.s5410c3f2");
    check_field_offset(lv, s5410c3f3, ABISELECT(64,52), "S5410C3.s5410c3f3");
    test_class_info(&lv, &cd_S5410C3);
    dp->~S5410C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5410C3(Test_S5410C3, "S5410C3", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S5410C3C1Ev();
extern void _ZN7S5410C3D1Ev();
Name_Map name_map_S5410C3[] = {
  NSPAIR(_ZN7S5410C3C1Ev),
  NSPAIR(_ZN7S5410C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5410C3[];
extern void _ZN7S5410C3D1Ev();
extern void _ZN7S5410C3D0Ev();
extern void _ZN7S5410C32v8Ev();
extern void _ZN7S5410C32v9Ev();
extern void _ZN7S5410C33v10Ev();
extern void _ZN7S5410C33v11Ev();
extern void _ZN7S5410C33v12Ev();
extern void _ZN7S5410C33v13Ev();
extern void _ZN7S5410C33v14Ev();
extern void _ZN7S5410C33v15Ev();
extern void _ZN7S5410C33v16Ev();
extern void _ZN7S5410C33v17Ev();
extern void _ZN7S5410C33v18Ev();
extern void _ZN7S5410C33v19Ev();
static  VTBL_ENTRY vtc_S5410C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5410C3[0]),
  (VTBL_ENTRY)&_ZN7S5410C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5410C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5410C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5410C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v15Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v16Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v17Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v18Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v19Ev,
};
extern VTBL_ENTRY _ZTI7S5410C3[];
extern  VTBL_ENTRY _ZTV7S5410C3[];
Class_Descriptor cd_S5410C3 = {  "S5410C3", // class name
  0,0,//no base classes
  &(vtc_S5410C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S5410C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5410C3),16, //virtual function table var
  2, // 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  S5410C2  : S5410C3 {
  ::S5408C15_nt s5410c2f0;
  virtual  ~S5410C2(); // _ZN7S5410C2D1Ev
  virtual void  v20(); // _ZN7S5410C23v20Ev
  virtual void  v21(); // _ZN7S5410C23v21Ev
  virtual void  v22(); // _ZN7S5410C23v22Ev
  virtual void  v23(); // _ZN7S5410C23v23Ev
  virtual void  v24(); // _ZN7S5410C23v24Ev
  virtual void  v25(); // _ZN7S5410C23v25Ev
  virtual void  v26(); // _ZN7S5410C23v26Ev
  S5410C2(); // tgen
};
//SIG(-1 S5410C2) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}} FC7{ m FC8{ FL[4]}} Fc} vd v1 v2 v3 v4 v5 v6 v7 FC9{ m Fp Fi[2] FC6}}


 S5410C2 ::~S5410C2(){ note_dtor("S5410C2", this);}
void  S5410C2 ::v20(){vfunc_called(this, "_ZN7S5410C23v20Ev");}
void  S5410C2 ::v21(){vfunc_called(this, "_ZN7S5410C23v21Ev");}
void  S5410C2 ::v22(){vfunc_called(this, "_ZN7S5410C23v22Ev");}
void  S5410C2 ::v23(){vfunc_called(this, "_ZN7S5410C23v23Ev");}
void  S5410C2 ::v24(){vfunc_called(this, "_ZN7S5410C23v24Ev");}
void  S5410C2 ::v25(){vfunc_called(this, "_ZN7S5410C23v25Ev");}
void  S5410C2 ::v26(){vfunc_called(this, "_ZN7S5410C23v26Ev");}
S5410C2 ::S5410C2(){ note_ctor("S5410C2", this);} // tgen

static void Test_S5410C2()
{
  extern Class_Descriptor cd_S5410C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S5410C2, buf);
    S5410C2 *dp, &lv = *(dp=new (buf) S5410C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S5410C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5410C2)");
    check_base_class_offset(lv, (S5410C3*), 0, "S5410C2");
    check_field_offset(lv, s5410c2f0, ABISELECT(72,56), "S5410C2.s5410c2f0");
    test_class_info(&lv, &cd_S5410C2);
    dp->~S5410C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5410C2(Test_S5410C2, "S5410C2", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S5410C2C1Ev();
extern void _ZN7S5410C2D1Ev();
Name_Map name_map_S5410C2[] = {
  NSPAIR(_ZN7S5410C2C1Ev),
  NSPAIR(_ZN7S5410C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5410C3;
extern VTBL_ENTRY _ZTI7S5410C3[];
extern  VTBL_ENTRY _ZTV7S5410C3[];
static Base_Class bases_S5410C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5410C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5410C2[];
extern void _ZN7S5410C2D1Ev();
extern void _ZN7S5410C2D0Ev();
extern void _ZN7S5410C32v8Ev();
extern void _ZN7S5410C32v9Ev();
extern void _ZN7S5410C33v10Ev();
extern void _ZN7S5410C33v11Ev();
extern void _ZN7S5410C33v12Ev();
extern void _ZN7S5410C33v13Ev();
extern void _ZN7S5410C33v14Ev();
extern void _ZN7S5410C33v15Ev();
extern void _ZN7S5410C33v16Ev();
extern void _ZN7S5410C33v17Ev();
extern void _ZN7S5410C33v18Ev();
extern void _ZN7S5410C33v19Ev();
extern void _ZN7S5410C23v20Ev();
extern void _ZN7S5410C23v21Ev();
extern void _ZN7S5410C23v22Ev();
extern void _ZN7S5410C23v23Ev();
extern void _ZN7S5410C23v24Ev();
extern void _ZN7S5410C23v25Ev();
extern void _ZN7S5410C23v26Ev();
static  VTBL_ENTRY vtc_S5410C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5410C2[0]),
  (VTBL_ENTRY)&_ZN7S5410C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5410C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5410C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5410C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v15Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v16Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v17Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v18Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v19Ev,
  (VTBL_ENTRY)&_ZN7S5410C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5410C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5410C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5410C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5410C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5410C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5410C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S5410C2[];
extern  VTBL_ENTRY _ZTV7S5410C2[];
Class_Descriptor cd_S5410C2 = {  "S5410C2", // class name
  bases_S5410C2, 1,
  &(vtc_S5410C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S5410C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5410C2),23, //virtual function table var
  2, // 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  S5410C14  {
  virtual  ~S5410C14(); // _ZN8S5410C14D1Ev
  virtual void  v27(); // _ZN8S5410C143v27Ev
  virtual void  v28(); // _ZN8S5410C143v28Ev
  virtual void  v29(); // _ZN8S5410C143v29Ev
  S5410C14(); // tgen
};
//SIG(-1 S5410C14) C1{ vd v1 v2 v3}


 S5410C14 ::~S5410C14(){ note_dtor("S5410C14", this);}
void  S5410C14 ::v27(){vfunc_called(this, "_ZN8S5410C143v27Ev");}
void  S5410C14 ::v28(){vfunc_called(this, "_ZN8S5410C143v28Ev");}
void  S5410C14 ::v29(){vfunc_called(this, "_ZN8S5410C143v29Ev");}
S5410C14 ::S5410C14(){ note_ctor("S5410C14", this);} // tgen

static void Test_S5410C14()
{
  extern Class_Descriptor cd_S5410C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5410C14, buf);
    S5410C14 *dp, &lv = *(dp=new (buf) S5410C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5410C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5410C14)");
    test_class_info(&lv, &cd_S5410C14);
    dp->~S5410C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5410C14(Test_S5410C14, "S5410C14", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S5410C14C1Ev();
extern void _ZN8S5410C14D1Ev();
Name_Map name_map_S5410C14[] = {
  NSPAIR(_ZN8S5410C14C1Ev),
  NSPAIR(_ZN8S5410C14D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S5410C14[];
extern void _ZN8S5410C14D1Ev();
extern void _ZN8S5410C14D0Ev();
extern void _ZN8S5410C143v27Ev();
extern void _ZN8S5410C143v28Ev();
extern void _ZN8S5410C143v29Ev();
static  VTBL_ENTRY vtc_S5410C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S5410C14[0]),
  (VTBL_ENTRY)&_ZN8S5410C14D1Ev,
  (VTBL_ENTRY)&_ZN8S5410C14D0Ev,
  (VTBL_ENTRY)&_ZN8S5410C143v27Ev,
  (VTBL_ENTRY)&_ZN8S5410C143v28Ev,
  (VTBL_ENTRY)&_ZN8S5410C143v29Ev,
};
extern VTBL_ENTRY _ZTI8S5410C14[];
extern  VTBL_ENTRY _ZTV8S5410C14[];
Class_Descriptor cd_S5410C14 = {  "S5410C14", // class name
  0,0,//no base classes
  &(vtc_S5410C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S5410C14),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S5410C14),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  S5410C13  : S5410C14 {
  virtual  ~S5410C13(); // _ZN8S5410C13D1Ev
  virtual void  v30(); // _ZN8S5410C133v30Ev
  virtual void  v31(); // _ZN8S5410C133v31Ev
  virtual void  v32(); // _ZN8S5410C133v32Ev
  virtual void  v33(); // _ZN8S5410C133v33Ev
  S5410C13(); // tgen
};
//SIG(-1 S5410C13) C1{ BC2{ vd v5 v6 v7} vd v1 v2 v3 v4}


 S5410C13 ::~S5410C13(){ note_dtor("S5410C13", this);}
void  S5410C13 ::v30(){vfunc_called(this, "_ZN8S5410C133v30Ev");}
void  S5410C13 ::v31(){vfunc_called(this, "_ZN8S5410C133v31Ev");}
void  S5410C13 ::v32(){vfunc_called(this, "_ZN8S5410C133v32Ev");}
void  S5410C13 ::v33(){vfunc_called(this, "_ZN8S5410C133v33Ev");}
S5410C13 ::S5410C13(){ note_ctor("S5410C13", this);} // tgen

static void Test_S5410C13()
{
  extern Class_Descriptor cd_S5410C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5410C13, buf);
    S5410C13 *dp, &lv = *(dp=new (buf) S5410C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5410C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5410C13)");
    check_base_class_offset(lv, (S5410C14*), 0, "S5410C13");
    test_class_info(&lv, &cd_S5410C13);
    dp->~S5410C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5410C13(Test_S5410C13, "S5410C13", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S5410C13C1Ev();
extern void _ZN8S5410C13D1Ev();
Name_Map name_map_S5410C13[] = {
  NSPAIR(_ZN8S5410C13C1Ev),
  NSPAIR(_ZN8S5410C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5410C14;
extern VTBL_ENTRY _ZTI8S5410C14[];
extern  VTBL_ENTRY _ZTV8S5410C14[];
static Base_Class bases_S5410C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5410C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S5410C13[];
extern void _ZN8S5410C13D1Ev();
extern void _ZN8S5410C13D0Ev();
extern void _ZN8S5410C143v27Ev();
extern void _ZN8S5410C143v28Ev();
extern void _ZN8S5410C143v29Ev();
extern void _ZN8S5410C133v30Ev();
extern void _ZN8S5410C133v31Ev();
extern void _ZN8S5410C133v32Ev();
extern void _ZN8S5410C133v33Ev();
static  VTBL_ENTRY vtc_S5410C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S5410C13[0]),
  (VTBL_ENTRY)&_ZN8S5410C13D1Ev,
  (VTBL_ENTRY)&_ZN8S5410C13D0Ev,
  (VTBL_ENTRY)&_ZN8S5410C143v27Ev,
  (VTBL_ENTRY)&_ZN8S5410C143v28Ev,
  (VTBL_ENTRY)&_ZN8S5410C143v29Ev,
  (VTBL_ENTRY)&_ZN8S5410C133v30Ev,
  (VTBL_ENTRY)&_ZN8S5410C133v31Ev,
  (VTBL_ENTRY)&_ZN8S5410C133v32Ev,
  (VTBL_ENTRY)&_ZN8S5410C133v33Ev,
};
extern VTBL_ENTRY _ZTI8S5410C13[];
extern  VTBL_ENTRY _ZTV8S5410C13[];
Class_Descriptor cd_S5410C13 = {  "S5410C13", // class name
  bases_S5410C13, 1,
  &(vtc_S5410C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S5410C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S5410C13),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5410C12  : S5410C13 {
  ::S857C7_nt s5410c12f0;
  ::S853C12 s5410c12f1;
  char s5410c12f2;
  virtual  ~S5410C12(); // _ZN8S5410C12D1Ev
  virtual void  v34(); // _ZN8S5410C123v34Ev
  virtual void  v35(); // _ZN8S5410C123v35Ev
  virtual void  v36(); // _ZN8S5410C123v36Ev
  S5410C12(); // tgen
};
//SIG(-1 S5410C12) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ FL[4]}} Fc}


 S5410C12 ::~S5410C12(){ note_dtor("S5410C12", this);}
void  S5410C12 ::v34(){vfunc_called(this, "_ZN8S5410C123v34Ev");}
void  S5410C12 ::v35(){vfunc_called(this, "_ZN8S5410C123v35Ev");}
void  S5410C12 ::v36(){vfunc_called(this, "_ZN8S5410C123v36Ev");}
S5410C12 ::S5410C12(){ note_ctor("S5410C12", this);} // tgen

static void Test_S5410C12()
{
  extern Class_Descriptor cd_S5410C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S5410C12, buf);
    S5410C12 *dp, &lv = *(dp=new (buf) S5410C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S5410C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5410C12)");
    check_base_class_offset(lv, (S5410C14*)(S5410C13*), 0, "S5410C12");
    check_base_class_offset(lv, (S5410C13*), 0, "S5410C12");
    check_field_offset(lv, s5410c12f0, ABISELECT(8,4), "S5410C12.s5410c12f0");
    check_field_offset(lv, s5410c12f1, ABISELECT(32,20), "S5410C12.s5410c12f1");
    check_field_offset(lv, s5410c12f2, ABISELECT(64,52), "S5410C12.s5410c12f2");
    test_class_info(&lv, &cd_S5410C12);
    dp->~S5410C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5410C12(Test_S5410C12, "S5410C12", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S5410C12C1Ev();
extern void _ZN8S5410C12D1Ev();
Name_Map name_map_S5410C12[] = {
  NSPAIR(_ZN8S5410C12C1Ev),
  NSPAIR(_ZN8S5410C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5410C14;
extern VTBL_ENTRY _ZTI8S5410C14[];
extern  VTBL_ENTRY _ZTV8S5410C14[];
extern Class_Descriptor cd_S5410C13;
extern VTBL_ENTRY _ZTI8S5410C13[];
extern  VTBL_ENTRY _ZTV8S5410C13[];
static Base_Class bases_S5410C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5410C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5410C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S5410C12[];
extern void _ZN8S5410C12D1Ev();
extern void _ZN8S5410C12D0Ev();
extern void _ZN8S5410C143v27Ev();
extern void _ZN8S5410C143v28Ev();
extern void _ZN8S5410C143v29Ev();
extern void _ZN8S5410C133v30Ev();
extern void _ZN8S5410C133v31Ev();
extern void _ZN8S5410C133v32Ev();
extern void _ZN8S5410C133v33Ev();
extern void _ZN8S5410C123v34Ev();
extern void _ZN8S5410C123v35Ev();
extern void _ZN8S5410C123v36Ev();
static  VTBL_ENTRY vtc_S5410C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S5410C12[0]),
  (VTBL_ENTRY)&_ZN8S5410C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5410C12D0Ev,
  (VTBL_ENTRY)&_ZN8S5410C143v27Ev,
  (VTBL_ENTRY)&_ZN8S5410C143v28Ev,
  (VTBL_ENTRY)&_ZN8S5410C143v29Ev,
  (VTBL_ENTRY)&_ZN8S5410C133v30Ev,
  (VTBL_ENTRY)&_ZN8S5410C133v31Ev,
  (VTBL_ENTRY)&_ZN8S5410C133v32Ev,
  (VTBL_ENTRY)&_ZN8S5410C133v33Ev,
  (VTBL_ENTRY)&_ZN8S5410C123v34Ev,
  (VTBL_ENTRY)&_ZN8S5410C123v35Ev,
  (VTBL_ENTRY)&_ZN8S5410C123v36Ev,
};
extern VTBL_ENTRY _ZTI8S5410C12[];
extern  VTBL_ENTRY _ZTV8S5410C12[];
Class_Descriptor cd_S5410C12 = {  "S5410C12", // class name
  bases_S5410C12, 2,
  &(vtc_S5410C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S5410C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S5410C12),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5410C1  : S5410C2 , S5410C12 {
  ::S857C9_nt s5410c1f0;
  ::S857C13_nt s5410c1f1;
  int s5410c1f2;
  virtual  ~S5410C1(); // _ZN7S5410C1D1Ev
  virtual void  v1(); // _ZN7S5410C12v1Ev
  virtual void  v2(); // _ZN7S5410C12v2Ev
  virtual void  v3(); // _ZN7S5410C12v3Ev
  virtual void  v4(); // _ZN7S5410C12v4Ev
  virtual void  v5(); // _ZN7S5410C12v5Ev
  virtual void  v6(); // _ZN7S5410C12v6Ev
  virtual void  v7(); // _ZN7S5410C12v7Ev
  S5410C1(); // tgen
};
//SIG(1 S5410C1) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC8{ m FC9{ FL[4]}} Fc} vd v20 v21 v22 v23 v24 v25 v26 FC10{ m Fp Fi[2] FC7}} BC11{ BC12{ BC13{ vd v27 v28 v29} vd v30 v31 v32 v33} vd v34 v35 v36 FC14{ m Fp Fi[2] FC6} FC15{ m FC9} Fc} vd v1 v2 v3 v4 v5 v6 v7 FC8 FC16{ m Fp FC8 FC17{ m Fp FC18{ Fi[4]}} Fi Fc} Fi}


 S5410C1 ::~S5410C1(){ note_dtor("S5410C1", this);}
void  S5410C1 ::v1(){vfunc_called(this, "_ZN7S5410C12v1Ev");}
void  S5410C1 ::v2(){vfunc_called(this, "_ZN7S5410C12v2Ev");}
void  S5410C1 ::v3(){vfunc_called(this, "_ZN7S5410C12v3Ev");}
void  S5410C1 ::v4(){vfunc_called(this, "_ZN7S5410C12v4Ev");}
void  S5410C1 ::v5(){vfunc_called(this, "_ZN7S5410C12v5Ev");}
void  S5410C1 ::v6(){vfunc_called(this, "_ZN7S5410C12v6Ev");}
void  S5410C1 ::v7(){vfunc_called(this, "_ZN7S5410C12v7Ev");}
S5410C1 ::S5410C1(){ note_ctor("S5410C1", this);} // tgen

static void Test_S5410C1()
{
  extern Class_Descriptor cd_S5410C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,58)];
    init_test(&cd_S5410C1, buf);
    S5410C1 *dp, &lv = *(dp=new (buf) S5410C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,228), "sizeof(S5410C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5410C1)");
    check_base_class_offset(lv, (S5410C3*)(S5410C2*), 0, "S5410C1");
    check_base_class_offset(lv, (S5410C2*), 0, "S5410C1");
    check_base_class_offset(lv, (S5410C14*)(S5410C13*)(S5410C12*), ABISELECT(96,72), "S5410C1");
    check_base_class_offset(lv, (S5410C13*)(S5410C12*), ABISELECT(96,72), "S5410C1");
    check_base_class_offset(lv, (S5410C12*), ABISELECT(96,72), "S5410C1");
    check_field_offset(lv, s5410c1f0, ABISELECT(168,128), "S5410C1.s5410c1f0");
    check_field_offset(lv, s5410c1f1, ABISELECT(200,160), "S5410C1.s5410c1f1");
    check_field_offset(lv, s5410c1f2, ABISELECT(272,224), "S5410C1.s5410c1f2");
    test_class_info(&lv, &cd_S5410C1);
    dp->~S5410C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5410C1(Test_S5410C1, "S5410C1", ABISELECT(280,228));

#else // __cplusplus

extern void _ZN7S5410C1C1Ev();
extern void _ZN7S5410C1D1Ev();
Name_Map name_map_S5410C1[] = {
  NSPAIR(_ZN7S5410C1C1Ev),
  NSPAIR(_ZN7S5410C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5410C3;
extern VTBL_ENTRY _ZTI7S5410C3[];
extern  VTBL_ENTRY _ZTV7S5410C3[];
extern Class_Descriptor cd_S5410C2;
extern VTBL_ENTRY _ZTI7S5410C2[];
extern  VTBL_ENTRY _ZTV7S5410C2[];
extern Class_Descriptor cd_S5410C14;
extern VTBL_ENTRY _ZTI8S5410C14[];
extern  VTBL_ENTRY _ZTV8S5410C14[];
extern Class_Descriptor cd_S5410C13;
extern VTBL_ENTRY _ZTI8S5410C13[];
extern  VTBL_ENTRY _ZTV8S5410C13[];
extern Class_Descriptor cd_S5410C12;
extern VTBL_ENTRY _ZTI8S5410C12[];
extern  VTBL_ENTRY _ZTV8S5410C12[];
static Base_Class bases_S5410C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5410C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5410C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5410C14,    ABISELECT(96,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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5410C13,    ABISELECT(96,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5410C12,    ABISELECT(96,72), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5410C1[];
extern void _ZN7S5410C1D1Ev();
extern void _ZN7S5410C1D0Ev();
extern void _ZN7S5410C32v8Ev();
extern void _ZN7S5410C32v9Ev();
extern void _ZN7S5410C33v10Ev();
extern void _ZN7S5410C33v11Ev();
extern void _ZN7S5410C33v12Ev();
extern void _ZN7S5410C33v13Ev();
extern void _ZN7S5410C33v14Ev();
extern void _ZN7S5410C33v15Ev();
extern void _ZN7S5410C33v16Ev();
extern void _ZN7S5410C33v17Ev();
extern void _ZN7S5410C33v18Ev();
extern void _ZN7S5410C33v19Ev();
extern void _ZN7S5410C23v20Ev();
extern void _ZN7S5410C23v21Ev();
extern void _ZN7S5410C23v22Ev();
extern void _ZN7S5410C23v23Ev();
extern void _ZN7S5410C23v24Ev();
extern void _ZN7S5410C23v25Ev();
extern void _ZN7S5410C23v26Ev();
extern void _ZN7S5410C12v1Ev();
extern void _ZN7S5410C12v2Ev();
extern void _ZN7S5410C12v3Ev();
extern void _ZN7S5410C12v4Ev();
extern void _ZN7S5410C12v5Ev();
extern void _ZN7S5410C12v6Ev();
extern void _ZN7S5410C12v7Ev();
extern void ABISELECT(_ZThn96_N7S5410C1D1Ev,_ZThn72_N7S5410C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S5410C1D0Ev,_ZThn72_N7S5410C1D0Ev)();
extern void _ZN8S5410C143v27Ev();
extern void _ZN8S5410C143v28Ev();
extern void _ZN8S5410C143v29Ev();
extern void _ZN8S5410C133v30Ev();
extern void _ZN8S5410C133v31Ev();
extern void _ZN8S5410C133v32Ev();
extern void _ZN8S5410C133v33Ev();
extern void _ZN8S5410C123v34Ev();
extern void _ZN8S5410C123v35Ev();
extern void _ZN8S5410C123v36Ev();
static  VTBL_ENTRY vtc_S5410C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5410C1[0]),
  (VTBL_ENTRY)&_ZN7S5410C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5410C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5410C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5410C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v15Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v16Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v17Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v18Ev,
  (VTBL_ENTRY)&_ZN7S5410C33v19Ev,
  (VTBL_ENTRY)&_ZN7S5410C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5410C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5410C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5410C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5410C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5410C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5410C23v26Ev,
  (VTBL_ENTRY)&_ZN7S5410C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5410C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5410C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5410C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5410C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5410C12v6Ev,
  (VTBL_ENTRY)&_ZN7S5410C12v7Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S5410C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S5410C1D1Ev,_ZThn72_N7S5410C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S5410C1D0Ev,_ZThn72_N7S5410C1D0Ev),
  (VTBL_ENTRY)&_ZN8S5410C143v27Ev,
  (VTBL_ENTRY)&_ZN8S5410C143v28Ev,
  (VTBL_ENTRY)&_ZN8S5410C143v29Ev,
  (VTBL_ENTRY)&_ZN8S5410C133v30Ev,
  (VTBL_ENTRY)&_ZN8S5410C133v31Ev,
  (VTBL_ENTRY)&_ZN8S5410C133v32Ev,
  (VTBL_ENTRY)&_ZN8S5410C133v33Ev,
  (VTBL_ENTRY)&_ZN8S5410C123v34Ev,
  (VTBL_ENTRY)&_ZN8S5410C123v35Ev,
  (VTBL_ENTRY)&_ZN8S5410C123v36Ev,
};
extern VTBL_ENTRY _ZTI7S5410C1[];
extern  VTBL_ENTRY _ZTV7S5410C1[];
Class_Descriptor cd_S5410C1 = {  "S5410C1", // class name
  bases_S5410C1, 5,
  &(vtc_S5410C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,228), // object size
  NSPAIRA(_ZTI7S5410C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5410C1),44, //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  S13388C3_nt  {
  void *s13388c3f0[3];
};
//SIG(-1 S13388C3_nt) C1{ Fp[3]}



//skip512 S13388C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13388C2  {
  int s13388c2f0[3];
  void *s13388c2f1[2];
  int s13388c2f2[24];
  void *s13388c2f3[15];
  ::S13388C3_nt s13388c2f4;
  void *s13388c2f5;
  int s13388c2f6;
  void *s13388c2f7[2];
  short s13388c2f8;
  char s13388c2f9;
  int s13388c2f10;
  char s13388c2f11[13];
};
//SIG(-1 S13388C2) C1{ Fi[3] Fp[2] Fi[24] Fp[15] FC2{ Fp[3]} Fp Fi Fp[2] Fs Fc Fi Fc[13]}



static void Test_S13388C2()
{
  {
    init_simple_test("S13388C2");
    S13388C2 lv;
    check2(sizeof(lv), ABISELECT(328,228), "sizeof(S13388C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13388C2)");
    check_field_offset(lv, s13388c2f0, 0, "S13388C2.s13388c2f0");
    check_field_offset(lv, s13388c2f1, ABISELECT(16,12), "S13388C2.s13388c2f1");
    check_field_offset(lv, s13388c2f2, ABISELECT(32,20), "S13388C2.s13388c2f2");
    check_field_offset(lv, s13388c2f3, ABISELECT(128,116), "S13388C2.s13388c2f3");
    check_field_offset(lv, s13388c2f4, ABISELECT(248,176), "S13388C2.s13388c2f4");
    check_field_offset(lv, s13388c2f5, ABISELECT(272,188), "S13388C2.s13388c2f5");
    check_field_offset(lv, s13388c2f6, ABISELECT(280,192), "S13388C2.s13388c2f6");
    check_field_offset(lv, s13388c2f7, ABISELECT(288,196), "S13388C2.s13388c2f7");
    check_field_offset(lv, s13388c2f8, ABISELECT(304,204), "S13388C2.s13388c2f8");
    check_field_offset(lv, s13388c2f9, ABISELECT(306,206), "S13388C2.s13388c2f9");
    check_field_offset(lv, s13388c2f10, ABISELECT(308,208), "S13388C2.s13388c2f10");
    check_field_offset(lv, s13388c2f11, ABISELECT(312,212), "S13388C2.s13388c2f11");
  }
}
static Arrange_To_Call_Me vS13388C2(Test_S13388C2, "S13388C2", ABISELECT(328,228));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S13388C4  {
  void *s13388c4f0;
};
//SIG(1 S13388C4) U1{ Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S13388C5  {
  __tsi64 s13388c5f0;
  int s13388c5f1;
  int s13388c5f2;
  int s13388c5f3;
  int s13388c5f4;
  int s13388c5f5;
  int s13388c5f6;
  void *s13388c5f7;
  int s13388c5f8;
  void *s13388c5f9;
  int s13388c5f10;
  void *s13388c5f11;
  int s13388c5f12;
  void *s13388c5f13;
  int s13388c5f14;
  void *s13388c5f15;
  int s13388c5f16;
  void *s13388c5f17;
  int s13388c5f18;
  void *s13388c5f19;
  int s13388c5f20;
  void *s13388c5f21;
  int s13388c5f22;
  int s13388c5f23;
};
//SIG(-1 S13388C5) C1{ FL Fi[6] Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi[2]}



static void Test_S13388C5()
{
  {
    init_simple_test("S13388C5");
    S13388C5 lv;
    check2(sizeof(lv), ABISELECT(160,100), "sizeof(S13388C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13388C5)");
    check_field_offset(lv, s13388c5f0, 0, "S13388C5.s13388c5f0");
    check_field_offset(lv, s13388c5f1, 8, "S13388C5.s13388c5f1");
    check_field_offset(lv, s13388c5f2, 12, "S13388C5.s13388c5f2");
    check_field_offset(lv, s13388c5f3, 16, "S13388C5.s13388c5f3");
    check_field_offset(lv, s13388c5f4, 20, "S13388C5.s13388c5f4");
    check_field_offset(lv, s13388c5f5, 24, "S13388C5.s13388c5f5");
    check_field_offset(lv, s13388c5f6, 28, "S13388C5.s13388c5f6");
    check_field_offset(lv, s13388c5f7, 32, "S13388C5.s13388c5f7");
    check_field_offset(lv, s13388c5f8, ABISELECT(40,36), "S13388C5.s13388c5f8");
    check_field_offset(lv, s13388c5f9, ABISELECT(48,40), "S13388C5.s13388c5f9");
    check_field_offset(lv, s13388c5f10, ABISELECT(56,44), "S13388C5.s13388c5f10");
    check_field_offset(lv, s13388c5f11, ABISELECT(64,48), "S13388C5.s13388c5f11");
    check_field_offset(lv, s13388c5f12, ABISELECT(72,52), "S13388C5.s13388c5f12");
    check_field_offset(lv, s13388c5f13, ABISELECT(80,56), "S13388C5.s13388c5f13");
    check_field_offset(lv, s13388c5f14, ABISELECT(88,60), "S13388C5.s13388c5f14");
    check_field_offset(lv, s13388c5f15, ABISELECT(96,64), "S13388C5.s13388c5f15");
    check_field_offset(lv, s13388c5f16, ABISELECT(104,68), "S13388C5.s13388c5f16");
    check_field_offset(lv, s13388c5f17, ABISELECT(112,72), "S13388C5.s13388c5f17");
    check_field_offset(lv, s13388c5f18, ABISELECT(120,76), "S13388C5.s13388c5f18");
    check_field_offset(lv, s13388c5f19, ABISELECT(128,80), "S13388C5.s13388c5f19");
    check_field_offset(lv, s13388c5f20, ABISELECT(136,84), "S13388C5.s13388c5f20");
    check_field_offset(lv, s13388c5f21, ABISELECT(144,88), "S13388C5.s13388c5f21");
    check_field_offset(lv, s13388c5f22, ABISELECT(152,92), "S13388C5.s13388c5f22");
    check_field_offset(lv, s13388c5f23, ABISELECT(156,96), "S13388C5.s13388c5f23");
  }
}
static Arrange_To_Call_Me vS13388C5(Test_S13388C5, "S13388C5", ABISELECT(160,100));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13388C1  {
  int s13388c1f0[3];
  void *s13388c1f1[2];
  int s13388c1f2[5];
  __tsi64 s13388c1f3[3];
  int s13388c1f4[2];
  void *s13388c1f5;
  ::S13388C2 s13388c1f6;
  void *s13388c1f7[3];
  ::S13388C4 s13388c1f8;
  ::S13388C5 s13388c1f9;
  void *s13388c1f10;
  void *s13388c1f11;
  void *s13388c1f12;
  void *s13388c1f13;
  void *s13388c1f14;
  void *s13388c1f15;
  void *s13388c1f16;
  char s13388c1f17[256];
  char s13388c1f18[256];
  void *s13388c1f19;
  void *s13388c1f20;
  void *s13388c1f21;
  int s13388c1f22;
  int s13388c1f23;
  int s13388c1f24;
  int s13388c1f25;
  int s13388c1f26;
  int s13388c1f27;
  int s13388c1f28;
  int s13388c1f29;
  int s13388c1f30;
  int s13388c1f31;
  ::S857C10_nt s13388c1f32;
  void *s13388c1f33;
  int s13388c1f34;
  int s13388c1f35;
  int s13388c1f36;
  int s13388c1f37;
  void *s13388c1f38;
  int s13388c1f39;
  int s13388c1f40;
  int s13388c1f41;
  int s13388c1f42;
  int s13388c1f43;
  char s13388c1f44[11];
  int s13388c1f45;
  int s13388c1f46;
  int s13388c1f47;
};
//SIG(1 S13388C1) C1{ Fi[3] Fp[2] Fi[5] FL[3] Fi[2] Fp FC2{ Fi[3] Fp[2] Fi[24] Fp[15] FC3{ Fp[3]} Fp Fi Fp[2] Fs Fc Fi Fc[13]} Fp[3] FU4{ Fp} FC5{ FL Fi Fi Fi Fi Fi Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fi} Fp Fp Fp Fp Fp Fp Fp Fc[256] Fc[256] Fp Fp Fp Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi FC6{ FL[4]} Fp Fi Fi Fi Fi Fp Fi Fi Fi Fi Fi Fc[11] Fi Fi Fi}



static void Test_S13388C1()
{
  {
    init_simple_test("S13388C1");
    S13388C1 lv;
    check2(sizeof(lv), ABISELECT(1360,1112), "sizeof(S13388C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13388C1)");
    check_field_offset(lv, s13388c1f0, 0, "S13388C1.s13388c1f0");
    check_field_offset(lv, s13388c1f1, ABISELECT(16,12), "S13388C1.s13388c1f1");
    check_field_offset(lv, s13388c1f2, ABISELECT(32,20), "S13388C1.s13388c1f2");
    check_field_offset(lv, s13388c1f3, ABISELECT(56,40), "S13388C1.s13388c1f3");
    check_field_offset(lv, s13388c1f4, ABISELECT(80,64), "S13388C1.s13388c1f4");
    check_field_offset(lv, s13388c1f5, ABISELECT(88,72), "S13388C1.s13388c1f5");
    check_field_offset(lv, s13388c1f6, ABISELECT(96,76), "S13388C1.s13388c1f6");
    check_field_offset(lv, s13388c1f7, ABISELECT(424,304), "S13388C1.s13388c1f7");
    check_field_offset(lv, s13388c1f8, ABISELECT(448,316), "S13388C1.s13388c1f8");
    check_field_offset(lv, s13388c1f9, ABISELECT(456,320), "S13388C1.s13388c1f9");
    check_field_offset(lv, s13388c1f10, ABISELECT(616,420), "S13388C1.s13388c1f10");
    check_field_offset(lv, s13388c1f11, ABISELECT(624,424), "S13388C1.s13388c1f11");
    check_field_offset(lv, s13388c1f12, ABISELECT(632,428), "S13388C1.s13388c1f12");
    check_field_offset(lv, s13388c1f13, ABISELECT(640,432), "S13388C1.s13388c1f13");
    check_field_offset(lv, s13388c1f14, ABISELECT(648,436), "S13388C1.s13388c1f14");
    check_field_offset(lv, s13388c1f15, ABISELECT(656,440), "S13388C1.s13388c1f15");
    check_field_offset(lv, s13388c1f16, ABISELECT(664,444), "S13388C1.s13388c1f16");
    check_field_offset(lv, s13388c1f17, ABISELECT(672,448), "S13388C1.s13388c1f17");
    check_field_offset(lv, s13388c1f18, ABISELECT(928,704), "S13388C1.s13388c1f18");
    check_field_offset(lv, s13388c1f19, ABISELECT(1184,960), "S13388C1.s13388c1f19");
    check_field_offset(lv, s13388c1f20, ABISELECT(1192,964), "S13388C1.s13388c1f20");
    check_field_offset(lv, s13388c1f21, ABISELECT(1200,968), "S13388C1.s13388c1f21");
    check_field_offset(lv, s13388c1f22, ABISELECT(1208,972), "S13388C1.s13388c1f22");
    check_field_offset(lv, s13388c1f23, ABISELECT(1212,976), "S13388C1.s13388c1f23");
    check_field_offset(lv, s13388c1f24, ABISELECT(1216,980), "S13388C1.s13388c1f24");
    check_field_offset(lv, s13388c1f25, ABISELECT(1220,984), "S13388C1.s13388c1f25");
    check_field_offset(lv, s13388c1f26, ABISELECT(1224,988), "S13388C1.s13388c1f26");
    check_field_offset(lv, s13388c1f27, ABISELECT(1228,992), "S13388C1.s13388c1f27");
    check_field_offset(lv, s13388c1f28, ABISELECT(1232,996), "S13388C1.s13388c1f28");
    check_field_offset(lv, s13388c1f29, ABISELECT(1236,1000), "S13388C1.s13388c1f29");
    check_field_offset(lv, s13388c1f30, ABISELECT(1240,1004), "S13388C1.s13388c1f30");
    check_field_offset(lv, s13388c1f31, ABISELECT(1244,1008), "S13388C1.s13388c1f31");
    check_field_offset(lv, s13388c1f32, ABISELECT(1248,1012), "S13388C1.s13388c1f32");
    check_field_offset(lv, s13388c1f33, ABISELECT(1280,1044), "S13388C1.s13388c1f33");
    check_field_offset(lv, s13388c1f34, ABISELECT(1288,1048), "S13388C1.s13388c1f34");
    check_field_offset(lv, s13388c1f35, ABISELECT(1292,1052), "S13388C1.s13388c1f35");
    check_field_offset(lv, s13388c1f36, ABISELECT(1296,1056), "S13388C1.s13388c1f36");
    check_field_offset(lv, s13388c1f37, ABISELECT(1300,1060), "S13388C1.s13388c1f37");
    check_field_offset(lv, s13388c1f38, ABISELECT(1304,1064), "S13388C1.s13388c1f38");
    check_field_offset(lv, s13388c1f39, ABISELECT(1312,1068), "S13388C1.s13388c1f39");
    check_field_offset(lv, s13388c1f40, ABISELECT(1316,1072), "S13388C1.s13388c1f40");
    check_field_offset(lv, s13388c1f41, ABISELECT(1320,1076), "S13388C1.s13388c1f41");
    check_field_offset(lv, s13388c1f42, ABISELECT(1324,1080), "S13388C1.s13388c1f42");
    check_field_offset(lv, s13388c1f43, ABISELECT(1328,1084), "S13388C1.s13388c1f43");
    check_field_offset(lv, s13388c1f44, ABISELECT(1332,1088), "S13388C1.s13388c1f44");
    check_field_offset(lv, s13388c1f45, ABISELECT(1344,1100), "S13388C1.s13388c1f45");
    check_field_offset(lv, s13388c1f46, ABISELECT(1348,1104), "S13388C1.s13388c1f46");
    check_field_offset(lv, s13388c1f47, ABISELECT(1352,1108), "S13388C1.s13388c1f47");
  }
}
static Arrange_To_Call_Me vS13388C1(Test_S13388C1, "S13388C1", ABISELECT(1360,1112));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13387C5  {
  long s13387c5f0;
  int s13387c5f1;
  int s13387c5f2;
  int s13387c5f3;
  int s13387c5f4;
  int s13387c5f5;
  int s13387c5f6;
  void *s13387c5f7;
  int s13387c5f8;
  void *s13387c5f9;
  int s13387c5f10;
  void *s13387c5f11;
  int s13387c5f12;
  void *s13387c5f13;
  int s13387c5f14;
  void *s13387c5f15;
  int s13387c5f16;
  void *s13387c5f17;
  int s13387c5f18;
  void *s13387c5f19;
  int s13387c5f20;
  void *s13387c5f21;
  int s13387c5f22;
  int s13387c5f23;
};
//SIG(-1 S13387C5) C1{ Fl Fi[6] Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi[2]}



static void Test_S13387C5()
{
  {
    init_simple_test("S13387C5");
    S13387C5 lv;
    check2(sizeof(lv), ABISELECT(160,96), "sizeof(S13387C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13387C5)");
    check_field_offset(lv, s13387c5f0, 0, "S13387C5.s13387c5f0");
    check_field_offset(lv, s13387c5f1, ABISELECT(8,4), "S13387C5.s13387c5f1");
    check_field_offset(lv, s13387c5f2, ABISELECT(12,8), "S13387C5.s13387c5f2");
    check_field_offset(lv, s13387c5f3, ABISELECT(16,12), "S13387C5.s13387c5f3");
    check_field_offset(lv, s13387c5f4, ABISELECT(20,16), "S13387C5.s13387c5f4");
    check_field_offset(lv, s13387c5f5, ABISELECT(24,20), "S13387C5.s13387c5f5");
    check_field_offset(lv, s13387c5f6, ABISELECT(28,24), "S13387C5.s13387c5f6");
    check_field_offset(lv, s13387c5f7, ABISELECT(32,28), "S13387C5.s13387c5f7");
    check_field_offset(lv, s13387c5f8, ABISELECT(40,32), "S13387C5.s13387c5f8");
    check_field_offset(lv, s13387c5f9, ABISELECT(48,36), "S13387C5.s13387c5f9");
    check_field_offset(lv, s13387c5f10, ABISELECT(56,40), "S13387C5.s13387c5f10");
    check_field_offset(lv, s13387c5f11, ABISELECT(64,44), "S13387C5.s13387c5f11");
    check_field_offset(lv, s13387c5f12, ABISELECT(72,48), "S13387C5.s13387c5f12");
    check_field_offset(lv, s13387c5f13, ABISELECT(80,52), "S13387C5.s13387c5f13");
    check_field_offset(lv, s13387c5f14, ABISELECT(88,56), "S13387C5.s13387c5f14");
    check_field_offset(lv, s13387c5f15, ABISELECT(96,60), "S13387C5.s13387c5f15");
    check_field_offset(lv, s13387c5f16, ABISELECT(104,64), "S13387C5.s13387c5f16");
    check_field_offset(lv, s13387c5f17, ABISELECT(112,68), "S13387C5.s13387c5f17");
    check_field_offset(lv, s13387c5f18, ABISELECT(120,72), "S13387C5.s13387c5f18");
    check_field_offset(lv, s13387c5f19, ABISELECT(128,76), "S13387C5.s13387c5f19");
    check_field_offset(lv, s13387c5f20, ABISELECT(136,80), "S13387C5.s13387c5f20");
    check_field_offset(lv, s13387c5f21, ABISELECT(144,84), "S13387C5.s13387c5f21");
    check_field_offset(lv, s13387c5f22, ABISELECT(152,88), "S13387C5.s13387c5f22");
    check_field_offset(lv, s13387c5f23, ABISELECT(156,92), "S13387C5.s13387c5f23");
  }
}
static Arrange_To_Call_Me vS13387C5(Test_S13387C5, "S13387C5", ABISELECT(160,96));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13387C1  {
  int s13387c1f0[3];
  void *s13387c1f1[2];
  int s13387c1f2[5];
  long s13387c1f3[3];
  int s13387c1f4[2];
  void *s13387c1f5;
  ::S13388C2 s13387c1f6;
  void *s13387c1f7[3];
  ::S13388C4 s13387c1f8;
  ::S13387C5 s13387c1f9;
  void *s13387c1f10;
  void *s13387c1f11;
  void *s13387c1f12;
  void *s13387c1f13;
  void *s13387c1f14;
  void *s13387c1f15;
  void *s13387c1f16;
  char s13387c1f17[256];
  char s13387c1f18[256];
  void *s13387c1f19;
  void *s13387c1f20;
  void *s13387c1f21;
  int s13387c1f22;
  int s13387c1f23;
  int s13387c1f24;
  int s13387c1f25;
  int s13387c1f26;
  int s13387c1f27;
  int s13387c1f28;
  int s13387c1f29;
  int s13387c1f30;
  int s13387c1f31;
  ::S856C10_nt s13387c1f32;
  void *s13387c1f33;
  int s13387c1f34;
  int s13387c1f35;
  int s13387c1f36;
  int s13387c1f37;
  void *s13387c1f38;
  int s13387c1f39;
  int s13387c1f40;
  int s13387c1f41;
  int s13387c1f42;
  int s13387c1f43;
  char s13387c1f44[11];
  int s13387c1f45;
  int s13387c1f46;
  int s13387c1f47;
};
//SIG(1 S13387C1) C1{ Fi[3] Fp[2] Fi[5] Fl[3] Fi[2] Fp FC2{ Fi[3] Fp[2] Fi[24] Fp[15] FC3{ Fp[3]} Fp Fi Fp[2] Fs Fc Fi Fc[13]} Fp[3] FU4{ Fp} FC5{ Fl Fi Fi Fi Fi Fi Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fi} Fp Fp Fp Fp Fp Fp Fp Fc[256] Fc[256] Fp Fp Fp Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi FC6{ Fl[4]} Fp Fi Fi Fi Fi Fp Fi Fi Fi Fi Fi Fc[11] Fi Fi Fi}



static void Test_S13387C1()
{
  {
    init_simple_test("S13387C1");
    S13387C1 lv;
    check2(sizeof(lv), ABISELECT(1360,1080), "sizeof(S13387C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13387C1)");
    check_field_offset(lv, s13387c1f0, 0, "S13387C1.s13387c1f0");
    check_field_offset(lv, s13387c1f1, ABISELECT(16,12), "S13387C1.s13387c1f1");
    check_field_offset(lv, s13387c1f2, ABISELECT(32,20), "S13387C1.s13387c1f2");
    check_field_offset(lv, s13387c1f3, ABISELECT(56,40), "S13387C1.s13387c1f3");
    check_field_offset(lv, s13387c1f4, ABISELECT(80,52), "S13387C1.s13387c1f4");
    check_field_offset(lv, s13387c1f5, ABISELECT(88,60), "S13387C1.s13387c1f5");
    check_field_offset(lv, s13387c1f6, ABISELECT(96,64), "S13387C1.s13387c1f6");
    check_field_offset(lv, s13387c1f7, ABISELECT(424,292), "S13387C1.s13387c1f7");
    check_field_offset(lv, s13387c1f8, ABISELECT(448,304), "S13387C1.s13387c1f8");
    check_field_offset(lv, s13387c1f9, ABISELECT(456,308), "S13387C1.s13387c1f9");
    check_field_offset(lv, s13387c1f10, ABISELECT(616,404), "S13387C1.s13387c1f10");
    check_field_offset(lv, s13387c1f11, ABISELECT(624,408), "S13387C1.s13387c1f11");
    check_field_offset(lv, s13387c1f12, ABISELECT(632,412), "S13387C1.s13387c1f12");
    check_field_offset(lv, s13387c1f13, ABISELECT(640,416), "S13387C1.s13387c1f13");
    check_field_offset(lv, s13387c1f14, ABISELECT(648,420), "S13387C1.s13387c1f14");
    check_field_offset(lv, s13387c1f15, ABISELECT(656,424), "S13387C1.s13387c1f15");
    check_field_offset(lv, s13387c1f16, ABISELECT(664,428), "S13387C1.s13387c1f16");
    check_field_offset(lv, s13387c1f17, ABISELECT(672,432), "S13387C1.s13387c1f17");
    check_field_offset(lv, s13387c1f18, ABISELECT(928,688), "S13387C1.s13387c1f18");
    check_field_offset(lv, s13387c1f19, ABISELECT(1184,944), "S13387C1.s13387c1f19");
    check_field_offset(lv, s13387c1f20, ABISELECT(1192,948), "S13387C1.s13387c1f20");
    check_field_offset(lv, s13387c1f21, ABISELECT(1200,952), "S13387C1.s13387c1f21");
    check_field_offset(lv, s13387c1f22, ABISELECT(1208,956), "S13387C1.s13387c1f22");
    check_field_offset(lv, s13387c1f23, ABISELECT(1212,960), "S13387C1.s13387c1f23");
    check_field_offset(lv, s13387c1f24, ABISELECT(1216,964), "S13387C1.s13387c1f24");
    check_field_offset(lv, s13387c1f25, ABISELECT(1220,968), "S13387C1.s13387c1f25");
    check_field_offset(lv, s13387c1f26, ABISELECT(1224,972), "S13387C1.s13387c1f26");
    check_field_offset(lv, s13387c1f27, ABISELECT(1228,976), "S13387C1.s13387c1f27");
    check_field_offset(lv, s13387c1f28, ABISELECT(1232,980), "S13387C1.s13387c1f28");
    check_field_offset(lv, s13387c1f29, ABISELECT(1236,984), "S13387C1.s13387c1f29");
    check_field_offset(lv, s13387c1f30, ABISELECT(1240,988), "S13387C1.s13387c1f30");
    check_field_offset(lv, s13387c1f31, ABISELECT(1244,992), "S13387C1.s13387c1f31");
    check_field_offset(lv, s13387c1f32, ABISELECT(1248,996), "S13387C1.s13387c1f32");
    check_field_offset(lv, s13387c1f33, ABISELECT(1280,1012), "S13387C1.s13387c1f33");
    check_field_offset(lv, s13387c1f34, ABISELECT(1288,1016), "S13387C1.s13387c1f34");
    check_field_offset(lv, s13387c1f35, ABISELECT(1292,1020), "S13387C1.s13387c1f35");
    check_field_offset(lv, s13387c1f36, ABISELECT(1296,1024), "S13387C1.s13387c1f36");
    check_field_offset(lv, s13387c1f37, ABISELECT(1300,1028), "S13387C1.s13387c1f37");
    check_field_offset(lv, s13387c1f38, ABISELECT(1304,1032), "S13387C1.s13387c1f38");
    check_field_offset(lv, s13387c1f39, ABISELECT(1312,1036), "S13387C1.s13387c1f39");
    check_field_offset(lv, s13387c1f40, ABISELECT(1316,1040), "S13387C1.s13387c1f40");
    check_field_offset(lv, s13387c1f41, ABISELECT(1320,1044), "S13387C1.s13387c1f41");
    check_field_offset(lv, s13387c1f42, ABISELECT(1324,1048), "S13387C1.s13387c1f42");
    check_field_offset(lv, s13387c1f43, ABISELECT(1328,1052), "S13387C1.s13387c1f43");
    check_field_offset(lv, s13387c1f44, ABISELECT(1332,1056), "S13387C1.s13387c1f44");
    check_field_offset(lv, s13387c1f45, ABISELECT(1344,1068), "S13387C1.s13387c1f45");
    check_field_offset(lv, s13387c1f46, ABISELECT(1348,1072), "S13387C1.s13387c1f46");
    check_field_offset(lv, s13387c1f47, ABISELECT(1352,1076), "S13387C1.s13387c1f47");
  }
}
static Arrange_To_Call_Me vS13387C1(Test_S13387C1, "S13387C1", ABISELECT(1360,1080));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S906C5  {
  virtual  ~S906C5(); // _ZN6S906C5D1Ev
  virtual void  v3(); // _ZN6S906C52v3Ev
  virtual void  v4(); // _ZN6S906C52v4Ev
  virtual void  v5(); // _ZN6S906C52v5Ev
  S906C5(); // tgen
};
//SIG(-1 S906C5) C1{ vd v1 v2 v3}


 S906C5 ::~S906C5(){ note_dtor("S906C5", this);}
void  S906C5 ::v3(){vfunc_called(this, "_ZN6S906C52v3Ev");}
void  S906C5 ::v4(){vfunc_called(this, "_ZN6S906C52v4Ev");}
void  S906C5 ::v5(){vfunc_called(this, "_ZN6S906C52v5Ev");}
S906C5 ::S906C5(){ note_ctor("S906C5", this);} // tgen

static void Test_S906C5()
{
  extern Class_Descriptor cd_S906C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S906C5, buf);
    S906C5 *dp, &lv = *(dp=new (buf) S906C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S906C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S906C5)");
    test_class_info(&lv, &cd_S906C5);
    dp->~S906C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS906C5(Test_S906C5, "S906C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S906C5C1Ev();
extern void _ZN6S906C5D1Ev();
Name_Map name_map_S906C5[] = {
  NSPAIR(_ZN6S906C5C1Ev),
  NSPAIR(_ZN6S906C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S906C5[];
extern void _ZN6S906C5D1Ev();
extern void _ZN6S906C5D0Ev();
extern void _ZN6S906C52v3Ev();
extern void _ZN6S906C52v4Ev();
extern void _ZN6S906C52v5Ev();
static  VTBL_ENTRY vtc_S906C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S906C5[0]),
  (VTBL_ENTRY)&_ZN6S906C5D1Ev,
  (VTBL_ENTRY)&_ZN6S906C5D0Ev,
  (VTBL_ENTRY)&_ZN6S906C52v3Ev,
  (VTBL_ENTRY)&_ZN6S906C52v4Ev,
  (VTBL_ENTRY)&_ZN6S906C52v5Ev,
};
extern VTBL_ENTRY _ZTI6S906C5[];
extern  VTBL_ENTRY _ZTV6S906C5[];
Class_Descriptor cd_S906C5 = {  "S906C5", // class name
  0,0,//no base classes
  &(vtc_S906C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S906C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S906C5),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  S906C6  {
  virtual  ~S906C6(); // _ZN6S906C6D1Ev
  virtual void  v6(); // _ZN6S906C62v6Ev
  S906C6(); // tgen
};
//SIG(-1 S906C6) C1{ vd v1}


 S906C6 ::~S906C6(){ note_dtor("S906C6", this);}
void  S906C6 ::v6(){vfunc_called(this, "_ZN6S906C62v6Ev");}
S906C6 ::S906C6(){ note_ctor("S906C6", this);} // tgen

static void Test_S906C6()
{
  extern Class_Descriptor cd_S906C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S906C6, buf);
    S906C6 *dp, &lv = *(dp=new (buf) S906C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S906C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S906C6)");
    test_class_info(&lv, &cd_S906C6);
    dp->~S906C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS906C6(Test_S906C6, "S906C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S906C6C1Ev();
extern void _ZN6S906C6D1Ev();
Name_Map name_map_S906C6[] = {
  NSPAIR(_ZN6S906C6C1Ev),
  NSPAIR(_ZN6S906C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S906C6[];
extern void _ZN6S906C6D1Ev();
extern void _ZN6S906C6D0Ev();
extern void _ZN6S906C62v6Ev();
static  VTBL_ENTRY vtc_S906C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S906C6[0]),
  (VTBL_ENTRY)&_ZN6S906C6D1Ev,
  (VTBL_ENTRY)&_ZN6S906C6D0Ev,
  (VTBL_ENTRY)&_ZN6S906C62v6Ev,
};
extern VTBL_ENTRY _ZTI6S906C6[];
extern  VTBL_ENTRY _ZTV6S906C6[];
Class_Descriptor cd_S906C6 = {  "S906C6", // class name
  0,0,//no base classes
  &(vtc_S906C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S906C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S906C6),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  S906C4  : S906C5 , S906C6 {
  virtual  ~S906C4(); // _ZN6S906C4D1Ev
  virtual void  v7(); // _ZN6S906C42v7Ev
  virtual void  v8(); // _ZN6S906C42v8Ev
  virtual void  v9(); // _ZN6S906C42v9Ev
  virtual void  v10(); // _ZN6S906C43v10Ev
  virtual void  v11(); // _ZN6S906C43v11Ev
  virtual void  v12(); // _ZN6S906C43v12Ev
  virtual void  v13(); // _ZN6S906C43v13Ev
  virtual void  v14(); // _ZN6S906C43v14Ev
  S906C4(); // tgen
};
//SIG(-1 S906C4) C1{ BC2{ vd v9 v10 v11} BC3{ vd v12} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S906C4 ::~S906C4(){ note_dtor("S906C4", this);}
void  S906C4 ::v7(){vfunc_called(this, "_ZN6S906C42v7Ev");}
void  S906C4 ::v8(){vfunc_called(this, "_ZN6S906C42v8Ev");}
void  S906C4 ::v9(){vfunc_called(this, "_ZN6S906C42v9Ev");}
void  S906C4 ::v10(){vfunc_called(this, "_ZN6S906C43v10Ev");}
void  S906C4 ::v11(){vfunc_called(this, "_ZN6S906C43v11Ev");}
void  S906C4 ::v12(){vfunc_called(this, "_ZN6S906C43v12Ev");}
void  S906C4 ::v13(){vfunc_called(this, "_ZN6S906C43v13Ev");}
void  S906C4 ::v14(){vfunc_called(this, "_ZN6S906C43v14Ev");}
S906C4 ::S906C4(){ note_ctor("S906C4", this);} // tgen

static void Test_S906C4()
{
  extern Class_Descriptor cd_S906C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S906C4, buf);
    S906C4 *dp, &lv = *(dp=new (buf) S906C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S906C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S906C4)");
    check_base_class_offset(lv, (S906C5*), 0, "S906C4");
    check_base_class_offset(lv, (S906C6*), ABISELECT(8,4), "S906C4");
    test_class_info(&lv, &cd_S906C4);
    dp->~S906C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS906C4(Test_S906C4, "S906C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S906C4C1Ev();
extern void _ZN6S906C4D1Ev();
Name_Map name_map_S906C4[] = {
  NSPAIR(_ZN6S906C4C1Ev),
  NSPAIR(_ZN6S906C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S906C5;
extern VTBL_ENTRY _ZTI6S906C5[];
extern  VTBL_ENTRY _ZTV6S906C5[];
extern Class_Descriptor cd_S906C6;
extern VTBL_ENTRY _ZTI6S906C6[];
extern  VTBL_ENTRY _ZTV6S906C6[];
static Base_Class bases_S906C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S906C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S906C6,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S906C4[];
extern void _ZN6S906C4D1Ev();
extern void _ZN6S906C4D0Ev();
extern void _ZN6S906C52v3Ev();
extern void _ZN6S906C52v4Ev();
extern void _ZN6S906C52v5Ev();
extern void _ZN6S906C42v7Ev();
extern void _ZN6S906C42v8Ev();
extern void _ZN6S906C42v9Ev();
extern void _ZN6S906C43v10Ev();
extern void _ZN6S906C43v11Ev();
extern void _ZN6S906C43v12Ev();
extern void _ZN6S906C43v13Ev();
extern void _ZN6S906C43v14Ev();
extern void ABISELECT(_ZThn8_N6S906C4D1Ev,_ZThn4_N6S906C4D1Ev)();
extern void ABISELECT(_ZThn8_N6S906C4D0Ev,_ZThn4_N6S906C4D0Ev)();
extern void _ZN6S906C62v6Ev();
static  VTBL_ENTRY vtc_S906C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S906C4[0]),
  (VTBL_ENTRY)&_ZN6S906C4D1Ev,
  (VTBL_ENTRY)&_ZN6S906C4D0Ev,
  (VTBL_ENTRY)&_ZN6S906C52v3Ev,
  (VTBL_ENTRY)&_ZN6S906C52v4Ev,
  (VTBL_ENTRY)&_ZN6S906C52v5Ev,
  (VTBL_ENTRY)&_ZN6S906C42v7Ev,
  (VTBL_ENTRY)&_ZN6S906C42v8Ev,
  (VTBL_ENTRY)&_ZN6S906C42v9Ev,
  (VTBL_ENTRY)&_ZN6S906C43v10Ev,
  (VTBL_ENTRY)&_ZN6S906C43v11Ev,
  (VTBL_ENTRY)&_ZN6S906C43v12Ev,
  (VTBL_ENTRY)&_ZN6S906C43v13Ev,
  (VTBL_ENTRY)&_ZN6S906C43v14Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S906C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S906C4D1Ev,_ZThn4_N6S906C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S906C4D0Ev,_ZThn4_N6S906C4D0Ev),
  (VTBL_ENTRY)&_ZN6S906C62v6Ev,
};
extern VTBL_ENTRY _ZTI6S906C4[];
extern  VTBL_ENTRY _ZTV6S906C4[];
Class_Descriptor cd_S906C4 = {  "S906C4", // class name
  bases_S906C4, 2,
  &(vtc_S906C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S906C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S906C4),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S906C3  : S906C4 {
  ::S5408C15_nt s906c3f0;
  ::S857C9_nt s906c3f1;
  char s906c3f2;
  virtual  ~S906C3(); // _ZN6S906C3D1Ev
  virtual void  v15(); // _ZN6S906C33v15Ev
  virtual void  v16(); // _ZN6S906C33v16Ev
  virtual void  v17(); // _ZN6S906C33v17Ev
  S906C3(); // tgen
};
//SIG(-1 S906C3) C1{ BC2{ BC3{ vd v4 v5 v6} BC4{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15} vd v1 v2 v3 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ FL[4]}} Fc}


 S906C3 ::~S906C3(){ note_dtor("S906C3", this);}
void  S906C3 ::v15(){vfunc_called(this, "_ZN6S906C33v15Ev");}
void  S906C3 ::v16(){vfunc_called(this, "_ZN6S906C33v16Ev");}
void  S906C3 ::v17(){vfunc_called(this, "_ZN6S906C33v17Ev");}
S906C3 ::S906C3(){ note_ctor("S906C3", this);} // tgen

static void Test_S906C3()
{
  extern Class_Descriptor cd_S906C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S906C3, buf);
    S906C3 *dp, &lv = *(dp=new (buf) S906C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S906C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S906C3)");
    check_base_class_offset(lv, (S906C5*)(S906C4*), 0, "S906C3");
    check_base_class_offset(lv, (S906C6*)(S906C4*), ABISELECT(8,4), "S906C3");
    check_base_class_offset(lv, (S906C4*), 0, "S906C3");
    check_field_offset(lv, s906c3f0, ABISELECT(16,8), "S906C3.s906c3f0");
    check_field_offset(lv, s906c3f1, ABISELECT(40,24), "S906C3.s906c3f1");
    check_field_offset(lv, s906c3f2, ABISELECT(72,56), "S906C3.s906c3f2");
    test_class_info(&lv, &cd_S906C3);
    dp->~S906C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS906C3(Test_S906C3, "S906C3", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN6S906C3C1Ev();
extern void _ZN6S906C3D1Ev();
Name_Map name_map_S906C3[] = {
  NSPAIR(_ZN6S906C3C1Ev),
  NSPAIR(_ZN6S906C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S906C5;
extern VTBL_ENTRY _ZTI6S906C5[];
extern  VTBL_ENTRY _ZTV6S906C5[];
extern Class_Descriptor cd_S906C6;
extern VTBL_ENTRY _ZTI6S906C6[];
extern  VTBL_ENTRY _ZTV6S906C6[];
extern Class_Descriptor cd_S906C4;
extern VTBL_ENTRY _ZTI6S906C4[];
extern  VTBL_ENTRY _ZTV6S906C4[];
static Base_Class bases_S906C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S906C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S906C6,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S906C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S906C3[];
extern void _ZN6S906C3D1Ev();
extern void _ZN6S906C3D0Ev();
extern void _ZN6S906C52v3Ev();
extern void _ZN6S906C52v4Ev();
extern void _ZN6S906C52v5Ev();
extern void _ZN6S906C42v7Ev();
extern void _ZN6S906C42v8Ev();
extern void _ZN6S906C42v9Ev();
extern void _ZN6S906C43v10Ev();
extern void _ZN6S906C43v11Ev();
extern void _ZN6S906C43v12Ev();
extern void _ZN6S906C43v13Ev();
extern void _ZN6S906C43v14Ev();
extern void _ZN6S906C33v15Ev();
extern void _ZN6S906C33v16Ev();
extern void _ZN6S906C33v17Ev();
extern void ABISELECT(_ZThn8_N6S906C3D1Ev,_ZThn4_N6S906C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S906C3D0Ev,_ZThn4_N6S906C3D0Ev)();
extern void _ZN6S906C62v6Ev();
static  VTBL_ENTRY vtc_S906C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S906C3[0]),
  (VTBL_ENTRY)&_ZN6S906C3D1Ev,
  (VTBL_ENTRY)&_ZN6S906C3D0Ev,
  (VTBL_ENTRY)&_ZN6S906C52v3Ev,
  (VTBL_ENTRY)&_ZN6S906C52v4Ev,
  (VTBL_ENTRY)&_ZN6S906C52v5Ev,
  (VTBL_ENTRY)&_ZN6S906C42v7Ev,
  (VTBL_ENTRY)&_ZN6S906C42v8Ev,
  (VTBL_ENTRY)&_ZN6S906C42v9Ev,
  (VTBL_ENTRY)&_ZN6S906C43v10Ev,
  (VTBL_ENTRY)&_ZN6S906C43v11Ev,
  (VTBL_ENTRY)&_ZN6S906C43v12Ev,
  (VTBL_ENTRY)&_ZN6S906C43v13Ev,
  (VTBL_ENTRY)&_ZN6S906C43v14Ev,
  (VTBL_ENTRY)&_ZN6S906C33v15Ev,
  (VTBL_ENTRY)&_ZN6S906C33v16Ev,
  (VTBL_ENTRY)&_ZN6S906C33v17Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S906C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S906C3D1Ev,_ZThn4_N6S906C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S906C3D0Ev,_ZThn4_N6S906C3D0Ev),
  (VTBL_ENTRY)&_ZN6S906C62v6Ev,
};
extern VTBL_ENTRY _ZTI6S906C3[];
extern  VTBL_ENTRY _ZTV6S906C3[];
Class_Descriptor cd_S906C3 = {  "S906C3", // class name
  bases_S906C3, 3,
  &(vtc_S906C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI6S906C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S906C3),23, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S906C11  {
  virtual  ~S906C11(); // _ZN7S906C11D1Ev
  virtual void  v18(); // _ZN7S906C113v18Ev
  S906C11(); // tgen
};
//SIG(-1 S906C11) C1{ vd v1}


 S906C11 ::~S906C11(){ note_dtor("S906C11", this);}
void  S906C11 ::v18(){vfunc_called(this, "_ZN7S906C113v18Ev");}
S906C11 ::S906C11(){ note_ctor("S906C11", this);} // tgen

static void Test_S906C11()
{
  extern Class_Descriptor cd_S906C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S906C11, buf);
    S906C11 *dp, &lv = *(dp=new (buf) S906C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S906C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S906C11)");
    test_class_info(&lv, &cd_S906C11);
    dp->~S906C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS906C11(Test_S906C11, "S906C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S906C11C1Ev();
extern void _ZN7S906C11D1Ev();
Name_Map name_map_S906C11[] = {
  NSPAIR(_ZN7S906C11C1Ev),
  NSPAIR(_ZN7S906C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S906C11[];
extern void _ZN7S906C11D1Ev();
extern void _ZN7S906C11D0Ev();
extern void _ZN7S906C113v18Ev();
static  VTBL_ENTRY vtc_S906C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S906C11[0]),
  (VTBL_ENTRY)&_ZN7S906C11D1Ev,
  (VTBL_ENTRY)&_ZN7S906C11D0Ev,
  (VTBL_ENTRY)&_ZN7S906C113v18Ev,
};
extern VTBL_ENTRY _ZTI7S906C11[];
extern  VTBL_ENTRY _ZTV7S906C11[];
Class_Descriptor cd_S906C11 = {  "S906C11", // class name
  0,0,//no base classes
  &(vtc_S906C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S906C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S906C11),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  S906C2  : S906C3 , S906C11 {
  ::S853C12 s906c2f0;
  ::S857C13_nt s906c2f1;
  char s906c2f2[2];
  ::S857C16 s906c2f3;
  void *s906c2f4;
  virtual  ~S906C2(); // _ZN6S906C2D1Ev
  virtual void  v19(); // _ZN6S906C23v19Ev
  virtual void  v20(); // _ZN6S906C23v20Ev
  virtual void  v21(); // _ZN6S906C23v21Ev
  virtual void  v22(); // _ZN6S906C23v22Ev
  virtual void  v23(); // _ZN6S906C23v23Ev
  virtual void  v24(); // _ZN6S906C23v24Ev
  virtual void  v25(); // _ZN6S906C23v25Ev
  virtual void  v26(); // _ZN6S906C23v26Ev
  virtual void  v27(); // _ZN6S906C23v27Ev
  virtual void  v28(); // _ZN6S906C23v28Ev
  virtual void  v29(); // _ZN6S906C23v29Ev
  virtual void  v30(); // _ZN6S906C23v30Ev
  virtual void  v31(); // _ZN6S906C23v31Ev
  virtual void  v32(); // _ZN6S906C23v32Ev
  virtual void  v33(); // _ZN6S906C23v33Ev
  virtual void  v34(); // _ZN6S906C23v34Ev
  virtual void  v35(); // _ZN6S906C23v35Ev
  virtual void  v36(); // _ZN6S906C23v36Ev
  virtual void  v37(); // _ZN6S906C23v37Ev
  S906C2(); // tgen
};
//SIG(-1 S906C2) C1{ BC2{ BC3{ BC4{ vd v20 v21 v22} BC5{ vd v23} vd v24 v25 v26 v27 v28 v29 v30 v31} vd v32 v33 v34 FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ FL[4]}} Fc} BC10{ vd v35} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC11{ m FC9} FC12{ m Fp FC8 FC13{ m Fp FC14{ Fi[4]}} Fi Fc} Fc[2] FC15{ BC16{ vd v38} BC17{ vd v39} vd v36 v37 Fp[2]} Fp}


 S906C2 ::~S906C2(){ note_dtor("S906C2", this);}
void  S906C2 ::v19(){vfunc_called(this, "_ZN6S906C23v19Ev");}
void  S906C2 ::v20(){vfunc_called(this, "_ZN6S906C23v20Ev");}
void  S906C2 ::v21(){vfunc_called(this, "_ZN6S906C23v21Ev");}
void  S906C2 ::v22(){vfunc_called(this, "_ZN6S906C23v22Ev");}
void  S906C2 ::v23(){vfunc_called(this, "_ZN6S906C23v23Ev");}
void  S906C2 ::v24(){vfunc_called(this, "_ZN6S906C23v24Ev");}
void  S906C2 ::v25(){vfunc_called(this, "_ZN6S906C23v25Ev");}
void  S906C2 ::v26(){vfunc_called(this, "_ZN6S906C23v26Ev");}
void  S906C2 ::v27(){vfunc_called(this, "_ZN6S906C23v27Ev");}
void  S906C2 ::v28(){vfunc_called(this, "_ZN6S906C23v28Ev");}
void  S906C2 ::v29(){vfunc_called(this, "_ZN6S906C23v29Ev");}
void  S906C2 ::v30(){vfunc_called(this, "_ZN6S906C23v30Ev");}
void  S906C2 ::v31(){vfunc_called(this, "_ZN6S906C23v31Ev");}
void  S906C2 ::v32(){vfunc_called(this, "_ZN6S906C23v32Ev");}
void  S906C2 ::v33(){vfunc_called(this, "_ZN6S906C23v33Ev");}
void  S906C2 ::v34(){vfunc_called(this, "_ZN6S906C23v34Ev");}
void  S906C2 ::v35(){vfunc_called(this, "_ZN6S906C23v35Ev");}
void  S906C2 ::v36(){vfunc_called(this, "_ZN6S906C23v36Ev");}
void  S906C2 ::v37(){vfunc_called(this, "_ZN6S906C23v37Ev");}
S906C2 ::S906C2(){ note_ctor("S906C2", this);} // tgen

static void Test_S906C2()
{
  extern Class_Descriptor cd_S906C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,47)];
    init_test(&cd_S906C2, buf);
    S906C2 *dp, &lv = *(dp=new (buf) S906C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,184), "sizeof(S906C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S906C2)");
    check_base_class_offset(lv, (S906C5*)(S906C4*)(S906C3*), 0, "S906C2");
    check_base_class_offset(lv, (S906C6*)(S906C4*)(S906C3*), ABISELECT(8,4), "S906C2");
    check_base_class_offset(lv, (S906C4*)(S906C3*), 0, "S906C2");
    check_base_class_offset(lv, (S906C3*), 0, "S906C2");
    check_base_class_offset(lv, (S906C11*), ABISELECT(80,60), "S906C2");
    check_field_offset(lv, s906c2f0, ABISELECT(88,64), "S906C2.s906c2f0");
    check_field_offset(lv, s906c2f1, ABISELECT(120,96), "S906C2.s906c2f1");
    check_field_offset(lv, s906c2f2, ABISELECT(192,160), "S906C2.s906c2f2");
    check_field_offset(lv, s906c2f3, ABISELECT(200,164), "S906C2.s906c2f3");
    check_field_offset(lv, s906c2f4, ABISELECT(232,180), "S906C2.s906c2f4");
    test_class_info(&lv, &cd_S906C2);
    dp->~S906C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS906C2(Test_S906C2, "S906C2", ABISELECT(240,184));

#else // __cplusplus

extern void _ZN6S906C2C1Ev();
extern void _ZN6S906C2D1Ev();
Name_Map name_map_S906C2[] = {
  NSPAIR(_ZN6S906C2C1Ev),
  NSPAIR(_ZN6S906C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S906C5;
extern VTBL_ENTRY _ZTI6S906C5[];
extern  VTBL_ENTRY _ZTV6S906C5[];
extern Class_Descriptor cd_S906C6;
extern VTBL_ENTRY _ZTI6S906C6[];
extern  VTBL_ENTRY _ZTV6S906C6[];
extern Class_Descriptor cd_S906C4;
extern VTBL_ENTRY _ZTI6S906C4[];
extern  VTBL_ENTRY _ZTV6S906C4[];
extern Class_Descriptor cd_S906C3;
extern VTBL_ENTRY _ZTI6S906C3[];
extern  VTBL_ENTRY _ZTV6S906C3[];
extern Class_Descriptor cd_S906C11;
extern VTBL_ENTRY _ZTI7S906C11[];
extern  VTBL_ENTRY _ZTV7S906C11[];
static Base_Class bases_S906C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S906C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S906C6,    ABISELECT(8,4), //bcp->offset
    37, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S906C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S906C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S906C11,    ABISELECT(80,60), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S906C2[];
extern void _ZN6S906C2D1Ev();
extern void _ZN6S906C2D0Ev();
extern void _ZN6S906C52v3Ev();
extern void _ZN6S906C52v4Ev();
extern void _ZN6S906C52v5Ev();
extern void _ZN6S906C42v7Ev();
extern void _ZN6S906C42v8Ev();
extern void _ZN6S906C42v9Ev();
extern void _ZN6S906C43v10Ev();
extern void _ZN6S906C43v11Ev();
extern void _ZN6S906C43v12Ev();
extern void _ZN6S906C43v13Ev();
extern void _ZN6S906C43v14Ev();
extern void _ZN6S906C33v15Ev();
extern void _ZN6S906C33v16Ev();
extern void _ZN6S906C33v17Ev();
extern void _ZN6S906C23v19Ev();
extern void _ZN6S906C23v20Ev();
extern void _ZN6S906C23v21Ev();
extern void _ZN6S906C23v22Ev();
extern void _ZN6S906C23v23Ev();
extern void _ZN6S906C23v24Ev();
extern void _ZN6S906C23v25Ev();
extern void _ZN6S906C23v26Ev();
extern void _ZN6S906C23v27Ev();
extern void _ZN6S906C23v28Ev();
extern void _ZN6S906C23v29Ev();
extern void _ZN6S906C23v30Ev();
extern void _ZN6S906C23v31Ev();
extern void _ZN6S906C23v32Ev();
extern void _ZN6S906C23v33Ev();
extern void _ZN6S906C23v34Ev();
extern void _ZN6S906C23v35Ev();
extern void _ZN6S906C23v36Ev();
extern void _ZN6S906C23v37Ev();
extern void ABISELECT(_ZThn8_N6S906C2D1Ev,_ZThn4_N6S906C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S906C2D0Ev,_ZThn4_N6S906C2D0Ev)();
extern void _ZN6S906C62v6Ev();
extern void ABISELECT(_ZThn80_N6S906C2D1Ev,_ZThn60_N6S906C2D1Ev)();
extern void ABISELECT(_ZThn80_N6S906C2D0Ev,_ZThn60_N6S906C2D0Ev)();
extern void _ZN7S906C113v18Ev();
static  VTBL_ENTRY vtc_S906C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S906C2[0]),
  (VTBL_ENTRY)&_ZN6S906C2D1Ev,
  (VTBL_ENTRY)&_ZN6S906C2D0Ev,
  (VTBL_ENTRY)&_ZN6S906C52v3Ev,
  (VTBL_ENTRY)&_ZN6S906C52v4Ev,
  (VTBL_ENTRY)&_ZN6S906C52v5Ev,
  (VTBL_ENTRY)&_ZN6S906C42v7Ev,
  (VTBL_ENTRY)&_ZN6S906C42v8Ev,
  (VTBL_ENTRY)&_ZN6S906C42v9Ev,
  (VTBL_ENTRY)&_ZN6S906C43v10Ev,
  (VTBL_ENTRY)&_ZN6S906C43v11Ev,
  (VTBL_ENTRY)&_ZN6S906C43v12Ev,
  (VTBL_ENTRY)&_ZN6S906C43v13Ev,
  (VTBL_ENTRY)&_ZN6S906C43v14Ev,
  (VTBL_ENTRY)&_ZN6S906C33v15Ev,
  (VTBL_ENTRY)&_ZN6S906C33v16Ev,
  (VTBL_ENTRY)&_ZN6S906C33v17Ev,
  (VTBL_ENTRY)&_ZN6S906C23v19Ev,
  (VTBL_ENTRY)&_ZN6S906C23v20Ev,
  (VTBL_ENTRY)&_ZN6S906C23v21Ev,
  (VTBL_ENTRY)&_ZN6S906C23v22Ev,
  (VTBL_ENTRY)&_ZN6S906C23v23Ev,
  (VTBL_ENTRY)&_ZN6S906C23v24Ev,
  (VTBL_ENTRY)&_ZN6S906C23v25Ev,
  (VTBL_ENTRY)&_ZN6S906C23v26Ev,
  (VTBL_ENTRY)&_ZN6S906C23v27Ev,
  (VTBL_ENTRY)&_ZN6S906C23v28Ev,
  (VTBL_ENTRY)&_ZN6S906C23v29Ev,
  (VTBL_ENTRY)&_ZN6S906C23v30Ev,
  (VTBL_ENTRY)&_ZN6S906C23v31Ev,
  (VTBL_ENTRY)&_ZN6S906C23v32Ev,
  (VTBL_ENTRY)&_ZN6S906C23v33Ev,
  (VTBL_ENTRY)&_ZN6S906C23v34Ev,
  (VTBL_ENTRY)&_ZN6S906C23v35Ev,
  (VTBL_ENTRY)&_ZN6S906C23v36Ev,
  (VTBL_ENTRY)&_ZN6S906C23v37Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S906C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S906C2D1Ev,_ZThn4_N6S906C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S906C2D0Ev,_ZThn4_N6S906C2D0Ev),
  (VTBL_ENTRY)&_ZN6S906C62v6Ev,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI6S906C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S906C2D1Ev,_ZThn60_N6S906C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S906C2D0Ev,_ZThn60_N6S906C2D0Ev),
  (VTBL_ENTRY)&_ZN7S906C113v18Ev,
};
extern VTBL_ENTRY _ZTI6S906C2[];
extern  VTBL_ENTRY _ZTV6S906C2[];
Class_Descriptor cd_S906C2 = {  "S906C2", // class name
  bases_S906C2, 5,
  &(vtc_S906C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,184), // object size
  NSPAIRA(_ZTI6S906C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S906C2),47, //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  S906C1  : S906C2 {
  virtual  ~S906C1(); // _ZN6S906C1D1Ev
  virtual void  v1(); // _ZN6S906C12v1Ev
  virtual void  v2(); // _ZN6S906C12v2Ev
  S906C1(); // tgen
};
//SIG(1 S906C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v3 v4 v5} BC6{ vd v6} vd v7 v8 v9 v10 v11 v12 v13 v14} vd v15 v16 v17 FC7{ m Fp Fi[2] FC8{ m}} FC9{ m FC10{ FL[4]}} Fc} BC11{ vd v18} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 FC12{ m FC10} FC13{ m Fp FC9 FC14{ m Fp FC15{ Fi[4]}} Fi Fc} Fc[2] FC16{ BC17{ vd v40} BC18{ vd v41} vd v38 v39 Fp[2]} Fp} vd v1 v2}


 S906C1 ::~S906C1(){ note_dtor("S906C1", this);}
void  S906C1 ::v1(){vfunc_called(this, "_ZN6S906C12v1Ev");}
void  S906C1 ::v2(){vfunc_called(this, "_ZN6S906C12v2Ev");}
S906C1 ::S906C1(){ note_ctor("S906C1", this);} // tgen

static void Test_S906C1()
{
  extern Class_Descriptor cd_S906C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,47)];
    init_test(&cd_S906C1, buf);
    S906C1 *dp, &lv = *(dp=new (buf) S906C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,184), "sizeof(S906C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S906C1)");
    check_base_class_offset(lv, (S906C5*)(S906C4*)(S906C3*)(S906C2*), 0, "S906C1");
    check_base_class_offset(lv, (S906C6*)(S906C4*)(S906C3*)(S906C2*), ABISELECT(8,4), "S906C1");
    check_base_class_offset(lv, (S906C4*)(S906C3*)(S906C2*), 0, "S906C1");
    check_base_class_offset(lv, (S906C3*)(S906C2*), 0, "S906C1");
    check_base_class_offset(lv, (S906C11*)(S906C2*), ABISELECT(80,60), "S906C1");
    check_base_class_offset(lv, (S906C2*), 0, "S906C1");
    test_class_info(&lv, &cd_S906C1);
    dp->~S906C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS906C1(Test_S906C1, "S906C1", ABISELECT(240,184));

#else // __cplusplus

extern void _ZN6S906C1C1Ev();
extern void _ZN6S906C1D1Ev();
Name_Map name_map_S906C1[] = {
  NSPAIR(_ZN6S906C1C1Ev),
  NSPAIR(_ZN6S906C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S906C5;
extern VTBL_ENTRY _ZTI6S906C5[];
extern  VTBL_ENTRY _ZTV6S906C5[];
extern Class_Descriptor cd_S906C6;
extern VTBL_ENTRY _ZTI6S906C6[];
extern  VTBL_ENTRY _ZTV6S906C6[];
extern Class_Descriptor cd_S906C4;
extern VTBL_ENTRY _ZTI6S906C4[];
extern  VTBL_ENTRY _ZTV6S906C4[];
extern Class_Descriptor cd_S906C3;
extern VTBL_ENTRY _ZTI6S906C3[];
extern  VTBL_ENTRY _ZTV6S906C3[];
extern Class_Descriptor cd_S906C11;
extern VTBL_ENTRY _ZTI7S906C11[];
extern  VTBL_ENTRY _ZTV7S906C11[];
extern Class_Descriptor cd_S906C2;
extern VTBL_ENTRY _ZTI6S906C2[];
extern  VTBL_ENTRY _ZTV6S906C2[];
static Base_Class bases_S906C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S906C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S906C6,    ABISELECT(8,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S906C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S906C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S906C11,    ABISELECT(80,60), //bcp->offset
    44, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S906C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S906C1[];
extern void _ZN6S906C1D1Ev();
extern void _ZN6S906C1D0Ev();
extern void _ZN6S906C52v3Ev();
extern void _ZN6S906C52v4Ev();
extern void _ZN6S906C52v5Ev();
extern void _ZN6S906C42v7Ev();
extern void _ZN6S906C42v8Ev();
extern void _ZN6S906C42v9Ev();
extern void _ZN6S906C43v10Ev();
extern void _ZN6S906C43v11Ev();
extern void _ZN6S906C43v12Ev();
extern void _ZN6S906C43v13Ev();
extern void _ZN6S906C43v14Ev();
extern void _ZN6S906C33v15Ev();
extern void _ZN6S906C33v16Ev();
extern void _ZN6S906C33v17Ev();
extern void _ZN6S906C23v19Ev();
extern void _ZN6S906C23v20Ev();
extern void _ZN6S906C23v21Ev();
extern void _ZN6S906C23v22Ev();
extern void _ZN6S906C23v23Ev();
extern void _ZN6S906C23v24Ev();
extern void _ZN6S906C23v25Ev();
extern void _ZN6S906C23v26Ev();
extern void _ZN6S906C23v27Ev();
extern void _ZN6S906C23v28Ev();
extern void _ZN6S906C23v29Ev();
extern void _ZN6S906C23v30Ev();
extern void _ZN6S906C23v31Ev();
extern void _ZN6S906C23v32Ev();
extern void _ZN6S906C23v33Ev();
extern void _ZN6S906C23v34Ev();
extern void _ZN6S906C23v35Ev();
extern void _ZN6S906C23v36Ev();
extern void _ZN6S906C23v37Ev();
extern void _ZN6S906C12v1Ev();
extern void _ZN6S906C12v2Ev();
extern void ABISELECT(_ZThn8_N6S906C1D1Ev,_ZThn4_N6S906C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S906C1D0Ev,_ZThn4_N6S906C1D0Ev)();
extern void _ZN6S906C62v6Ev();
extern void ABISELECT(_ZThn80_N6S906C1D1Ev,_ZThn60_N6S906C1D1Ev)();
extern void ABISELECT(_ZThn80_N6S906C1D0Ev,_ZThn60_N6S906C1D0Ev)();
extern void _ZN7S906C113v18Ev();
static  VTBL_ENTRY vtc_S906C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S906C1[0]),
  (VTBL_ENTRY)&_ZN6S906C1D1Ev,
  (VTBL_ENTRY)&_ZN6S906C1D0Ev,
  (VTBL_ENTRY)&_ZN6S906C52v3Ev,
  (VTBL_ENTRY)&_ZN6S906C52v4Ev,
  (VTBL_ENTRY)&_ZN6S906C52v5Ev,
  (VTBL_ENTRY)&_ZN6S906C42v7Ev,
  (VTBL_ENTRY)&_ZN6S906C42v8Ev,
  (VTBL_ENTRY)&_ZN6S906C42v9Ev,
  (VTBL_ENTRY)&_ZN6S906C43v10Ev,
  (VTBL_ENTRY)&_ZN6S906C43v11Ev,
  (VTBL_ENTRY)&_ZN6S906C43v12Ev,
  (VTBL_ENTRY)&_ZN6S906C43v13Ev,
  (VTBL_ENTRY)&_ZN6S906C43v14Ev,
  (VTBL_ENTRY)&_ZN6S906C33v15Ev,
  (VTBL_ENTRY)&_ZN6S906C33v16Ev,
  (VTBL_ENTRY)&_ZN6S906C33v17Ev,
  (VTBL_ENTRY)&_ZN6S906C23v19Ev,
  (VTBL_ENTRY)&_ZN6S906C23v20Ev,
  (VTBL_ENTRY)&_ZN6S906C23v21Ev,
  (VTBL_ENTRY)&_ZN6S906C23v22Ev,
  (VTBL_ENTRY)&_ZN6S906C23v23Ev,
  (VTBL_ENTRY)&_ZN6S906C23v24Ev,
  (VTBL_ENTRY)&_ZN6S906C23v25Ev,
  (VTBL_ENTRY)&_ZN6S906C23v26Ev,
  (VTBL_ENTRY)&_ZN6S906C23v27Ev,
  (VTBL_ENTRY)&_ZN6S906C23v28Ev,
  (VTBL_ENTRY)&_ZN6S906C23v29Ev,
  (VTBL_ENTRY)&_ZN6S906C23v30Ev,
  (VTBL_ENTRY)&_ZN6S906C23v31Ev,
  (VTBL_ENTRY)&_ZN6S906C23v32Ev,
  (VTBL_ENTRY)&_ZN6S906C23v33Ev,
  (VTBL_ENTRY)&_ZN6S906C23v34Ev,
  (VTBL_ENTRY)&_ZN6S906C23v35Ev,
  (VTBL_ENTRY)&_ZN6S906C23v36Ev,
  (VTBL_ENTRY)&_ZN6S906C23v37Ev,
  (VTBL_ENTRY)&_ZN6S906C12v1Ev,
  (VTBL_ENTRY)&_ZN6S906C12v2Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S906C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S906C1D1Ev,_ZThn4_N6S906C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S906C1D0Ev,_ZThn4_N6S906C1D0Ev),
  (VTBL_ENTRY)&_ZN6S906C62v6Ev,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI6S906C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S906C1D1Ev,_ZThn60_N6S906C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S906C1D0Ev,_ZThn60_N6S906C1D0Ev),
  (VTBL_ENTRY)&_ZN7S906C113v18Ev,
};
extern VTBL_ENTRY _ZTI6S906C1[];
extern  VTBL_ENTRY _ZTV6S906C1[];
Class_Descriptor cd_S906C1 = {  "S906C1", // class name
  bases_S906C1, 6,
  &(vtc_S906C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,184), // object size
  NSPAIRA(_ZTI6S906C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S906C1),49, //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  S905C5  {
  virtual  ~S905C5(); // _ZN6S905C5D1Ev
  virtual void  v3(); // _ZN6S905C52v3Ev
  virtual void  v4(); // _ZN6S905C52v4Ev
  virtual void  v5(); // _ZN6S905C52v5Ev
  S905C5(); // tgen
};
//SIG(-1 S905C5) C1{ vd v1 v2 v3}


 S905C5 ::~S905C5(){ note_dtor("S905C5", this);}
void  S905C5 ::v3(){vfunc_called(this, "_ZN6S905C52v3Ev");}
void  S905C5 ::v4(){vfunc_called(this, "_ZN6S905C52v4Ev");}
void  S905C5 ::v5(){vfunc_called(this, "_ZN6S905C52v5Ev");}
S905C5 ::S905C5(){ note_ctor("S905C5", this);} // tgen

static void Test_S905C5()
{
  extern Class_Descriptor cd_S905C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S905C5, buf);
    S905C5 *dp, &lv = *(dp=new (buf) S905C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S905C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S905C5)");
    test_class_info(&lv, &cd_S905C5);
    dp->~S905C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS905C5(Test_S905C5, "S905C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S905C5C1Ev();
extern void _ZN6S905C5D1Ev();
Name_Map name_map_S905C5[] = {
  NSPAIR(_ZN6S905C5C1Ev),
  NSPAIR(_ZN6S905C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S905C5[];
extern void _ZN6S905C5D1Ev();
extern void _ZN6S905C5D0Ev();
extern void _ZN6S905C52v3Ev();
extern void _ZN6S905C52v4Ev();
extern void _ZN6S905C52v5Ev();
static  VTBL_ENTRY vtc_S905C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S905C5[0]),
  (VTBL_ENTRY)&_ZN6S905C5D1Ev,
  (VTBL_ENTRY)&_ZN6S905C5D0Ev,
  (VTBL_ENTRY)&_ZN6S905C52v3Ev,
  (VTBL_ENTRY)&_ZN6S905C52v4Ev,
  (VTBL_ENTRY)&_ZN6S905C52v5Ev,
};
extern VTBL_ENTRY _ZTI6S905C5[];
extern  VTBL_ENTRY _ZTV6S905C5[];
Class_Descriptor cd_S905C5 = {  "S905C5", // class name
  0,0,//no base classes
  &(vtc_S905C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S905C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S905C5),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  S905C6  {
  virtual  ~S905C6(); // _ZN6S905C6D1Ev
  virtual void  v6(); // _ZN6S905C62v6Ev
  S905C6(); // tgen
};
//SIG(-1 S905C6) C1{ vd v1}


 S905C6 ::~S905C6(){ note_dtor("S905C6", this);}
void  S905C6 ::v6(){vfunc_called(this, "_ZN6S905C62v6Ev");}
S905C6 ::S905C6(){ note_ctor("S905C6", this);} // tgen

static void Test_S905C6()
{
  extern Class_Descriptor cd_S905C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S905C6, buf);
    S905C6 *dp, &lv = *(dp=new (buf) S905C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S905C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S905C6)");
    test_class_info(&lv, &cd_S905C6);
    dp->~S905C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS905C6(Test_S905C6, "S905C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S905C6C1Ev();
extern void _ZN6S905C6D1Ev();
Name_Map name_map_S905C6[] = {
  NSPAIR(_ZN6S905C6C1Ev),
  NSPAIR(_ZN6S905C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S905C6[];
extern void _ZN6S905C6D1Ev();
extern void _ZN6S905C6D0Ev();
extern void _ZN6S905C62v6Ev();
static  VTBL_ENTRY vtc_S905C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S905C6[0]),
  (VTBL_ENTRY)&_ZN6S905C6D1Ev,
  (VTBL_ENTRY)&_ZN6S905C6D0Ev,
  (VTBL_ENTRY)&_ZN6S905C62v6Ev,
};
extern VTBL_ENTRY _ZTI6S905C6[];
extern  VTBL_ENTRY _ZTV6S905C6[];
Class_Descriptor cd_S905C6 = {  "S905C6", // class name
  0,0,//no base classes
  &(vtc_S905C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S905C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S905C6),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  S905C4  : S905C5 , S905C6 {
  virtual  ~S905C4(); // _ZN6S905C4D1Ev
  virtual void  v7(); // _ZN6S905C42v7Ev
  virtual void  v8(); // _ZN6S905C42v8Ev
  virtual void  v9(); // _ZN6S905C42v9Ev
  virtual void  v10(); // _ZN6S905C43v10Ev
  virtual void  v11(); // _ZN6S905C43v11Ev
  virtual void  v12(); // _ZN6S905C43v12Ev
  virtual void  v13(); // _ZN6S905C43v13Ev
  virtual void  v14(); // _ZN6S905C43v14Ev
  S905C4(); // tgen
};
//SIG(-1 S905C4) C1{ BC2{ vd v9 v10 v11} BC3{ vd v12} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S905C4 ::~S905C4(){ note_dtor("S905C4", this);}
void  S905C4 ::v7(){vfunc_called(this, "_ZN6S905C42v7Ev");}
void  S905C4 ::v8(){vfunc_called(this, "_ZN6S905C42v8Ev");}
void  S905C4 ::v9(){vfunc_called(this, "_ZN6S905C42v9Ev");}
void  S905C4 ::v10(){vfunc_called(this, "_ZN6S905C43v10Ev");}
void  S905C4 ::v11(){vfunc_called(this, "_ZN6S905C43v11Ev");}
void  S905C4 ::v12(){vfunc_called(this, "_ZN6S905C43v12Ev");}
void  S905C4 ::v13(){vfunc_called(this, "_ZN6S905C43v13Ev");}
void  S905C4 ::v14(){vfunc_called(this, "_ZN6S905C43v14Ev");}
S905C4 ::S905C4(){ note_ctor("S905C4", this);} // tgen

static void Test_S905C4()
{
  extern Class_Descriptor cd_S905C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S905C4, buf);
    S905C4 *dp, &lv = *(dp=new (buf) S905C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S905C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S905C4)");
    check_base_class_offset(lv, (S905C5*), 0, "S905C4");
    check_base_class_offset(lv, (S905C6*), ABISELECT(8,4), "S905C4");
    test_class_info(&lv, &cd_S905C4);
    dp->~S905C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS905C4(Test_S905C4, "S905C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S905C4C1Ev();
extern void _ZN6S905C4D1Ev();
Name_Map name_map_S905C4[] = {
  NSPAIR(_ZN6S905C4C1Ev),
  NSPAIR(_ZN6S905C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S905C5;
extern VTBL_ENTRY _ZTI6S905C5[];
extern  VTBL_ENTRY _ZTV6S905C5[];
extern Class_Descriptor cd_S905C6;
extern VTBL_ENTRY _ZTI6S905C6[];
extern  VTBL_ENTRY _ZTV6S905C6[];
static Base_Class bases_S905C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S905C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S905C6,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S905C4[];
extern void _ZN6S905C4D1Ev();
extern void _ZN6S905C4D0Ev();
extern void _ZN6S905C52v3Ev();
extern void _ZN6S905C52v4Ev();
extern void _ZN6S905C52v5Ev();
extern void _ZN6S905C42v7Ev();
extern void _ZN6S905C42v8Ev();
extern void _ZN6S905C42v9Ev();
extern void _ZN6S905C43v10Ev();
extern void _ZN6S905C43v11Ev();
extern void _ZN6S905C43v12Ev();
extern void _ZN6S905C43v13Ev();
extern void _ZN6S905C43v14Ev();
extern void ABISELECT(_ZThn8_N6S905C4D1Ev,_ZThn4_N6S905C4D1Ev)();
extern void ABISELECT(_ZThn8_N6S905C4D0Ev,_ZThn4_N6S905C4D0Ev)();
extern void _ZN6S905C62v6Ev();
static  VTBL_ENTRY vtc_S905C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S905C4[0]),
  (VTBL_ENTRY)&_ZN6S905C4D1Ev,
  (VTBL_ENTRY)&_ZN6S905C4D0Ev,
  (VTBL_ENTRY)&_ZN6S905C52v3Ev,
  (VTBL_ENTRY)&_ZN6S905C52v4Ev,
  (VTBL_ENTRY)&_ZN6S905C52v5Ev,
  (VTBL_ENTRY)&_ZN6S905C42v7Ev,
  (VTBL_ENTRY)&_ZN6S905C42v8Ev,
  (VTBL_ENTRY)&_ZN6S905C42v9Ev,
  (VTBL_ENTRY)&_ZN6S905C43v10Ev,
  (VTBL_ENTRY)&_ZN6S905C43v11Ev,
  (VTBL_ENTRY)&_ZN6S905C43v12Ev,
  (VTBL_ENTRY)&_ZN6S905C43v13Ev,
  (VTBL_ENTRY)&_ZN6S905C43v14Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S905C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S905C4D1Ev,_ZThn4_N6S905C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S905C4D0Ev,_ZThn4_N6S905C4D0Ev),
  (VTBL_ENTRY)&_ZN6S905C62v6Ev,
};
extern VTBL_ENTRY _ZTI6S905C4[];
extern  VTBL_ENTRY _ZTV6S905C4[];
Class_Descriptor cd_S905C4 = {  "S905C4", // class name
  bases_S905C4, 2,
  &(vtc_S905C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S905C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S905C4),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S905C3  : S905C4 {
  ::S5408C15_nt s905c3f0;
  ::S856C9_nt s905c3f1;
  char s905c3f2;
  virtual  ~S905C3(); // _ZN6S905C3D1Ev
  virtual void  v15(); // _ZN6S905C33v15Ev
  virtual void  v16(); // _ZN6S905C33v16Ev
  virtual void  v17(); // _ZN6S905C33v17Ev
  S905C3(); // tgen
};
//SIG(-1 S905C3) C1{ BC2{ BC3{ vd v4 v5 v6} BC4{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15} vd v1 v2 v3 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ Fl[4]}} Fc}


 S905C3 ::~S905C3(){ note_dtor("S905C3", this);}
void  S905C3 ::v15(){vfunc_called(this, "_ZN6S905C33v15Ev");}
void  S905C3 ::v16(){vfunc_called(this, "_ZN6S905C33v16Ev");}
void  S905C3 ::v17(){vfunc_called(this, "_ZN6S905C33v17Ev");}
S905C3 ::S905C3(){ note_ctor("S905C3", this);} // tgen

static void Test_S905C3()
{
  extern Class_Descriptor cd_S905C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S905C3, buf);
    S905C3 *dp, &lv = *(dp=new (buf) S905C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S905C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S905C3)");
    check_base_class_offset(lv, (S905C5*)(S905C4*), 0, "S905C3");
    check_base_class_offset(lv, (S905C6*)(S905C4*), ABISELECT(8,4), "S905C3");
    check_base_class_offset(lv, (S905C4*), 0, "S905C3");
    check_field_offset(lv, s905c3f0, ABISELECT(16,8), "S905C3.s905c3f0");
    check_field_offset(lv, s905c3f1, ABISELECT(40,24), "S905C3.s905c3f1");
    check_field_offset(lv, s905c3f2, ABISELECT(72,40), "S905C3.s905c3f2");
    test_class_info(&lv, &cd_S905C3);
    dp->~S905C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS905C3(Test_S905C3, "S905C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S905C3C1Ev();
extern void _ZN6S905C3D1Ev();
Name_Map name_map_S905C3[] = {
  NSPAIR(_ZN6S905C3C1Ev),
  NSPAIR(_ZN6S905C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S905C5;
extern VTBL_ENTRY _ZTI6S905C5[];
extern  VTBL_ENTRY _ZTV6S905C5[];
extern Class_Descriptor cd_S905C6;
extern VTBL_ENTRY _ZTI6S905C6[];
extern  VTBL_ENTRY _ZTV6S905C6[];
extern Class_Descriptor cd_S905C4;
extern VTBL_ENTRY _ZTI6S905C4[];
extern  VTBL_ENTRY _ZTV6S905C4[];
static Base_Class bases_S905C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S905C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S905C6,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S905C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S905C3[];
extern void _ZN6S905C3D1Ev();
extern void _ZN6S905C3D0Ev();
extern void _ZN6S905C52v3Ev();
extern void _ZN6S905C52v4Ev();
extern void _ZN6S905C52v5Ev();
extern void _ZN6S905C42v7Ev();
extern void _ZN6S905C42v8Ev();
extern void _ZN6S905C42v9Ev();
extern void _ZN6S905C43v10Ev();
extern void _ZN6S905C43v11Ev();
extern void _ZN6S905C43v12Ev();
extern void _ZN6S905C43v13Ev();
extern void _ZN6S905C43v14Ev();
extern void _ZN6S905C33v15Ev();
extern void _ZN6S905C33v16Ev();
extern void _ZN6S905C33v17Ev();
extern void ABISELECT(_ZThn8_N6S905C3D1Ev,_ZThn4_N6S905C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S905C3D0Ev,_ZThn4_N6S905C3D0Ev)();
extern void _ZN6S905C62v6Ev();
static  VTBL_ENTRY vtc_S905C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S905C3[0]),
  (VTBL_ENTRY)&_ZN6S905C3D1Ev,
  (VTBL_ENTRY)&_ZN6S905C3D0Ev,
  (VTBL_ENTRY)&_ZN6S905C52v3Ev,
  (VTBL_ENTRY)&_ZN6S905C52v4Ev,
  (VTBL_ENTRY)&_ZN6S905C52v5Ev,
  (VTBL_ENTRY)&_ZN6S905C42v7Ev,
  (VTBL_ENTRY)&_ZN6S905C42v8Ev,
  (VTBL_ENTRY)&_ZN6S905C42v9Ev,
  (VTBL_ENTRY)&_ZN6S905C43v10Ev,
  (VTBL_ENTRY)&_ZN6S905C43v11Ev,
  (VTBL_ENTRY)&_ZN6S905C43v12Ev,
  (VTBL_ENTRY)&_ZN6S905C43v13Ev,
  (VTBL_ENTRY)&_ZN6S905C43v14Ev,
  (VTBL_ENTRY)&_ZN6S905C33v15Ev,
  (VTBL_ENTRY)&_ZN6S905C33v16Ev,
  (VTBL_ENTRY)&_ZN6S905C33v17Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S905C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S905C3D1Ev,_ZThn4_N6S905C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S905C3D0Ev,_ZThn4_N6S905C3D0Ev),
  (VTBL_ENTRY)&_ZN6S905C62v6Ev,
};
extern VTBL_ENTRY _ZTI6S905C3[];
extern  VTBL_ENTRY _ZTV6S905C3[];
Class_Descriptor cd_S905C3 = {  "S905C3", // class name
  bases_S905C3, 3,
  &(vtc_S905C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S905C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S905C3),23, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S905C11  {
  virtual  ~S905C11(); // _ZN7S905C11D1Ev
  virtual void  v18(); // _ZN7S905C113v18Ev
  S905C11(); // tgen
};
//SIG(-1 S905C11) C1{ vd v1}


 S905C11 ::~S905C11(){ note_dtor("S905C11", this);}
void  S905C11 ::v18(){vfunc_called(this, "_ZN7S905C113v18Ev");}
S905C11 ::S905C11(){ note_ctor("S905C11", this);} // tgen

static void Test_S905C11()
{
  extern Class_Descriptor cd_S905C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S905C11, buf);
    S905C11 *dp, &lv = *(dp=new (buf) S905C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S905C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S905C11)");
    test_class_info(&lv, &cd_S905C11);
    dp->~S905C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS905C11(Test_S905C11, "S905C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S905C11C1Ev();
extern void _ZN7S905C11D1Ev();
Name_Map name_map_S905C11[] = {
  NSPAIR(_ZN7S905C11C1Ev),
  NSPAIR(_ZN7S905C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S905C11[];
extern void _ZN7S905C11D1Ev();
extern void _ZN7S905C11D0Ev();
extern void _ZN7S905C113v18Ev();
static  VTBL_ENTRY vtc_S905C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S905C11[0]),
  (VTBL_ENTRY)&_ZN7S905C11D1Ev,
  (VTBL_ENTRY)&_ZN7S905C11D0Ev,
  (VTBL_ENTRY)&_ZN7S905C113v18Ev,
};
extern VTBL_ENTRY _ZTI7S905C11[];
extern  VTBL_ENTRY _ZTV7S905C11[];
Class_Descriptor cd_S905C11 = {  "S905C11", // class name
  0,0,//no base classes
  &(vtc_S905C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S905C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S905C11),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  S905C2  : S905C3 , S905C11 {
  ::S852C12 s905c2f0;
  ::S856C13_nt s905c2f1;
  char s905c2f2[2];
  ::S857C16 s905c2f3;
  void *s905c2f4;
  virtual  ~S905C2(); // _ZN6S905C2D1Ev
  virtual void  v19(); // _ZN6S905C23v19Ev
  virtual void  v20(); // _ZN6S905C23v20Ev
  virtual void  v21(); // _ZN6S905C23v21Ev
  virtual void  v22(); // _ZN6S905C23v22Ev
  virtual void  v23(); // _ZN6S905C23v23Ev
  virtual void  v24(); // _ZN6S905C23v24Ev
  virtual void  v25(); // _ZN6S905C23v25Ev
  virtual void  v26(); // _ZN6S905C23v26Ev
  virtual void  v27(); // _ZN6S905C23v27Ev
  virtual void  v28(); // _ZN6S905C23v28Ev
  virtual void  v29(); // _ZN6S905C23v29Ev
  virtual void  v30(); // _ZN6S905C23v30Ev
  virtual void  v31(); // _ZN6S905C23v31Ev
  virtual void  v32(); // _ZN6S905C23v32Ev
  virtual void  v33(); // _ZN6S905C23v33Ev
  virtual void  v34(); // _ZN6S905C23v34Ev
  virtual void  v35(); // _ZN6S905C23v35Ev
  virtual void  v36(); // _ZN6S905C23v36Ev
  virtual void  v37(); // _ZN6S905C23v37Ev
  S905C2(); // tgen
};
//SIG(-1 S905C2) C1{ BC2{ BC3{ BC4{ vd v20 v21 v22} BC5{ vd v23} vd v24 v25 v26 v27 v28 v29 v30 v31} vd v32 v33 v34 FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FC9{ Fl[4]}} Fc} BC10{ vd v35} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC11{ m FC9} FC12{ m Fp FC8 FC13{ m Fp FC14{ Fi[4]}} Fi Fc} Fc[2] FC15{ BC16{ vd v38} BC17{ vd v39} vd v36 v37 Fp[2]} Fp}


 S905C2 ::~S905C2(){ note_dtor("S905C2", this);}
void  S905C2 ::v19(){vfunc_called(this, "_ZN6S905C23v19Ev");}
void  S905C2 ::v20(){vfunc_called(this, "_ZN6S905C23v20Ev");}
void  S905C2 ::v21(){vfunc_called(this, "_ZN6S905C23v21Ev");}
void  S905C2 ::v22(){vfunc_called(this, "_ZN6S905C23v22Ev");}
void  S905C2 ::v23(){vfunc_called(this, "_ZN6S905C23v23Ev");}
void  S905C2 ::v24(){vfunc_called(this, "_ZN6S905C23v24Ev");}
void  S905C2 ::v25(){vfunc_called(this, "_ZN6S905C23v25Ev");}
void  S905C2 ::v26(){vfunc_called(this, "_ZN6S905C23v26Ev");}
void  S905C2 ::v27(){vfunc_called(this, "_ZN6S905C23v27Ev");}
void  S905C2 ::v28(){vfunc_called(this, "_ZN6S905C23v28Ev");}
void  S905C2 ::v29(){vfunc_called(this, "_ZN6S905C23v29Ev");}
void  S905C2 ::v30(){vfunc_called(this, "_ZN6S905C23v30Ev");}
void  S905C2 ::v31(){vfunc_called(this, "_ZN6S905C23v31Ev");}
void  S905C2 ::v32(){vfunc_called(this, "_ZN6S905C23v32Ev");}
void  S905C2 ::v33(){vfunc_called(this, "_ZN6S905C23v33Ev");}
void  S905C2 ::v34(){vfunc_called(this, "_ZN6S905C23v34Ev");}
void  S905C2 ::v35(){vfunc_called(this, "_ZN6S905C23v35Ev");}
void  S905C2 ::v36(){vfunc_called(this, "_ZN6S905C23v36Ev");}
void  S905C2 ::v37(){vfunc_called(this, "_ZN6S905C23v37Ev");}
S905C2 ::S905C2(){ note_ctor("S905C2", this);} // tgen

static void Test_S905C2()
{
  extern Class_Descriptor cd_S905C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,35)];
    init_test(&cd_S905C2, buf);
    S905C2 *dp, &lv = *(dp=new (buf) S905C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,136), "sizeof(S905C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S905C2)");
    check_base_class_offset(lv, (S905C5*)(S905C4*)(S905C3*), 0, "S905C2");
    check_base_class_offset(lv, (S905C6*)(S905C4*)(S905C3*), ABISELECT(8,4), "S905C2");
    check_base_class_offset(lv, (S905C4*)(S905C3*), 0, "S905C2");
    check_base_class_offset(lv, (S905C3*), 0, "S905C2");
    check_base_class_offset(lv, (S905C11*), ABISELECT(80,44), "S905C2");
    check_field_offset(lv, s905c2f0, ABISELECT(88,48), "S905C2.s905c2f0");
    check_field_offset(lv, s905c2f1, ABISELECT(120,64), "S905C2.s905c2f1");
    check_field_offset(lv, s905c2f2, ABISELECT(192,112), "S905C2.s905c2f2");
    check_field_offset(lv, s905c2f3, ABISELECT(200,116), "S905C2.s905c2f3");
    check_field_offset(lv, s905c2f4, ABISELECT(232,132), "S905C2.s905c2f4");
    test_class_info(&lv, &cd_S905C2);
    dp->~S905C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS905C2(Test_S905C2, "S905C2", ABISELECT(240,136));

#else // __cplusplus

extern void _ZN6S905C2C1Ev();
extern void _ZN6S905C2D1Ev();
Name_Map name_map_S905C2[] = {
  NSPAIR(_ZN6S905C2C1Ev),
  NSPAIR(_ZN6S905C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S905C5;
extern VTBL_ENTRY _ZTI6S905C5[];
extern  VTBL_ENTRY _ZTV6S905C5[];
extern Class_Descriptor cd_S905C6;
extern VTBL_ENTRY _ZTI6S905C6[];
extern  VTBL_ENTRY _ZTV6S905C6[];
extern Class_Descriptor cd_S905C4;
extern VTBL_ENTRY _ZTI6S905C4[];
extern  VTBL_ENTRY _ZTV6S905C4[];
extern Class_Descriptor cd_S905C3;
extern VTBL_ENTRY _ZTI6S905C3[];
extern  VTBL_ENTRY _ZTV6S905C3[];
extern Class_Descriptor cd_S905C11;
extern VTBL_ENTRY _ZTI7S905C11[];
extern  VTBL_ENTRY _ZTV7S905C11[];
static Base_Class bases_S905C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S905C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S905C6,    ABISELECT(8,4), //bcp->offset
    37, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S905C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S905C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S905C11,    ABISELECT(80,44), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S905C2[];
extern void _ZN6S905C2D1Ev();
extern void _ZN6S905C2D0Ev();
extern void _ZN6S905C52v3Ev();
extern void _ZN6S905C52v4Ev();
extern void _ZN6S905C52v5Ev();
extern void _ZN6S905C42v7Ev();
extern void _ZN6S905C42v8Ev();
extern void _ZN6S905C42v9Ev();
extern void _ZN6S905C43v10Ev();
extern void _ZN6S905C43v11Ev();
extern void _ZN6S905C43v12Ev();
extern void _ZN6S905C43v13Ev();
extern void _ZN6S905C43v14Ev();
extern void _ZN6S905C33v15Ev();
extern void _ZN6S905C33v16Ev();
extern void _ZN6S905C33v17Ev();
extern void _ZN6S905C23v19Ev();
extern void _ZN6S905C23v20Ev();
extern void _ZN6S905C23v21Ev();
extern void _ZN6S905C23v22Ev();
extern void _ZN6S905C23v23Ev();
extern void _ZN6S905C23v24Ev();
extern void _ZN6S905C23v25Ev();
extern void _ZN6S905C23v26Ev();
extern void _ZN6S905C23v27Ev();
extern void _ZN6S905C23v28Ev();
extern void _ZN6S905C23v29Ev();
extern void _ZN6S905C23v30Ev();
extern void _ZN6S905C23v31Ev();
extern void _ZN6S905C23v32Ev();
extern void _ZN6S905C23v33Ev();
extern void _ZN6S905C23v34Ev();
extern void _ZN6S905C23v35Ev();
extern void _ZN6S905C23v36Ev();
extern void _ZN6S905C23v37Ev();
extern void ABISELECT(_ZThn8_N6S905C2D1Ev,_ZThn4_N6S905C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S905C2D0Ev,_ZThn4_N6S905C2D0Ev)();
extern void _ZN6S905C62v6Ev();
extern void ABISELECT(_ZThn80_N6S905C2D1Ev,_ZThn44_N6S905C2D1Ev)();
extern void ABISELECT(_ZThn80_N6S905C2D0Ev,_ZThn44_N6S905C2D0Ev)();
extern void _ZN7S905C113v18Ev();
static  VTBL_ENTRY vtc_S905C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S905C2[0]),
  (VTBL_ENTRY)&_ZN6S905C2D1Ev,
  (VTBL_ENTRY)&_ZN6S905C2D0Ev,
  (VTBL_ENTRY)&_ZN6S905C52v3Ev,
  (VTBL_ENTRY)&_ZN6S905C52v4Ev,
  (VTBL_ENTRY)&_ZN6S905C52v5Ev,
  (VTBL_ENTRY)&_ZN6S905C42v7Ev,
  (VTBL_ENTRY)&_ZN6S905C42v8Ev,
  (VTBL_ENTRY)&_ZN6S905C42v9Ev,
  (VTBL_ENTRY)&_ZN6S905C43v10Ev,
  (VTBL_ENTRY)&_ZN6S905C43v11Ev,
  (VTBL_ENTRY)&_ZN6S905C43v12Ev,
  (VTBL_ENTRY)&_ZN6S905C43v13Ev,
  (VTBL_ENTRY)&_ZN6S905C43v14Ev,
  (VTBL_ENTRY)&_ZN6S905C33v15Ev,
  (VTBL_ENTRY)&_ZN6S905C33v16Ev,
  (VTBL_ENTRY)&_ZN6S905C33v17Ev,
  (VTBL_ENTRY)&_ZN6S905C23v19Ev,
  (VTBL_ENTRY)&_ZN6S905C23v20Ev,
  (VTBL_ENTRY)&_ZN6S905C23v21Ev,
  (VTBL_ENTRY)&_ZN6S905C23v22Ev,
  (VTBL_ENTRY)&_ZN6S905C23v23Ev,
  (VTBL_ENTRY)&_ZN6S905C23v24Ev,
  (VTBL_ENTRY)&_ZN6S905C23v25Ev,
  (VTBL_ENTRY)&_ZN6S905C23v26Ev,
  (VTBL_ENTRY)&_ZN6S905C23v27Ev,
  (VTBL_ENTRY)&_ZN6S905C23v28Ev,
  (VTBL_ENTRY)&_ZN6S905C23v29Ev,
  (VTBL_ENTRY)&_ZN6S905C23v30Ev,
  (VTBL_ENTRY)&_ZN6S905C23v31Ev,
  (VTBL_ENTRY)&_ZN6S905C23v32Ev,
  (VTBL_ENTRY)&_ZN6S905C23v33Ev,
  (VTBL_ENTRY)&_ZN6S905C23v34Ev,
  (VTBL_ENTRY)&_ZN6S905C23v35Ev,
  (VTBL_ENTRY)&_ZN6S905C23v36Ev,
  (VTBL_ENTRY)&_ZN6S905C23v37Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S905C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S905C2D1Ev,_ZThn4_N6S905C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S905C2D0Ev,_ZThn4_N6S905C2D0Ev),
  (VTBL_ENTRY)&_ZN6S905C62v6Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI6S905C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S905C2D1Ev,_ZThn44_N6S905C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S905C2D0Ev,_ZThn44_N6S905C2D0Ev),
  (VTBL_ENTRY)&_ZN7S905C113v18Ev,
};
extern VTBL_ENTRY _ZTI6S905C2[];
extern  VTBL_ENTRY _ZTV6S905C2[];
Class_Descriptor cd_S905C2 = {  "S905C2", // class name
  bases_S905C2, 5,
  &(vtc_S905C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,136), // object size
  NSPAIRA(_ZTI6S905C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S905C2),47, //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  S905C1  : S905C2 {
  virtual  ~S905C1(); // _ZN6S905C1D1Ev
  virtual void  v1(); // _ZN6S905C12v1Ev
  virtual void  v2(); // _ZN6S905C12v2Ev
  S905C1(); // tgen
};
//SIG(1 S905C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v3 v4 v5} BC6{ vd v6} vd v7 v8 v9 v10 v11 v12 v13 v14} vd v15 v16 v17 FC7{ m Fp Fi[2] FC8{ m}} FC9{ m FC10{ Fl[4]}} Fc} BC11{ vd v18} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 FC12{ m FC10} FC13{ m Fp FC9 FC14{ m Fp FC15{ Fi[4]}} Fi Fc} Fc[2] FC16{ BC17{ vd v40} BC18{ vd v41} vd v38 v39 Fp[2]} Fp} vd v1 v2}


 S905C1 ::~S905C1(){ note_dtor("S905C1", this);}
void  S905C1 ::v1(){vfunc_called(this, "_ZN6S905C12v1Ev");}
void  S905C1 ::v2(){vfunc_called(this, "_ZN6S905C12v2Ev");}
S905C1 ::S905C1(){ note_ctor("S905C1", this);} // tgen

static void Test_S905C1()
{
  extern Class_Descriptor cd_S905C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,35)];
    init_test(&cd_S905C1, buf);
    S905C1 *dp, &lv = *(dp=new (buf) S905C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,136), "sizeof(S905C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S905C1)");
    check_base_class_offset(lv, (S905C5*)(S905C4*)(S905C3*)(S905C2*), 0, "S905C1");
    check_base_class_offset(lv, (S905C6*)(S905C4*)(S905C3*)(S905C2*), ABISELECT(8,4), "S905C1");
    check_base_class_offset(lv, (S905C4*)(S905C3*)(S905C2*), 0, "S905C1");
    check_base_class_offset(lv, (S905C3*)(S905C2*), 0, "S905C1");
    check_base_class_offset(lv, (S905C11*)(S905C2*), ABISELECT(80,44), "S905C1");
    check_base_class_offset(lv, (S905C2*), 0, "S905C1");
    test_class_info(&lv, &cd_S905C1);
    dp->~S905C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS905C1(Test_S905C1, "S905C1", ABISELECT(240,136));

#else // __cplusplus

extern void _ZN6S905C1C1Ev();
extern void _ZN6S905C1D1Ev();
Name_Map name_map_S905C1[] = {
  NSPAIR(_ZN6S905C1C1Ev),
  NSPAIR(_ZN6S905C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S905C5;
extern VTBL_ENTRY _ZTI6S905C5[];
extern  VTBL_ENTRY _ZTV6S905C5[];
extern Class_Descriptor cd_S905C6;
extern VTBL_ENTRY _ZTI6S905C6[];
extern  VTBL_ENTRY _ZTV6S905C6[];
extern Class_Descriptor cd_S905C4;
extern VTBL_ENTRY _ZTI6S905C4[];
extern  VTBL_ENTRY _ZTV6S905C4[];
extern Class_Descriptor cd_S905C3;
extern VTBL_ENTRY _ZTI6S905C3[];
extern  VTBL_ENTRY _ZTV6S905C3[];
extern Class_Descriptor cd_S905C11;
extern VTBL_ENTRY _ZTI7S905C11[];
extern  VTBL_ENTRY _ZTV7S905C11[];
extern Class_Descriptor cd_S905C2;
extern VTBL_ENTRY _ZTI6S905C2[];
extern  VTBL_ENTRY _ZTV6S905C2[];
static Base_Class bases_S905C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S905C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S905C6,    ABISELECT(8,4), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S905C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S905C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S905C11,    ABISELECT(80,44), //bcp->offset
    44, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S905C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S905C1[];
extern void _ZN6S905C1D1Ev();
extern void _ZN6S905C1D0Ev();
extern void _ZN6S905C52v3Ev();
extern void _ZN6S905C52v4Ev();
extern void _ZN6S905C52v5Ev();
extern void _ZN6S905C42v7Ev();
extern void _ZN6S905C42v8Ev();
extern void _ZN6S905C42v9Ev();
extern void _ZN6S905C43v10Ev();
extern void _ZN6S905C43v11Ev();
extern void _ZN6S905C43v12Ev();
extern void _ZN6S905C43v13Ev();
extern void _ZN6S905C43v14Ev();
extern void _ZN6S905C33v15Ev();
extern void _ZN6S905C33v16Ev();
extern void _ZN6S905C33v17Ev();
extern void _ZN6S905C23v19Ev();
extern void _ZN6S905C23v20Ev();
extern void _ZN6S905C23v21Ev();
extern void _ZN6S905C23v22Ev();
extern void _ZN6S905C23v23Ev();
extern void _ZN6S905C23v24Ev();
extern void _ZN6S905C23v25Ev();
extern void _ZN6S905C23v26Ev();
extern void _ZN6S905C23v27Ev();
extern void _ZN6S905C23v28Ev();
extern void _ZN6S905C23v29Ev();
extern void _ZN6S905C23v30Ev();
extern void _ZN6S905C23v31Ev();
extern void _ZN6S905C23v32Ev();
extern void _ZN6S905C23v33Ev();
extern void _ZN6S905C23v34Ev();
extern void _ZN6S905C23v35Ev();
extern void _ZN6S905C23v36Ev();
extern void _ZN6S905C23v37Ev();
extern void _ZN6S905C12v1Ev();
extern void _ZN6S905C12v2Ev();
extern void ABISELECT(_ZThn8_N6S905C1D1Ev,_ZThn4_N6S905C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S905C1D0Ev,_ZThn4_N6S905C1D0Ev)();
extern void _ZN6S905C62v6Ev();
extern void ABISELECT(_ZThn80_N6S905C1D1Ev,_ZThn44_N6S905C1D1Ev)();
extern void ABISELECT(_ZThn80_N6S905C1D0Ev,_ZThn44_N6S905C1D0Ev)();
extern void _ZN7S905C113v18Ev();
static  VTBL_ENTRY vtc_S905C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S905C1[0]),
  (VTBL_ENTRY)&_ZN6S905C1D1Ev,
  (VTBL_ENTRY)&_ZN6S905C1D0Ev,
  (VTBL_ENTRY)&_ZN6S905C52v3Ev,
  (VTBL_ENTRY)&_ZN6S905C52v4Ev,
  (VTBL_ENTRY)&_ZN6S905C52v5Ev,
  (VTBL_ENTRY)&_ZN6S905C42v7Ev,
  (VTBL_ENTRY)&_ZN6S905C42v8Ev,
  (VTBL_ENTRY)&_ZN6S905C42v9Ev,
  (VTBL_ENTRY)&_ZN6S905C43v10Ev,
  (VTBL_ENTRY)&_ZN6S905C43v11Ev,
  (VTBL_ENTRY)&_ZN6S905C43v12Ev,
  (VTBL_ENTRY)&_ZN6S905C43v13Ev,
  (VTBL_ENTRY)&_ZN6S905C43v14Ev,
  (VTBL_ENTRY)&_ZN6S905C33v15Ev,
  (VTBL_ENTRY)&_ZN6S905C33v16Ev,
  (VTBL_ENTRY)&_ZN6S905C33v17Ev,
  (VTBL_ENTRY)&_ZN6S905C23v19Ev,
  (VTBL_ENTRY)&_ZN6S905C23v20Ev,
  (VTBL_ENTRY)&_ZN6S905C23v21Ev,
  (VTBL_ENTRY)&_ZN6S905C23v22Ev,
  (VTBL_ENTRY)&_ZN6S905C23v23Ev,
  (VTBL_ENTRY)&_ZN6S905C23v24Ev,
  (VTBL_ENTRY)&_ZN6S905C23v25Ev,
  (VTBL_ENTRY)&_ZN6S905C23v26Ev,
  (VTBL_ENTRY)&_ZN6S905C23v27Ev,
  (VTBL_ENTRY)&_ZN6S905C23v28Ev,
  (VTBL_ENTRY)&_ZN6S905C23v29Ev,
  (VTBL_ENTRY)&_ZN6S905C23v30Ev,
  (VTBL_ENTRY)&_ZN6S905C23v31Ev,
  (VTBL_ENTRY)&_ZN6S905C23v32Ev,
  (VTBL_ENTRY)&_ZN6S905C23v33Ev,
  (VTBL_ENTRY)&_ZN6S905C23v34Ev,
  (VTBL_ENTRY)&_ZN6S905C23v35Ev,
  (VTBL_ENTRY)&_ZN6S905C23v36Ev,
  (VTBL_ENTRY)&_ZN6S905C23v37Ev,
  (VTBL_ENTRY)&_ZN6S905C12v1Ev,
  (VTBL_ENTRY)&_ZN6S905C12v2Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S905C1D1Ev,_ZThn4_N6S905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S905C1D0Ev,_ZThn4_N6S905C1D0Ev),
  (VTBL_ENTRY)&_ZN6S905C62v6Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI6S905C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S905C1D1Ev,_ZThn44_N6S905C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N6S905C1D0Ev,_ZThn44_N6S905C1D0Ev),
  (VTBL_ENTRY)&_ZN7S905C113v18Ev,
};
extern VTBL_ENTRY _ZTI6S905C1[];
extern  VTBL_ENTRY _ZTV6S905C1[];
Class_Descriptor cd_S905C1 = {  "S905C1", // class name
  bases_S905C1, 6,
  &(vtc_S905C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,136), // object size
  NSPAIRA(_ZTI6S905C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S905C1),49, //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  S13392C1  {
  int s13392c1f0[3];
  void *s13392c1f1[2];
  int s13392c1f2[5];
  __tsi64 s13392c1f3[3];
  int s13392c1f4[3];
  ::S13388C2 s13392c1f5;
  void *s13392c1f6[3];
  ::S13388C4 s13392c1f7;
  ::S13388C5 s13392c1f8;
  void *s13392c1f9;
  void *s13392c1f10;
  void *s13392c1f11;
  void *s13392c1f12;
  void *s13392c1f13;
  void *s13392c1f14;
  void *s13392c1f15;
  char s13392c1f16[256];
  char s13392c1f17[256];
  void *s13392c1f18;
  void *s13392c1f19;
  void *s13392c1f20;
  int s13392c1f21;
  int s13392c1f22;
  int s13392c1f23;
  int s13392c1f24;
  int s13392c1f25;
  int s13392c1f26;
  int s13392c1f27;
  int s13392c1f28;
  int s13392c1f29;
  int s13392c1f30;
  ::S857C10_nt s13392c1f31;
  void *s13392c1f32;
  int s13392c1f33;
  int s13392c1f34;
  int s13392c1f35;
  int s13392c1f36;
  void *s13392c1f37;
  int s13392c1f38;
  int s13392c1f39;
  int s13392c1f40;
  int s13392c1f41;
  int s13392c1f42;
  char s13392c1f43[11];
  int s13392c1f44;
  int s13392c1f45;
  int s13392c1f46;
};
//SIG(1 S13392C1) C1{ Fi[3] Fp[2] Fi[5] FL[3] Fi[3] FC2{ Fi[3] Fp[2] Fi[24] Fp[15] FC3{ Fp[3]} Fp Fi Fp[2] Fs Fc Fi Fc[13]} Fp[3] FU4{ Fp} FC5{ FL Fi Fi Fi Fi Fi Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fi} Fp Fp Fp Fp Fp Fp Fp Fc[256] Fc[256] Fp Fp Fp Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi FC6{ FL[4]} Fp Fi Fi Fi Fi Fp Fi Fi Fi Fi Fi Fc[11] Fi Fi Fi}



static void Test_S13392C1()
{
  {
    init_simple_test("S13392C1");
    S13392C1 lv;
    check2(sizeof(lv), ABISELECT(1360,1112), "sizeof(S13392C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13392C1)");
    check_field_offset(lv, s13392c1f0, 0, "S13392C1.s13392c1f0");
    check_field_offset(lv, s13392c1f1, ABISELECT(16,12), "S13392C1.s13392c1f1");
    check_field_offset(lv, s13392c1f2, ABISELECT(32,20), "S13392C1.s13392c1f2");
    check_field_offset(lv, s13392c1f3, ABISELECT(56,40), "S13392C1.s13392c1f3");
    check_field_offset(lv, s13392c1f4, ABISELECT(80,64), "S13392C1.s13392c1f4");
    check_field_offset(lv, s13392c1f5, ABISELECT(96,76), "S13392C1.s13392c1f5");
    check_field_offset(lv, s13392c1f6, ABISELECT(424,304), "S13392C1.s13392c1f6");
    check_field_offset(lv, s13392c1f7, ABISELECT(448,316), "S13392C1.s13392c1f7");
    check_field_offset(lv, s13392c1f8, ABISELECT(456,320), "S13392C1.s13392c1f8");
    check_field_offset(lv, s13392c1f9, ABISELECT(616,420), "S13392C1.s13392c1f9");
    check_field_offset(lv, s13392c1f10, ABISELECT(624,424), "S13392C1.s13392c1f10");
    check_field_offset(lv, s13392c1f11, ABISELECT(632,428), "S13392C1.s13392c1f11");
    check_field_offset(lv, s13392c1f12, ABISELECT(640,432), "S13392C1.s13392c1f12");
    check_field_offset(lv, s13392c1f13, ABISELECT(648,436), "S13392C1.s13392c1f13");
    check_field_offset(lv, s13392c1f14, ABISELECT(656,440), "S13392C1.s13392c1f14");
    check_field_offset(lv, s13392c1f15, ABISELECT(664,444), "S13392C1.s13392c1f15");
    check_field_offset(lv, s13392c1f16, ABISELECT(672,448), "S13392C1.s13392c1f16");
    check_field_offset(lv, s13392c1f17, ABISELECT(928,704), "S13392C1.s13392c1f17");
    check_field_offset(lv, s13392c1f18, ABISELECT(1184,960), "S13392C1.s13392c1f18");
    check_field_offset(lv, s13392c1f19, ABISELECT(1192,964), "S13392C1.s13392c1f19");
    check_field_offset(lv, s13392c1f20, ABISELECT(1200,968), "S13392C1.s13392c1f20");
    check_field_offset(lv, s13392c1f21, ABISELECT(1208,972), "S13392C1.s13392c1f21");
    check_field_offset(lv, s13392c1f22, ABISELECT(1212,976), "S13392C1.s13392c1f22");
    check_field_offset(lv, s13392c1f23, ABISELECT(1216,980), "S13392C1.s13392c1f23");
    check_field_offset(lv, s13392c1f24, ABISELECT(1220,984), "S13392C1.s13392c1f24");
    check_field_offset(lv, s13392c1f25, ABISELECT(1224,988), "S13392C1.s13392c1f25");
    check_field_offset(lv, s13392c1f26, ABISELECT(1228,992), "S13392C1.s13392c1f26");
    check_field_offset(lv, s13392c1f27, ABISELECT(1232,996), "S13392C1.s13392c1f27");
    check_field_offset(lv, s13392c1f28, ABISELECT(1236,1000), "S13392C1.s13392c1f28");
    check_field_offset(lv, s13392c1f29, ABISELECT(1240,1004), "S13392C1.s13392c1f29");
    check_field_offset(lv, s13392c1f30, ABISELECT(1244,1008), "S13392C1.s13392c1f30");
    check_field_offset(lv, s13392c1f31, ABISELECT(1248,1012), "S13392C1.s13392c1f31");
    check_field_offset(lv, s13392c1f32, ABISELECT(1280,1044), "S13392C1.s13392c1f32");
    check_field_offset(lv, s13392c1f33, ABISELECT(1288,1048), "S13392C1.s13392c1f33");
    check_field_offset(lv, s13392c1f34, ABISELECT(1292,1052), "S13392C1.s13392c1f34");
    check_field_offset(lv, s13392c1f35, ABISELECT(1296,1056), "S13392C1.s13392c1f35");
    check_field_offset(lv, s13392c1f36, ABISELECT(1300,1060), "S13392C1.s13392c1f36");
    check_field_offset(lv, s13392c1f37, ABISELECT(1304,1064), "S13392C1.s13392c1f37");
    check_field_offset(lv, s13392c1f38, ABISELECT(1312,1068), "S13392C1.s13392c1f38");
    check_field_offset(lv, s13392c1f39, ABISELECT(1316,1072), "S13392C1.s13392c1f39");
    check_field_offset(lv, s13392c1f40, ABISELECT(1320,1076), "S13392C1.s13392c1f40");
    check_field_offset(lv, s13392c1f41, ABISELECT(1324,1080), "S13392C1.s13392c1f41");
    check_field_offset(lv, s13392c1f42, ABISELECT(1328,1084), "S13392C1.s13392c1f42");
    check_field_offset(lv, s13392c1f43, ABISELECT(1332,1088), "S13392C1.s13392c1f43");
    check_field_offset(lv, s13392c1f44, ABISELECT(1344,1100), "S13392C1.s13392c1f44");
    check_field_offset(lv, s13392c1f45, ABISELECT(1348,1104), "S13392C1.s13392c1f45");
    check_field_offset(lv, s13392c1f46, ABISELECT(1352,1108), "S13392C1.s13392c1f46");
  }
}
static Arrange_To_Call_Me vS13392C1(Test_S13392C1, "S13392C1", ABISELECT(1360,1112));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13390C1  {
  int s13390c1f0[3];
  void *s13390c1f1[2];
  int s13390c1f2[5];
  __tsi64 s13390c1f3[3];
  int s13390c1f4[3];
  ::S13388C2 s13390c1f5;
  void *s13390c1f6[3];
  ::S13388C4 s13390c1f7;
  ::S13388C5 s13390c1f8;
  void *s13390c1f9;
  void *s13390c1f10;
  void *s13390c1f11;
  void *s13390c1f12;
  void *s13390c1f13;
  void *s13390c1f14;
  void *s13390c1f15;
  char s13390c1f16[256];
  char s13390c1f17[256];
  void *s13390c1f18;
  int s13390c1f19;
  int s13390c1f20;
  int s13390c1f21;
  int s13390c1f22;
  int s13390c1f23;
  int s13390c1f24;
  int s13390c1f25;
  int s13390c1f26;
  int s13390c1f27;
  int s13390c1f28;
  ::S857C10_nt s13390c1f29;
  int s13390c1f30;
  int s13390c1f31;
  int s13390c1f32;
  char s13390c1f33[11];
  int s13390c1f34;
  int s13390c1f35;
  int s13390c1f36;
};
//SIG(1 S13390C1) C1{ Fi[3] Fp[2] Fi[5] FL[3] Fi[3] FC2{ Fi[3] Fp[2] Fi[24] Fp[15] FC3{ Fp[3]} Fp Fi Fp[2] Fs Fc Fi Fc[13]} Fp[3] FU4{ Fp} FC5{ FL Fi Fi Fi Fi Fi Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fi} Fp Fp Fp Fp Fp Fp Fp Fc[256] Fc[256] Fp Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi FC6{ FL[4]} Fi Fi Fi Fc[11] Fi Fi Fi}



static void Test_S13390C1()
{
  {
    init_simple_test("S13390C1");
    S13390C1 lv;
    check2(sizeof(lv), ABISELECT(1304,1072), "sizeof(S13390C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13390C1)");
    check_field_offset(lv, s13390c1f0, 0, "S13390C1.s13390c1f0");
    check_field_offset(lv, s13390c1f1, ABISELECT(16,12), "S13390C1.s13390c1f1");
    check_field_offset(lv, s13390c1f2, ABISELECT(32,20), "S13390C1.s13390c1f2");
    check_field_offset(lv, s13390c1f3, ABISELECT(56,40), "S13390C1.s13390c1f3");
    check_field_offset(lv, s13390c1f4, ABISELECT(80,64), "S13390C1.s13390c1f4");
    check_field_offset(lv, s13390c1f5, ABISELECT(96,76), "S13390C1.s13390c1f5");
    check_field_offset(lv, s13390c1f6, ABISELECT(424,304), "S13390C1.s13390c1f6");
    check_field_offset(lv, s13390c1f7, ABISELECT(448,316), "S13390C1.s13390c1f7");
    check_field_offset(lv, s13390c1f8, ABISELECT(456,320), "S13390C1.s13390c1f8");
    check_field_offset(lv, s13390c1f9, ABISELECT(616,420), "S13390C1.s13390c1f9");
    check_field_offset(lv, s13390c1f10, ABISELECT(624,424), "S13390C1.s13390c1f10");
    check_field_offset(lv, s13390c1f11, ABISELECT(632,428), "S13390C1.s13390c1f11");
    check_field_offset(lv, s13390c1f12, ABISELECT(640,432), "S13390C1.s13390c1f12");
    check_field_offset(lv, s13390c1f13, ABISELECT(648,436), "S13390C1.s13390c1f13");
    check_field_offset(lv, s13390c1f14, ABISELECT(656,440), "S13390C1.s13390c1f14");
    check_field_offset(lv, s13390c1f15, ABISELECT(664,444), "S13390C1.s13390c1f15");
    check_field_offset(lv, s13390c1f16, ABISELECT(672,448), "S13390C1.s13390c1f16");
    check_field_offset(lv, s13390c1f17, ABISELECT(928,704), "S13390C1.s13390c1f17");
    check_field_offset(lv, s13390c1f18, ABISELECT(1184,960), "S13390C1.s13390c1f18");
    check_field_offset(lv, s13390c1f19, ABISELECT(1192,964), "S13390C1.s13390c1f19");
    check_field_offset(lv, s13390c1f20, ABISELECT(1196,968), "S13390C1.s13390c1f20");
    check_field_offset(lv, s13390c1f21, ABISELECT(1200,972), "S13390C1.s13390c1f21");
    check_field_offset(lv, s13390c1f22, ABISELECT(1204,976), "S13390C1.s13390c1f22");
    check_field_offset(lv, s13390c1f23, ABISELECT(1208,980), "S13390C1.s13390c1f23");
    check_field_offset(lv, s13390c1f24, ABISELECT(1212,984), "S13390C1.s13390c1f24");
    check_field_offset(lv, s13390c1f25, ABISELECT(1216,988), "S13390C1.s13390c1f25");
    check_field_offset(lv, s13390c1f26, ABISELECT(1220,992), "S13390C1.s13390c1f26");
    check_field_offset(lv, s13390c1f27, ABISELECT(1224,996), "S13390C1.s13390c1f27");
    check_field_offset(lv, s13390c1f28, ABISELECT(1228,1000), "S13390C1.s13390c1f28");
    check_field_offset(lv, s13390c1f29, ABISELECT(1232,1004), "S13390C1.s13390c1f29");
    check_field_offset(lv, s13390c1f30, ABISELECT(1264,1036), "S13390C1.s13390c1f30");
    check_field_offset(lv, s13390c1f31, ABISELECT(1268,1040), "S13390C1.s13390c1f31");
    check_field_offset(lv, s13390c1f32, ABISELECT(1272,1044), "S13390C1.s13390c1f32");
    check_field_offset(lv, s13390c1f33, ABISELECT(1276,1048), "S13390C1.s13390c1f33");
    check_field_offset(lv, s13390c1f34, ABISELECT(1288,1060), "S13390C1.s13390c1f34");
    check_field_offset(lv, s13390c1f35, ABISELECT(1292,1064), "S13390C1.s13390c1f35");
    check_field_offset(lv, s13390c1f36, ABISELECT(1296,1068), "S13390C1.s13390c1f36");
  }
}
static Arrange_To_Call_Me vS13390C1(Test_S13390C1, "S13390C1", ABISELECT(1304,1072));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13389C1  {
  int s13389c1f0[3];
  void *s13389c1f1[2];
  int s13389c1f2[5];
  long s13389c1f3[3];
  int s13389c1f4[3];
  ::S13388C2 s13389c1f5;
  void *s13389c1f6[3];
  ::S13388C4 s13389c1f7;
  ::S13387C5 s13389c1f8;
  void *s13389c1f9;
  void *s13389c1f10;
  void *s13389c1f11;
  void *s13389c1f12;
  void *s13389c1f13;
  void *s13389c1f14;
  void *s13389c1f15;
  char s13389c1f16[256];
  char s13389c1f17[256];
  void *s13389c1f18;
  int s13389c1f19;
  int s13389c1f20;
  int s13389c1f21;
  int s13389c1f22;
  int s13389c1f23;
  int s13389c1f24;
  int s13389c1f25;
  int s13389c1f26;
  int s13389c1f27;
  int s13389c1f28;
  ::S856C10_nt s13389c1f29;
  int s13389c1f30;
  int s13389c1f31;
  int s13389c1f32;
  char s13389c1f33[11];
  int s13389c1f34;
  int s13389c1f35;
  int s13389c1f36;
};
//SIG(1 S13389C1) C1{ Fi[3] Fp[2] Fi[5] Fl[3] Fi[3] FC2{ Fi[3] Fp[2] Fi[24] Fp[15] FC3{ Fp[3]} Fp Fi Fp[2] Fs Fc Fi Fc[13]} Fp[3] FU4{ Fp} FC5{ Fl Fi Fi Fi Fi Fi Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fi} Fp Fp Fp Fp Fp Fp Fp Fc[256] Fc[256] Fp Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi FC6{ Fl[4]} Fi Fi Fi Fc[11] Fi Fi Fi}



static void Test_S13389C1()
{
  {
    init_simple_test("S13389C1");
    S13389C1 lv;
    check2(sizeof(lv), ABISELECT(1304,1040), "sizeof(S13389C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13389C1)");
    check_field_offset(lv, s13389c1f0, 0, "S13389C1.s13389c1f0");
    check_field_offset(lv, s13389c1f1, ABISELECT(16,12), "S13389C1.s13389c1f1");
    check_field_offset(lv, s13389c1f2, ABISELECT(32,20), "S13389C1.s13389c1f2");
    check_field_offset(lv, s13389c1f3, ABISELECT(56,40), "S13389C1.s13389c1f3");
    check_field_offset(lv, s13389c1f4, ABISELECT(80,52), "S13389C1.s13389c1f4");
    check_field_offset(lv, s13389c1f5, ABISELECT(96,64), "S13389C1.s13389c1f5");
    check_field_offset(lv, s13389c1f6, ABISELECT(424,292), "S13389C1.s13389c1f6");
    check_field_offset(lv, s13389c1f7, ABISELECT(448,304), "S13389C1.s13389c1f7");
    check_field_offset(lv, s13389c1f8, ABISELECT(456,308), "S13389C1.s13389c1f8");
    check_field_offset(lv, s13389c1f9, ABISELECT(616,404), "S13389C1.s13389c1f9");
    check_field_offset(lv, s13389c1f10, ABISELECT(624,408), "S13389C1.s13389c1f10");
    check_field_offset(lv, s13389c1f11, ABISELECT(632,412), "S13389C1.s13389c1f11");
    check_field_offset(lv, s13389c1f12, ABISELECT(640,416), "S13389C1.s13389c1f12");
    check_field_offset(lv, s13389c1f13, ABISELECT(648,420), "S13389C1.s13389c1f13");
    check_field_offset(lv, s13389c1f14, ABISELECT(656,424), "S13389C1.s13389c1f14");
    check_field_offset(lv, s13389c1f15, ABISELECT(664,428), "S13389C1.s13389c1f15");
    check_field_offset(lv, s13389c1f16, ABISELECT(672,432), "S13389C1.s13389c1f16");
    check_field_offset(lv, s13389c1f17, ABISELECT(928,688), "S13389C1.s13389c1f17");
    check_field_offset(lv, s13389c1f18, ABISELECT(1184,944), "S13389C1.s13389c1f18");
    check_field_offset(lv, s13389c1f19, ABISELECT(1192,948), "S13389C1.s13389c1f19");
    check_field_offset(lv, s13389c1f20, ABISELECT(1196,952), "S13389C1.s13389c1f20");
    check_field_offset(lv, s13389c1f21, ABISELECT(1200,956), "S13389C1.s13389c1f21");
    check_field_offset(lv, s13389c1f22, ABISELECT(1204,960), "S13389C1.s13389c1f22");
    check_field_offset(lv, s13389c1f23, ABISELECT(1208,964), "S13389C1.s13389c1f23");
    check_field_offset(lv, s13389c1f24, ABISELECT(1212,968), "S13389C1.s13389c1f24");
    check_field_offset(lv, s13389c1f25, ABISELECT(1216,972), "S13389C1.s13389c1f25");
    check_field_offset(lv, s13389c1f26, ABISELECT(1220,976), "S13389C1.s13389c1f26");
    check_field_offset(lv, s13389c1f27, ABISELECT(1224,980), "S13389C1.s13389c1f27");
    check_field_offset(lv, s13389c1f28, ABISELECT(1228,984), "S13389C1.s13389c1f28");
    check_field_offset(lv, s13389c1f29, ABISELECT(1232,988), "S13389C1.s13389c1f29");
    check_field_offset(lv, s13389c1f30, ABISELECT(1264,1004), "S13389C1.s13389c1f30");
    check_field_offset(lv, s13389c1f31, ABISELECT(1268,1008), "S13389C1.s13389c1f31");
    check_field_offset(lv, s13389c1f32, ABISELECT(1272,1012), "S13389C1.s13389c1f32");
    check_field_offset(lv, s13389c1f33, ABISELECT(1276,1016), "S13389C1.s13389c1f33");
    check_field_offset(lv, s13389c1f34, ABISELECT(1288,1028), "S13389C1.s13389c1f34");
    check_field_offset(lv, s13389c1f35, ABISELECT(1292,1032), "S13389C1.s13389c1f35");
    check_field_offset(lv, s13389c1f36, ABISELECT(1296,1036), "S13389C1.s13389c1f36");
  }
}
static Arrange_To_Call_Me vS13389C1(Test_S13389C1, "S13389C1", ABISELECT(1304,1040));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11764C3_nt  {
  void *s11764c3f0[2];
};
//SIG(-1 S11764C3_nt) C1{ Fp[2]}



//skip512 S11764C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11764C2_nt  {
  long s11764c2f0[5];
  void *s11764c2f1[2];
  int s11764c2f2;
  void *s11764c2f3;
  int s11764c2f4;
  void *s11764c2f5;
  ::S11764C3_nt s11764c2f6;
  ::S856C10_nt s11764c2f7;
  short s11764c2f8[8];
  void *s11764c2f9[6];
  ::S11764C3_nt s11764c2f10;
  ::S11764C3_nt s11764c2f11;
  void *s11764c2f12[2];
};
//SIG(-1 S11764C2_nt) C1{ Fl[5] Fp[2] Fi Fp Fi Fp FC2{ Fp[2]} FC3{ Fl[4]} Fs[8] Fp[6] FC2 FC2 Fp[2]}



//skip512 S11764C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S11764C7  {
  long s11764c7f0;
  void *s11764c7f1;
};
//SIG(1 S11764C7) U1{ Fl Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S11764C6  {
  void *s11764c6f0;
  long s11764c6f1[2];
  ::S11764C7 s11764c6f2;
  ::S11764C7 s11764c6f3;
  void *s11764c6f4;
  void *s11764c6f5;
  void *s11764c6f6;
  void *s11764c6f7;
  void *s11764c6f8;
};
//SIG(-1 S11764C6) C1{ Fp Fl[2] FU2{ Fl Fp} FU2 Fp Fp Fp Fp Fp}



static void Test_S11764C6()
{
  {
    init_simple_test("S11764C6");
    S11764C6 lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S11764C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11764C6)");
    check_field_offset(lv, s11764c6f0, 0, "S11764C6.s11764c6f0");
    check_field_offset(lv, s11764c6f1, ABISELECT(8,4), "S11764C6.s11764c6f1");
    check_field_offset(lv, s11764c6f2, ABISELECT(24,12), "S11764C6.s11764c6f2");
    check_field_offset(lv, s11764c6f3, ABISELECT(32,16), "S11764C6.s11764c6f3");
    check_field_offset(lv, s11764c6f4, ABISELECT(40,20), "S11764C6.s11764c6f4");
    check_field_offset(lv, s11764c6f5, ABISELECT(48,24), "S11764C6.s11764c6f5");
    check_field_offset(lv, s11764c6f6, ABISELECT(56,28), "S11764C6.s11764c6f6");
    check_field_offset(lv, s11764c6f7, ABISELECT(64,32), "S11764C6.s11764c6f7");
    check_field_offset(lv, s11764c6f8, ABISELECT(72,36), "S11764C6.s11764c6f8");
  }
}
static Arrange_To_Call_Me vS11764C6(Test_S11764C6, "S11764C6", ABISELECT(80,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11764C8  {
  long s11764c8f0;
  long s11764c8f1;
  void *s11764c8f2;
};
//SIG(-1 S11764C8) C1{ Fl[2] Fp}



static void Test_S11764C8()
{
  {
    init_simple_test("S11764C8");
    S11764C8 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S11764C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11764C8)");
    check_field_offset(lv, s11764c8f0, 0, "S11764C8.s11764c8f0");
    check_field_offset(lv, s11764c8f1, ABISELECT(8,4), "S11764C8.s11764c8f1");
    check_field_offset(lv, s11764c8f2, ABISELECT(16,8), "S11764C8.s11764c8f2");
  }
}
static Arrange_To_Call_Me vS11764C8(Test_S11764C8, "S11764C8", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11764C10  {
  short s11764c10f0;
  short s11764c10f1;
  short s11764c10f2;
  short s11764c10f3;
  short s11764c10f4;
  short s11764c10f5;
  long s11764c10f6;
};
//SIG(-1 S11764C10) C1{ Fs[6] Fl}



static void Test_S11764C10()
{
  {
    init_simple_test("S11764C10");
    S11764C10 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S11764C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11764C10)");
    check_field_offset(lv, s11764c10f0, 0, "S11764C10.s11764c10f0");
    check_field_offset(lv, s11764c10f1, 2, "S11764C10.s11764c10f1");
    check_field_offset(lv, s11764c10f2, 4, "S11764C10.s11764c10f2");
    check_field_offset(lv, s11764c10f3, 6, "S11764C10.s11764c10f3");
    check_field_offset(lv, s11764c10f4, 8, "S11764C10.s11764c10f4");
    check_field_offset(lv, s11764c10f5, 10, "S11764C10.s11764c10f5");
    check_field_offset(lv, s11764c10f6, ABISELECT(16,12), "S11764C10.s11764c10f6");
  }
}
static Arrange_To_Call_Me vS11764C10(Test_S11764C10, "S11764C10", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11764C9  {
  char s11764c9f0;
  char s11764c9f1;
  char s11764c9f2;
  char s11764c9f3;
  char s11764c9f4;
  char s11764c9f5;
  char s11764c9f6;
  long s11764c9f7;
  long s11764c9f8;
  long s11764c9f9;
  ::S11764C10 s11764c9f10;
  ::S11764C10 s11764c9f11;
  ::S11764C10 s11764c9f12;
  ::S11764C10 s11764c9f13;
};
//SIG(-1 S11764C9) C1{ Fc[7] Fl[3] FC2{ Fs[6] Fl} FC2 FC2 FC2}



static void Test_S11764C9()
{
  {
    init_simple_test("S11764C9");
    S11764C9 lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S11764C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11764C9)");
    check_field_offset(lv, s11764c9f0, 0, "S11764C9.s11764c9f0");
    check_field_offset(lv, s11764c9f1, 1, "S11764C9.s11764c9f1");
    check_field_offset(lv, s11764c9f2, 2, "S11764C9.s11764c9f2");
    check_field_offset(lv, s11764c9f3, 3, "S11764C9.s11764c9f3");
    check_field_offset(lv, s11764c9f4, 4, "S11764C9.s11764c9f4");
    check_field_offset(lv, s11764c9f5, 5, "S11764C9.s11764c9f5");
    check_field_offset(lv, s11764c9f6, 6, "S11764C9.s11764c9f6");
    check_field_offset(lv, s11764c9f7, 8, "S11764C9.s11764c9f7");
    check_field_offset(lv, s11764c9f8, ABISELECT(16,12), "S11764C9.s11764c9f8");
    check_field_offset(lv, s11764c9f9, ABISELECT(24,16), "S11764C9.s11764c9f9");
    check_field_offset(lv, s11764c9f10, ABISELECT(32,20), "S11764C9.s11764c9f10");
    check_field_offset(lv, s11764c9f11, ABISELECT(56,36), "S11764C9.s11764c9f11");
    check_field_offset(lv, s11764c9f12, ABISELECT(80,52), "S11764C9.s11764c9f12");
    check_field_offset(lv, s11764c9f13, ABISELECT(104,68), "S11764C9.s11764c9f13");
  }
}
static Arrange_To_Call_Me vS11764C9(Test_S11764C9, "S11764C9", ABISELECT(128,84));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11764C11  {
  void *s11764c11f0;
  int s11764c11f1;
  short s11764c11f2;
  short s11764c11f3;
};
//SIG(-1 S11764C11) C1{ Fp Fi Fs[2]}



static void Test_S11764C11()
{
  {
    init_simple_test("S11764C11");
    S11764C11 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S11764C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11764C11)");
    check_field_offset(lv, s11764c11f0, 0, "S11764C11.s11764c11f0");
    check_field_offset(lv, s11764c11f1, ABISELECT(8,4), "S11764C11.s11764c11f1");
    check_field_offset(lv, s11764c11f2, ABISELECT(12,8), "S11764C11.s11764c11f2");
    check_field_offset(lv, s11764c11f3, ABISELECT(14,10), "S11764C11.s11764c11f3");
  }
}
static Arrange_To_Call_Me vS11764C11(Test_S11764C11, "S11764C11", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11764C1  {
  ::S11764C2_nt s11764c1f0;
  ::S11764C6 s11764c1f1;
  void *s11764c1f2;
  void *s11764c1f3;
  void *s11764c1f4;
  ::S11764C8 s11764c1f5;
  ::S11764C9 s11764c1f6;
  int s11764c1f7;
  void *s11764c1f8;
  long s11764c1f9;
  void *s11764c1f10;
  long s11764c1f11;
  void *s11764c1f12;
  short s11764c1f13;
  long s11764c1f14;
  void *s11764c1f15;
  ::S11764C11 s11764c1f16;
};
//SIG(1 S11764C1) C1{ FC2{ Fl[5] Fp[2] Fi Fp Fi Fp FC3{ Fp[2]} FC4{ Fl[4]} Fs[8] Fp[6] FC3 FC3 Fp[2]} FC5{ Fp Fl[2] FU6{ Fl Fp} FU6 Fp Fp Fp Fp Fp} Fp Fp Fp FC7{ Fl Fl Fp} FC8{ Fc Fc Fc Fc Fc Fc Fc Fl Fl Fl FC9{ Fs Fs Fs Fs Fs Fs Fl} FC9 FC9 FC9} Fi Fp Fl Fp Fl Fp Fs Fl Fp FC10{ Fp Fi Fs Fs}}



static void Test_S11764C1()
{
  {
    init_simple_test("S11764C1");
    S11764C1 lv;
    check2(sizeof(lv), ABISELECT(592,328), "sizeof(S11764C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11764C1)");
    check_field_offset(lv, s11764c1f0, 0, "S11764C1.s11764c1f0");
    check_field_offset(lv, s11764c1f1, ABISELECT(248,132), "S11764C1.s11764c1f1");
    check_field_offset(lv, s11764c1f2, ABISELECT(328,172), "S11764C1.s11764c1f2");
    check_field_offset(lv, s11764c1f3, ABISELECT(336,176), "S11764C1.s11764c1f3");
    check_field_offset(lv, s11764c1f4, ABISELECT(344,180), "S11764C1.s11764c1f4");
    check_field_offset(lv, s11764c1f5, ABISELECT(352,184), "S11764C1.s11764c1f5");
    check_field_offset(lv, s11764c1f6, ABISELECT(376,196), "S11764C1.s11764c1f6");
    check_field_offset(lv, s11764c1f7, ABISELECT(504,280), "S11764C1.s11764c1f7");
    check_field_offset(lv, s11764c1f8, ABISELECT(512,284), "S11764C1.s11764c1f8");
    check_field_offset(lv, s11764c1f9, ABISELECT(520,288), "S11764C1.s11764c1f9");
    check_field_offset(lv, s11764c1f10, ABISELECT(528,292), "S11764C1.s11764c1f10");
    check_field_offset(lv, s11764c1f11, ABISELECT(536,296), "S11764C1.s11764c1f11");
    check_field_offset(lv, s11764c1f12, ABISELECT(544,300), "S11764C1.s11764c1f12");
    check_field_offset(lv, s11764c1f13, ABISELECT(552,304), "S11764C1.s11764c1f13");
    check_field_offset(lv, s11764c1f14, ABISELECT(560,308), "S11764C1.s11764c1f14");
    check_field_offset(lv, s11764c1f15, ABISELECT(568,312), "S11764C1.s11764c1f15");
    check_field_offset(lv, s11764c1f16, ABISELECT(576,316), "S11764C1.s11764c1f16");
  }
}
static Arrange_To_Call_Me vS11764C1(Test_S11764C1, "S11764C1", ABISELECT(592,328));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5643C3_nt  {
  long double s5643c3f0;
  void  mf5643c3(); // _ZN10S5643C3_nt8mf5643c3Ev
};
//SIG(-1 S5643C3_nt) C1{ m FD}


void  S5643C3_nt ::mf5643c3(){}

//skip512 S5643C3_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S5643C3_nt[];
VTBL_ENTRY *P__ZTI10S5643C3_nt = _ZTI10S5643C3_nt; 
Class_Descriptor cd_S5643C3_nt = {  "S5643C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S5643C3_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  S5643C2  {
  ::S5643C3_nt s5643c2f0[7];
  void  mf5643c2(); // _ZN7S5643C28mf5643c2Ev
};
//SIG(-1 S5643C2) C1{ m FC2{ m FD}[7]}


void  S5643C2 ::mf5643c2(){}

static void Test_S5643C2()
{
  {
    init_simple_test("S5643C2");
    S5643C2 lv;
    check2(sizeof(lv), ABISELECT(112,84), "sizeof(S5643C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5643C2)");
    check_field_offset(lv, s5643c2f0, 0, "S5643C2.s5643c2f0");
  }
}
static Arrange_To_Call_Me vS5643C2(Test_S5643C2, "S5643C2", ABISELECT(112,84));

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S5643C2[];
VTBL_ENTRY *P__ZTI7S5643C2 = _ZTI7S5643C2; 
Class_Descriptor cd_S5643C2 = {  "S5643C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(112,84), // object size
  NSPAIRA(_ZTI7S5643C2),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  S5643C6  : S5643C3_nt , virtual S5408C7_nt , virtual S5643C2 {
  virtual  ~S5643C6(); // _ZN7S5643C6D2Ev
  S5643C6(); // tgen
};
//SIG(-1 S5643C6) C1{ BC2{ m FD} VBC3{ m} VBC4{ m FC2[7]} vd}


 S5643C6 ::~S5643C6(){ note_dtor("S5643C6", this);}
S5643C6 ::S5643C6(){ note_ctor("S5643C6", this);} // tgen

static void Test_S5643C6()
{
  extern Class_Descriptor cd_S5643C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,26)];
    init_test(&cd_S5643C6, buf);
    S5643C6 *dp, &lv = *(dp=new (buf) S5643C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S5643C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5643C6)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(16,4), "S5643C6");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S5643C6");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(32,16), "S5643C6");
    test_class_info(&lv, &cd_S5643C6);
    dp->~S5643C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5643C6(Test_S5643C6, "S5643C6", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN7S5643C6C1Ev();
extern void _ZN7S5643C6D2Ev();
Name_Map name_map_S5643C6[] = {
  NSPAIR(_ZN7S5643C6C1Ev),
  NSPAIR(_ZN7S5643C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
static Base_Class bases_S5643C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    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_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5643C2,    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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5643C6[];
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY vtc_S5643C6[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
extern VTBL_ENTRY _ZTV7S5643C6[];
static  VTT_ENTRY vtt_S5643C6[] = {
  {&(_ZTV7S5643C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
Class_Descriptor cd_S5643C6 = {  "S5643C6", // class name
  bases_S5643C6, 3,
  &(vtc_S5643C6[0]), // expected_vtbl_contents
  &(vtt_S5643C6[0]), // expected_vtt_contents
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI7S5643C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5643C6),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5643C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5643C8  : virtual S5643C3_nt , virtual S5643C2 , virtual S5408C7_nt {
  ::S5643C2 s5643c8f0[10];
  ~S5643C8(); // tgen
  S5643C8(); // tgen
};
//SIG(-1 S5643C8) C1{ VBC2{ m FD} VBC3{ m FC2[7]} VBC4{ m} FC3[10]}


S5643C8 ::~S5643C8(){ note_dtor("S5643C8", this);} // tgen
S5643C8 ::S5643C8(){ note_ctor("S5643C8", this);} // tgen

static void Test_S5643C8()
{
  extern Class_Descriptor cd_S5643C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(80,236)];
    init_test(&cd_S5643C8, buf);
    S5643C8 *dp, &lv = *(dp=new (buf) S5643C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1264,940), "sizeof(S5643C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5643C8)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(1136,844), "S5643C8");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(1152,856), "S5643C8");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S5643C8");
    check_field_offset(lv, s5643c8f0, ABISELECT(16,4), "S5643C8.s5643c8f0");
    test_class_info(&lv, &cd_S5643C8);
    dp->~S5643C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5643C8(Test_S5643C8, "S5643C8", ABISELECT(1264,940));

#else // __cplusplus

extern void _ZN7S5643C8C1Ev();
extern void _ZN7S5643C8D1Ev();
Name_Map name_map_S5643C8[] = {
  NSPAIR(_ZN7S5643C8C1Ev),
  NSPAIR(_ZN7S5643C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
static Base_Class bases_S5643C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(1136,844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5643C2,    ABISELECT(1152,856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S5643C8[];
static  VTBL_ENTRY vtc_S5643C8[] = {
  0,
  ABISELECT(1152,856),
  ABISELECT(1136,844),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
extern VTBL_ENTRY _ZTV7S5643C8[];
static  VTT_ENTRY vtt_S5643C8[] = {
  {&(_ZTV7S5643C8[5]),  5,5},
};
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
Class_Descriptor cd_S5643C8 = {  "S5643C8", // class name
  bases_S5643C8, 3,
  &(vtc_S5643C8[0]), // expected_vtbl_contents
  &(vtt_S5643C8[0]), // expected_vtt_contents
  ABISELECT(1264,940), // object size
  NSPAIRA(_ZTI7S5643C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5643C8),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5643C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5643C10  : S5643C3_nt , S5643C2 , virtual S5408C7_nt {
  ~S5643C10(); // tgen
  S5643C10(); // tgen
};
//SIG(-1 S5643C10) C1{ BC2{ m FD} BC3{ m FC2[7]} VBC4{ m}}


S5643C10 ::~S5643C10(){ note_dtor("S5643C10", this);} // tgen
S5643C10 ::S5643C10(){ note_ctor("S5643C10", this);} // tgen

static void Test_S5643C10()
{
  extern Class_Descriptor cd_S5643C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,26)];
    init_test(&cd_S5643C10, buf);
    S5643C10 *dp, &lv = *(dp=new (buf) S5643C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S5643C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5643C10)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(16,4), "S5643C10");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(32,16), "S5643C10");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S5643C10");
    test_class_info(&lv, &cd_S5643C10);
    dp->~S5643C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5643C10(Test_S5643C10, "S5643C10", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN8S5643C10C1Ev();
extern void _ZN8S5643C10D1Ev();
Name_Map name_map_S5643C10[] = {
  NSPAIR(_ZN8S5643C10C1Ev),
  NSPAIR(_ZN8S5643C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
static Base_Class bases_S5643C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    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_S5643C2,    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_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S5643C10[];
static  VTBL_ENTRY vtc_S5643C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C10[0]),
};
extern VTBL_ENTRY _ZTV8S5643C10[];
static  VTT_ENTRY vtt_S5643C10[] = {
  {&(_ZTV8S5643C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S5643C10[];
extern  VTBL_ENTRY _ZTV8S5643C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C10[];
Class_Descriptor cd_S5643C10 = {  "S5643C10", // class name
  bases_S5643C10, 3,
  &(vtc_S5643C10[0]), // expected_vtbl_contents
  &(vtt_S5643C10[0]), // expected_vtt_contents
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI8S5643C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S5643C10),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5643C10),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5643C9  : virtual S5643C2 , virtual S5643C8 , virtual S5643C10 , S5408C7_nt {
  ::S5408C7_nt s5643c9f0;
  ~S5643C9(); // tgen
  S5643C9(); // tgen
};
//SIG(-1 S5643C9) C1{ VBC2{ m FC3{ m FD}[7]} VBC4{ VBC3 VBC2 VBC5{ m} FC2[10]} VBC6{ BC3 BC2 VBC5} BC5 FC5}


S5643C9 ::~S5643C9(){ note_dtor("S5643C9", this);} // tgen
S5643C9 ::S5643C9(){ note_ctor("S5643C9", this);} // tgen

static void Test_S5643C9()
{
  extern Class_Descriptor cd_S5643C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,263)];
    init_test(&cd_S5643C9, buf);
    S5643C9 *dp, &lv = *(dp=new (buf) S5643C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1048), "sizeof(S5643C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5643C9)");
    /*is_ambiguous_... S5643C9::S5643C2 */ AMB_check_base_class_offset(lv, (S5643C2*), ABISELECT(16,8), "S5643C9");
    check_base_class_offset(lv, (S5643C2*)(S5643C8*), ABISELECT(16,8), "S5643C9");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C8*), ABISELECT(1264,936), "S5643C9");
    check_base_class_offset(lv, (S5408C7_nt*)(S5643C8*), ABISELECT(1280,948), "S5643C9");
    check_base_class_offset(lv, (S5408C7_nt*)(S5643C10*), ABISELECT(1280,948), "S5643C9");
    check_base_class_offset(lv, (S5643C8*), ABISELECT(128,92), "S5643C9");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C10*), ABISELECT(1296,952), "S5643C9");
    check_base_class_offset(lv, (S5643C2*)(S5643C10*), ABISELECT(1312,964), "S5643C9");
    check_base_class_offset(lv, (S5643C10*), ABISELECT(1280,948), "S5643C9");
    /*is_ambiguous_... S5643C9::S5408C7_nt */ AMB_check_base_class_offset(lv, (S5408C7_nt*), 0, "S5643C9");
    check_field_offset(lv, s5643c9f0, ABISELECT(8,4), "S5643C9.s5643c9f0");
    test_class_info(&lv, &cd_S5643C9);
    dp->~S5643C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5643C9(Test_S5643C9, "S5643C9", ABISELECT(1424,1048));

#else // __cplusplus

extern void _ZN7S5643C9C1Ev();
extern void _ZN7S5643C9D1Ev();
Name_Map name_map_S5643C9[] = {
  NSPAIR(_ZN7S5643C9C1Ev),
  NSPAIR(_ZN7S5643C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C8;
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C10;
extern VTBL_ENTRY _ZTI8S5643C10[];
extern  VTBL_ENTRY _ZTV8S5643C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C10[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
static Base_Class bases_S5643C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C2,    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, 1},
  {&cd_S5643C3_nt,    ABISELECT(1264,936), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5408C7_nt,    ABISELECT(1280,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
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5643C8,    ABISELECT(128,92), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(1296,952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1312,964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C10,    ABISELECT(1280,948), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5643C9[];
static  VTBL_ENTRY vtc_S5643C9[] = {
  ABISELECT(1280,948),
  ABISELECT(1280,948),
  ABISELECT(1264,936),
  ABISELECT(128,92),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C9[0]),
  ABISELECT(1152,856),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI7S5643C9[0]),
  0,
  ABISELECT(-1280,-948),
  (VTBL_ENTRY)&(_ZTI7S5643C9[0]),
};
extern VTBL_ENTRY _ZTV7S5643C9[];
static  VTBL_ENTRY _tg__ZTV7S5643C8__7S5643C9[] = {
  ABISELECT(1152,856),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__7S5643C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C10[0]),
};
static  VTT_ENTRY vtt_S5643C9[] = {
  {&(_ZTV7S5643C9[7]),  7,15},
  {&(_ZTV7S5643C9[12]),  12,15},
  {&(_ZTV7S5643C9[15]),  15,15},
  {&(_tg__ZTV7S5643C8__7S5643C9[5]),  5,5},
  {&(_tg__ZTV8S5643C10__7S5643C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5643C9[];
extern  VTBL_ENTRY _ZTV7S5643C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C9[];
Class_Descriptor cd_S5643C9 = {  "S5643C9", // class name
  bases_S5643C9, 8,
  &(vtc_S5643C9[0]), // expected_vtbl_contents
  &(vtt_S5643C9[0]), // expected_vtt_contents
  ABISELECT(1424,1048), // object size
  NSPAIRA(_ZTI7S5643C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S5643C9),15, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5643C9),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  S5643C11  : S5643C6 {
  virtual  ~S5643C11(); // _ZN8S5643C11D2Ev
  S5643C11(); // tgen
};
//SIG(-1 S5643C11) C1{ BC2{ BC3{ m FD} VBC4{ m} VBC5{ m FC3[7]} vd} vd}


 S5643C11 ::~S5643C11(){ note_dtor("S5643C11", this);}
S5643C11 ::S5643C11(){ note_ctor("S5643C11", this);} // tgen

static void Test_S5643C11()
{
  extern Class_Descriptor cd_S5643C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,26)];
    init_test(&cd_S5643C11, buf);
    S5643C11 *dp, &lv = *(dp=new (buf) S5643C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S5643C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5643C11)");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*), ABISELECT(16,4), "S5643C11");
    check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*), 0, "S5643C11");
    check_base_class_offset(lv, (S5643C2*)(S5643C6*), ABISELECT(32,16), "S5643C11");
    check_base_class_offset(lv, (S5643C6*), 0, "S5643C11");
    test_class_info(&lv, &cd_S5643C11);
    dp->~S5643C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5643C11(Test_S5643C11, "S5643C11", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN8S5643C11C1Ev();
extern void _ZN8S5643C11D2Ev();
Name_Map name_map_S5643C11[] = {
  NSPAIR(_ZN8S5643C11C1Ev),
  NSPAIR(_ZN8S5643C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
static Base_Class bases_S5643C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    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
    3, //immediately_derived
  0, 0},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    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, 1},
  {&cd_S5643C6,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S5643C11[];
extern void _ZN8S5643C11D1Ev();
extern void _ZN8S5643C11D0Ev();
static  VTBL_ENTRY vtc_S5643C11[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C11[0]),
  (VTBL_ENTRY)&_ZN8S5643C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C11D0Ev,
};
extern VTBL_ENTRY _ZTV8S5643C11[];
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C11[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
static  VTT_ENTRY vtt_S5643C11[] = {
  {&(_ZTV8S5643C11[4]),  4,6},
  {&(_tg__ZTV7S5643C6__8S5643C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S5643C11[];
extern  VTBL_ENTRY _ZTV8S5643C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C11[];
Class_Descriptor cd_S5643C11 = {  "S5643C11", // class name
  bases_S5643C11, 4,
  &(vtc_S5643C11[0]), // expected_vtbl_contents
  &(vtt_S5643C11[0]), // expected_vtt_contents
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI8S5643C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S5643C11),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5643C11),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  S5643C5  : virtual S5643C6 , virtual S5643C8 , S5643C9 , virtual S5643C11 {
  virtual  ~S5643C5(); // _ZN7S5643C5D2Ev
  S5643C5(); // tgen
};
//SIG(-1 S5643C5) C1{ VBC2{ BC3{ m FD} VBC4{ m} VBC5{ m FC3[7]} vd} VBC6{ VBC3 VBC5 VBC4 FC5[10]} BC7{ VBC5 VBC6 VBC8{ BC3 BC5 VBC4} BC4 FC4} VBC9{ BC2 vd} vd}


 S5643C5 ::~S5643C5(){ note_dtor("S5643C5", this);}
S5643C5 ::S5643C5(){ note_ctor("S5643C5", this);} // tgen

static void Test_S5643C5()
{
  extern Class_Descriptor cd_S5643C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(94,271)];
    init_test(&cd_S5643C5, buf);
    S5643C5 *dp, &lv = *(dp=new (buf) S5643C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1488,1080), "sizeof(S5643C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5643C5)");
    /*is_ambiguous_... S5643C5::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*), ABISELECT(32,12), "S5643C5");
    /*is_ambiguous_... S5643C5::S5643C6 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*), ABISELECT(48,24), "S5643C5");
    check_base_class_offset(lv, (S5408C7_nt*)(S5643C8*), ABISELECT(48,24), "S5643C5");
    check_base_class_offset(lv, (S5408C7_nt*)(S5643C10*), ABISELECT(48,24), "S5643C5");
    check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*)(S5643C11*), ABISELECT(48,24), "S5643C5");
    /*is_ambiguous_... S5643C5::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C6*), ABISELECT(48,24), "S5643C5");
    check_base_class_offset(lv, (S5643C2*)(S5643C8*), ABISELECT(48,24), "S5643C5");
    /*is_ambiguous_... S5643C9::S5643C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C9*), ABISELECT(48,24), "S5643C5");
    check_base_class_offset(lv, (S5643C2*)(S5643C6*)(S5643C11*), ABISELECT(48,24), "S5643C5");
    /*is_ambiguous_... S5643C5::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C6*), ABISELECT(16,8), "S5643C5");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C8*), ABISELECT(1296,952), "S5643C5");
    check_base_class_offset(lv, (S5643C8*), ABISELECT(160,108), "S5643C5");
    check_base_class_offset(lv, (S5643C8*)(S5643C9*), ABISELECT(160,108), "S5643C5");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C10*), ABISELECT(1328,968), "S5643C5");
    check_base_class_offset(lv, (S5643C2*)(S5643C10*), ABISELECT(1344,980), "S5643C5");
    check_base_class_offset(lv, (S5643C10*)(S5643C9*), ABISELECT(1312,964), "S5643C5");
    /*is_ambiguous_... S5643C9::S5408C7_nt */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C9*), 0, "S5643C5");
    check_base_class_offset(lv, (S5643C9*), 0, "S5643C5");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*)(S5643C11*), ABISELECT(1472,1068), "S5643C5");
    check_base_class_offset(lv, (S5643C6*)(S5643C11*), ABISELECT(1456,1064), "S5643C5");
    check_base_class_offset(lv, (S5643C11*), ABISELECT(1456,1064), "S5643C5");
    test_class_info(&lv, &cd_S5643C5);
    dp->~S5643C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5643C5(Test_S5643C5, "S5643C5", ABISELECT(1488,1080));

#else // __cplusplus

extern void _ZN7S5643C5C1Ev();
extern void _ZN7S5643C5D2Ev();
Name_Map name_map_S5643C5[] = {
  NSPAIR(_ZN7S5643C5C1Ev),
  NSPAIR(_ZN7S5643C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C8;
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C10;
extern VTBL_ENTRY _ZTI8S5643C10[];
extern  VTBL_ENTRY _ZTV8S5643C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C10[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C9;
extern VTBL_ENTRY _ZTI7S5643C9[];
extern  VTBL_ENTRY _ZTV7S5643C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C9[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S5643C11;
extern VTBL_ENTRY _ZTI8S5643C11[];
extern  VTBL_ENTRY _ZTV8S5643C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C11[];
static Base_Class bases_S5643C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5408C7_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, 1},
  {&cd_S5643C2,    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_S5643C6,    ABISELECT(16,8), //bcp->offset
    11, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(1296,952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C8,    ABISELECT(160,108), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(1328,968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1344,980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C10,    ABISELECT(1312,964), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C3_nt,    ABISELECT(1472,1068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C6,    ABISELECT(1456,1064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5643C11,    ABISELECT(1456,1064), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5643C5[];
extern void _ZN7S5643C5D1Ev();
extern void _ZN7S5643C5D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S5643C5D1Ev,_ZTv0_n20_N7S5643C5D1Ev)();
extern void ABISELECT(_ZThn16_N7S5643C5D1Ev,_ZThn8_N7S5643C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C5D0Ev,_ZTv0_n20_N7S5643C5D0Ev)();
extern void ABISELECT(_ZThn16_N7S5643C5D0Ev,_ZThn8_N7S5643C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C5D1Ev,_ZTv0_n20_N7S5643C5D1Ev)();
extern void ABISELECT(_ZThn1456_N7S5643C5D1Ev,_ZThn1064_N7S5643C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C5D0Ev,_ZTv0_n20_N7S5643C5D0Ev)();
extern void ABISELECT(_ZThn1456_N7S5643C5D0Ev,_ZThn1064_N7S5643C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5643C5[] = {
  ABISELECT(1456,1064),
  ABISELECT(16,8),
  ABISELECT(1312,964),
  ABISELECT(48,24),
  ABISELECT(1296,952),
  ABISELECT(160,108),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C5[0]),
  (VTBL_ENTRY)&_ZN7S5643C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C5D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5643C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C5D1Ev,_ZTv0_n20_N7S5643C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C5D0Ev,_ZTv0_n20_N7S5643C5D0Ev),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI7S5643C5[0]),
  ABISELECT(-1264,-940),
  ABISELECT(-1312,-964),
  (VTBL_ENTRY)&(_ZTI7S5643C5[0]),
  ABISELECT(-1456,-1064),
  ABISELECT(-1408,-1040),
  ABISELECT(-1408,-1040),
  ABISELECT(-1456,-1064),
  (VTBL_ENTRY)&(_ZTI7S5643C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C5D1Ev,_ZTv0_n20_N7S5643C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C5D0Ev,_ZTv0_n20_N7S5643C5D0Ev),
};
extern VTBL_ENTRY _ZTV7S5643C5[];
static  VTBL_ENTRY _tg__ZTV7S5643C9__7S5643C5[] = {
  ABISELECT(1312,964),
  ABISELECT(48,24),
  ABISELECT(1296,952),
  ABISELECT(160,108),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5643C8__7S5643C9__7S5643C5[] = {
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI7S5643C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__7S5643C9__7S5643C5[] = {
  ABISELECT(-1264,-940),
  ABISELECT(-1312,-964),
  (VTBL_ENTRY)&(_ZTI7S5643C9[0]),
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C6__7S5643C5[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5643C8__7S5643C5[] = {
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__7S5643C5[] = {
  ABISELECT(-1264,-940),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C10[0]),
};
extern void _ZN8S5643C11D1Ev();
extern void _ZN8S5643C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C11__7S5643C5[] = {
  ABISELECT(-1408,-1040),
  ABISELECT(-1408,-1040),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C11[0]),
  (VTBL_ENTRY)&_ZN8S5643C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C11D0Ev,
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C11__A1__7S5643C5[] = {
  ABISELECT(-1408,-1040),
  ABISELECT(-1408,-1040),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
static  VTT_ENTRY vtt_S5643C5[] = {
  {&(_ZTV7S5643C5[9]),  9,33},
  {&(_tg__ZTV7S5643C9__7S5643C5[7]),  7,7},
  {&(_tg__ZTV7S5643C8__7S5643C9__7S5643C5[5]),  5,5},
  {&(_tg__ZTV8S5643C10__7S5643C9__7S5643C5[3]),  3,3},
  {&(_ZTV7S5643C5[16]),  16,33},
  {&(_ZTV7S5643C5[23]),  23,33},
  {&(_ZTV7S5643C5[26]),  26,33},
  {&(_ZTV7S5643C5[31]),  31,33},
  {&(_tg__ZTV7S5643C6__7S5643C5[4]),  4,6},
  {&(_tg__ZTV7S5643C8__7S5643C5[5]),  5,5},
  {&(_tg__ZTV8S5643C10__7S5643C5[3]),  3,3},
  {&(_tg__ZTV8S5643C11__7S5643C5[4]),  4,6},
  {&(_tg__ZTV7S5643C68S5643C11__A1__7S5643C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S5643C5[];
extern  VTBL_ENTRY _ZTV7S5643C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C5[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5643C5D0Ev,_ZTv0_n20_N7S5643C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N7S5643C5D0Ev,_ZThn1064_N7S5643C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5643C5D0Ev,_ZThn8_N7S5643C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5643C5D1Ev,_ZTv0_n20_N7S5643C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N7S5643C5D1Ev,_ZThn1064_N7S5643C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5643C5D1Ev,_ZThn8_N7S5643C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5643C5 = {  "S5643C5", // class name
  bases_S5643C5, 14,
  &(vtc_S5643C5[0]), // expected_vtbl_contents
  &(vtt_S5643C5[0]), // expected_vtt_contents
  ABISELECT(1488,1080), // object size
  NSPAIRA(_ZTI7S5643C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S5643C5),33, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5643C5),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5643C13  : virtual S5643C3_nt , S5643C2 {
  int s5643c13f0[4];
  virtual  ~S5643C13(); // _ZN8S5643C13D2Ev
  S5643C13(); // tgen
};
//SIG(-1 S5643C13) C1{ VBC2{ m FD} BC3{ m FC2[7]} vd Fi[4]}


 S5643C13 ::~S5643C13(){ note_dtor("S5643C13", this);}
S5643C13 ::S5643C13(){ note_ctor("S5643C13", this);} // tgen

static void Test_S5643C13()
{
  extern Class_Descriptor cd_S5643C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,30)];
    init_test(&cd_S5643C13, buf);
    S5643C13 *dp, &lv = *(dp=new (buf) S5643C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,116), "sizeof(S5643C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5643C13)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(144,104), "S5643C13");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(16,4), "S5643C13");
    check_field_offset(lv, s5643c13f0, ABISELECT(128,88), "S5643C13.s5643c13f0");
    test_class_info(&lv, &cd_S5643C13);
    dp->~S5643C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5643C13(Test_S5643C13, "S5643C13", ABISELECT(160,116));

#else // __cplusplus

extern void _ZN8S5643C13C1Ev();
extern void _ZN8S5643C13D2Ev();
Name_Map name_map_S5643C13[] = {
  NSPAIR(_ZN8S5643C13C1Ev),
  NSPAIR(_ZN8S5643C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
static Base_Class bases_S5643C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_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
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C2,    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 _ZTI8S5643C13[];
extern void _ZN8S5643C13D1Ev();
extern void _ZN8S5643C13D0Ev();
static  VTBL_ENTRY vtc_S5643C13[] = {
  ABISELECT(144,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C13[0]),
  (VTBL_ENTRY)&_ZN8S5643C13D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C13D0Ev,
};
extern VTBL_ENTRY _ZTV8S5643C13[];
static  VTT_ENTRY vtt_S5643C13[] = {
  {&(_ZTV8S5643C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S5643C13[];
extern  VTBL_ENTRY _ZTV8S5643C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C13[];
Class_Descriptor cd_S5643C13 = {  "S5643C13", // class name
  bases_S5643C13, 2,
  &(vtc_S5643C13[0]), // expected_vtbl_contents
  &(vtt_S5643C13[0]), // expected_vtt_contents
  ABISELECT(160,116), // object size
  NSPAIRA(_ZTI8S5643C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S5643C13),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5643C13),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5643C12  : virtual S5643C13 , virtual S239C12_nt {
  int s5643c12f0;
  ~S5643C12(); // tgen
  S5643C12(); // tgen
};
//SIG(-1 S5643C12) C1{ VBC2{ VBC3{ m FD} BC4{ m FC3[7]} vd Fi[4]} VBC5{ m} Fi}


S5643C12 ::~S5643C12(){ note_dtor("S5643C12", this);} // tgen
S5643C12 ::S5643C12(){ note_ctor("S5643C12", this);} // tgen

static void Test_S5643C12()
{
  extern Class_Descriptor cd_S5643C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,32)];
    init_test(&cd_S5643C12, buf);
    S5643C12 *dp, &lv = *(dp=new (buf) S5643C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S5643C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5643C12)");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C13*), ABISELECT(160,112), "S5643C12");
    check_base_class_offset(lv, (S5643C2*)(S5643C13*), ABISELECT(32,12), "S5643C12");
    check_base_class_offset(lv, (S5643C13*), ABISELECT(16,8), "S5643C12");
    check_base_class_offset(lv, (S239C12_nt*), 0, "S5643C12");
    check_field_offset(lv, s5643c12f0, ABISELECT(8,4), "S5643C12.s5643c12f0");
    test_class_info(&lv, &cd_S5643C12);
    dp->~S5643C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5643C12(Test_S5643C12, "S5643C12", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN8S5643C12C1Ev();
extern void _ZN8S5643C12D1Ev();
Name_Map name_map_S5643C12[] = {
  NSPAIR(_ZN8S5643C12C1Ev),
  NSPAIR(_ZN8S5643C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C13;
extern VTBL_ENTRY _ZTI8S5643C13[];
extern  VTBL_ENTRY _ZTV8S5643C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C13[];
extern Class_Descriptor cd_S239C12_nt;
extern VTBL_ENTRY _ZTI10S239C12_nt[];
static Base_Class bases_S5643C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_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
    2, //immediately_derived
  0, 1},
  {&cd_S5643C2,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5643C13,    ABISELECT(16,8), //bcp->offset
    7, //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},
  {&cd_S239C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S5643C12[];
extern void _ZN8S5643C12D1Ev();
extern void _ZN8S5643C12D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S5643C12D1Ev,_ZTv0_n16_N8S5643C12D1Ev)();
extern void ABISELECT(_ZThn16_N8S5643C12D1Ev,_ZThn8_N8S5643C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S5643C12D0Ev,_ZTv0_n16_N8S5643C12D0Ev)();
extern void ABISELECT(_ZThn16_N8S5643C12D0Ev,_ZThn8_N8S5643C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5643C12[] = {
  0,
  ABISELECT(160,112),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C12[0]),
  (VTBL_ENTRY)&_ZN8S5643C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C12D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(144,104),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S5643C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S5643C12D1Ev,_ZTv0_n16_N8S5643C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S5643C12D0Ev,_ZTv0_n16_N8S5643C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S5643C12[];
extern void _ZN8S5643C13D1Ev();
extern void _ZN8S5643C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C13__8S5643C12[] = {
  ABISELECT(144,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C13[0]),
  (VTBL_ENTRY)&_ZN8S5643C13D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C13D0Ev,
};
static  VTT_ENTRY vtt_S5643C12[] = {
  {&(_ZTV8S5643C12[5]),  5,13},
  {&(_ZTV8S5643C12[11]),  11,13},
  {&(_tg__ZTV8S5643C13__8S5643C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S5643C12[];
extern  VTBL_ENTRY _ZTV8S5643C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C12[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S5643C12D0Ev,_ZTv0_n16_N8S5643C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S5643C12D0Ev,_ZThn8_N8S5643C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S5643C12D1Ev,_ZTv0_n16_N8S5643C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S5643C12D1Ev,_ZThn8_N8S5643C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5643C12 = {  "S5643C12", // class name
  bases_S5643C12, 4,
  &(vtc_S5643C12[0]), // expected_vtbl_contents
  &(vtt_S5643C12[0]), // expected_vtt_contents
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI8S5643C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S5643C12),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5643C12),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5643C17  : virtual S5408C7_nt , S5643C8 , S5643C6 , S5643C10 {
  ~S5643C17(); // tgen
  S5643C17(); // tgen
};
//SIG(-1 S5643C17) C1{ VBC2{ m} BC3{ VBC4{ m FD} VBC5{ m FC4[7]} VBC2 FC5[10]} BC6{ BC4 VBC2 VBC5 vd} BC7{ BC4 BC5 VBC2}}


S5643C17 ::~S5643C17(){ note_dtor("S5643C17", this);} // tgen
S5643C17 ::S5643C17(){ note_ctor("S5643C17", this);} // tgen

static void Test_S5643C17()
{
  extern Class_Descriptor cd_S5643C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(91,265)];
    init_test(&cd_S5643C17, buf);
    S5643C17 *dp, &lv = *(dp=new (buf) S5643C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1440,1056), "sizeof(S5643C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5643C17)");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S5643C17");
    check_base_class_offset(lv, (S5408C7_nt*)(S5643C8*), 0, "S5643C17");
    check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*), 0, "S5643C17");
    check_base_class_offset(lv, (S5408C7_nt*)(S5643C10*), 0, "S5643C17");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C8*), ABISELECT(1312,960), "S5643C17");
    check_base_class_offset(lv, (S5643C2*)(S5643C8*), ABISELECT(1328,972), "S5643C17");
    check_base_class_offset(lv, (S5643C2*)(S5643C6*), ABISELECT(1328,972), "S5643C17");
    check_base_class_offset(lv, (S5643C8*), 0, "S5643C17");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*), ABISELECT(1152,848), "S5643C17");
    check_base_class_offset(lv, (S5643C6*), ABISELECT(1136,844), "S5643C17");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C10*), ABISELECT(1184,864), "S5643C17");
    check_base_class_offset(lv, (S5643C2*)(S5643C10*), ABISELECT(1200,876), "S5643C17");
    check_base_class_offset(lv, (S5643C10*), ABISELECT(1168,860), "S5643C17");
    test_class_info(&lv, &cd_S5643C17);
    dp->~S5643C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5643C17(Test_S5643C17, "S5643C17", ABISELECT(1440,1056));

#else // __cplusplus

extern void _ZN8S5643C17C1Ev();
extern void _ZN8S5643C17D1Ev();
Name_Map name_map_S5643C17[] = {
  NSPAIR(_ZN8S5643C17C1Ev),
  NSPAIR(_ZN8S5643C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C8;
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C10;
extern VTBL_ENTRY _ZTI8S5643C10[];
extern  VTBL_ENTRY _ZTV8S5643C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C10[];
static Base_Class bases_S5643C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5643C3_nt,    ABISELECT(1312,960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1328,972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C8,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C3_nt,    ABISELECT(1152,848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C6,    ABISELECT(1136,844), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C3_nt,    ABISELECT(1184,864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1200,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C10,    ABISELECT(1168,860), //bcp->offset
    13, //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 _ZTI8S5643C17[];
extern void _ZN8S5643C17D1Ev();
extern void _ZN8S5643C17D0Ev();
extern void ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev)();
extern void ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev)();
static  VTBL_ENTRY vtc_S5643C17[] = {
  0,
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&_ZN8S5643C17D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C17D0Ev,
  ABISELECT(192,128),
  ABISELECT(-1136,-844),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev),
  ABISELECT(-1168,-860),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
};
extern VTBL_ENTRY _ZTV8S5643C17[];
static  VTBL_ENTRY _tg__ZTV7S5643C8__8S5643C17[] = {
  0,
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C17[] = {
  ABISELECT(192,128),
  ABISELECT(-1136,-844),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__8S5643C17[] = {
  ABISELECT(-1168,-860),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C10[0]),
};
static  VTT_ENTRY vtt_S5643C17[] = {
  {&(_ZTV8S5643C17[5]),  5,16},
  {&(_tg__ZTV7S5643C8__8S5643C17[5]),  5,5},
  {&(_tg__ZTV7S5643C6__8S5643C17[4]),  4,6},
  {&(_tg__ZTV8S5643C10__8S5643C17[3]),  3,3},
  {&(_ZTV8S5643C17[11]),  11,16},
  {&(_ZTV8S5643C17[16]),  16,16},
};
extern VTBL_ENTRY _ZTI8S5643C17[];
extern  VTBL_ENTRY _ZTV8S5643C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C17[];
Class_Descriptor cd_S5643C17 = {  "S5643C17", // class name
  bases_S5643C17, 9,
  &(vtc_S5643C17[0]), // expected_vtbl_contents
  &(vtt_S5643C17[0]), // expected_vtt_contents
  ABISELECT(1440,1056), // object size
  NSPAIRA(_ZTI8S5643C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S5643C17),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5643C17),6, //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  S5643C16  : virtual S5643C10 , virtual S5643C6 , S239C12_nt , virtual S5643C17 {
  virtual  ~S5643C16(); // _ZN8S5643C16D2Ev
  S5643C16(); // tgen
};
//SIG(-1 S5643C16) C1{ VBC2{ BC3{ m FD} BC4{ m FC3[7]} VBC5{ m}} VBC6{ BC3 VBC5 VBC4 vd} BC7{ m} VBC8{ VBC5 BC9{ VBC3 VBC4 VBC5 FC4[10]} BC6 BC2} vd}


 S5643C16 ::~S5643C16(){ note_dtor("S5643C16", this);}
S5643C16 ::S5643C16(){ note_ctor("S5643C16", this);} // tgen

static void Test_S5643C16()
{
  extern Class_Descriptor cd_S5643C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,295)];
    init_test(&cd_S5643C16, buf);
    S5643C16 *dp, &lv = *(dp=new (buf) S5643C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,1176), "sizeof(S5643C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5643C16)");
    /*is_ambiguous_... S5643C16::S5643C10 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C10*), ABISELECT(32,8), "S5643C16");
    /*is_ambiguous_... S5643C16::S5643C10 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C10*), ABISELECT(48,20), "S5643C16");
    /*is_ambiguous_... S5643C16::S5643C10 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C10*), 0, "S5643C16");
    /*is_ambiguous_... S5643C16::S5643C6 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*), 0, "S5643C16");
    check_base_class_offset(lv, (S5408C7_nt*)(S5643C17*), 0, "S5643C16");
    check_base_class_offset(lv, (S5408C7_nt*)(S5643C8*)(S5643C17*), 0, "S5643C16");
    check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*)(S5643C17*), 0, "S5643C16");
    check_base_class_offset(lv, (S5408C7_nt*)(S5643C10*)(S5643C17*), 0, "S5643C16");
    /*is_ambiguous_... S5643C16::S5643C10 */ AMB_check_base_class_offset(lv, (S5643C10*), ABISELECT(16,4), "S5643C16");
    /*is_ambiguous_... S5643C16::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*), ABISELECT(176,108), "S5643C16");
    /*is_ambiguous_... S5643C16::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C6*), ABISELECT(192,120), "S5643C16");
    check_base_class_offset(lv, (S5643C2*)(S5643C8*)(S5643C17*), ABISELECT(192,120), "S5643C16");
    check_base_class_offset(lv, (S5643C2*)(S5643C6*)(S5643C17*), ABISELECT(192,120), "S5643C16");
    /*is_ambiguous_... S5643C16::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C6*), ABISELECT(160,104), "S5643C16");
    check_base_class_offset(lv, (S239C12_nt*), 0, "S5643C16");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C8*)(S5643C17*), ABISELECT(1616,1164), "S5643C16");
    check_base_class_offset(lv, (S5643C8*)(S5643C17*), ABISELECT(304,204), "S5643C16");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*)(S5643C17*), ABISELECT(1456,1052), "S5643C16");
    check_base_class_offset(lv, (S5643C6*)(S5643C17*), ABISELECT(1440,1048), "S5643C16");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C10*)(S5643C17*), ABISELECT(1488,1068), "S5643C16");
    check_base_class_offset(lv, (S5643C2*)(S5643C10*)(S5643C17*), ABISELECT(1504,1080), "S5643C16");
    check_base_class_offset(lv, (S5643C10*)(S5643C17*), ABISELECT(1472,1064), "S5643C16");
    check_base_class_offset(lv, (S5643C17*), ABISELECT(304,204), "S5643C16");
    test_class_info(&lv, &cd_S5643C16);
    dp->~S5643C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5643C16(Test_S5643C16, "S5643C16", ABISELECT(1632,1176));

#else // __cplusplus

extern void _ZN8S5643C16C1Ev();
extern void _ZN8S5643C16D2Ev();
Name_Map name_map_S5643C16[] = {
  NSPAIR(_ZN8S5643C16C1Ev),
  NSPAIR(_ZN8S5643C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C10;
extern VTBL_ENTRY _ZTI8S5643C10[];
extern  VTBL_ENTRY _ZTV8S5643C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C10[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S239C12_nt;
extern VTBL_ENTRY _ZTI10S239C12_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C8;
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C10;
extern VTBL_ENTRY _ZTI8S5643C10[];
extern  VTBL_ENTRY _ZTV8S5643C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C10[];
extern Class_Descriptor cd_S5643C17;
extern VTBL_ENTRY _ZTI8S5643C17[];
extern  VTBL_ENTRY _ZTV8S5643C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C17[];
static Base_Class bases_S5643C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(32,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_S5643C2,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C10,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(176,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
    6, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(192,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
    6, //immediately_derived
  0, 1},
  {&cd_S5643C6,    ABISELECT(160,104), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S239C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5643C3_nt,    ABISELECT(1616,1164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C8,    ABISELECT(304,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    15, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1456,1052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C6,    ABISELECT(1440,1048), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1488,1068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1504,1080), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C10,    ABISELECT(1472,1064), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S5643C17,    ABISELECT(304,204), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S5643C16[];
extern void _ZN8S5643C16D1Ev();
extern void _ZN8S5643C16D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S5643C16D1Ev,_ZTv0_n20_N8S5643C16D1Ev)();
extern void ABISELECT(_ZThn160_N8S5643C16D1Ev,_ZThn104_N8S5643C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S5643C16D0Ev,_ZTv0_n20_N8S5643C16D0Ev)();
extern void ABISELECT(_ZThn160_N8S5643C16D0Ev,_ZThn104_N8S5643C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5643C16D1Ev,_ZTv0_n24_N8S5643C16D1Ev)();
extern void ABISELECT(_ZThn304_N8S5643C16D1Ev,_ZThn204_N8S5643C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5643C16D0Ev,_ZTv0_n24_N8S5643C16D0Ev)();
extern void ABISELECT(_ZThn304_N8S5643C16D0Ev,_ZThn204_N8S5643C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n48_N8S5643C16D1Ev,_ZTvn844_n24_N8S5643C16D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S5643C16D0Ev,_ZTvn844_n24_N8S5643C16D0Ev)();
static  VTBL_ENTRY vtc_S5643C16[] = {
  ABISELECT(1616,1164),
  ABISELECT(304,204),
  ABISELECT(192,120),
  ABISELECT(160,104),
  0,
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&_ZN8S5643C16D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C16D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  ABISELECT(-160,-104),
  ABISELECT(32,16),
  ABISELECT(-160,-104),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S5643C16D1Ev,_ZTv0_n20_N8S5643C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S5643C16D0Ev,_ZTv0_n20_N8S5643C16D0Ev),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1312,960),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5643C16D1Ev,_ZTv0_n24_N8S5643C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5643C16D0Ev,_ZTv0_n24_N8S5643C16D0Ev),
  ABISELECT(-1248,-928),
  ABISELECT(-1440,-1048),
  ABISELECT(-1440,-1048),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S5643C16D1Ev,_ZTvn844_n24_N8S5643C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S5643C16D0Ev,_ZTvn844_n24_N8S5643C16D0Ev),
  ABISELECT(-1472,-1064),
  ABISELECT(-1472,-1064),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
};
extern VTBL_ENTRY _ZTV8S5643C16[];
static  VTBL_ENTRY _tg__ZTV8S5643C10__8S5643C16[] = {
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C10[0]),
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C16[] = {
  ABISELECT(32,16),
  ABISELECT(-160,-104),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
extern void _ZN8S5643C17D1Ev();
extern void _ZN8S5643C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C17__8S5643C16[] = {
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&_ZN8S5643C17D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5643C88S5643C17__8S5643C16[] = {
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C17__A1__8S5643C16[] = {
  ABISELECT(-1248,-928),
  ABISELECT(-1440,-1048),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C17__A1__8S5643C16[] = {
  ABISELECT(-1472,-1064),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C10[0]),
};
extern void ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev)();
extern void ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C17__8S5643C16[] = {
  ABISELECT(-1248,-928),
  ABISELECT(-1440,-1048),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__8S5643C17__8S5643C16[] = {
  ABISELECT(-1472,-1064),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
};
static  VTT_ENTRY vtt_S5643C16[] = {
  {&(_ZTV8S5643C16[8]),  8,37},
  {&(_ZTV8S5643C16[13]),  13,37},
  {&(_ZTV8S5643C16[18]),  18,37},
  {&(_ZTV8S5643C16[26]),  26,37},
  {&(_ZTV8S5643C16[32]),  32,37},
  {&(_ZTV8S5643C16[37]),  37,37},
  {&(_tg__ZTV8S5643C10__8S5643C16[3]),  3,3},
  {&(_tg__ZTV7S5643C6__8S5643C16[4]),  4,6},
  {&(_tg__ZTV8S5643C17__8S5643C16[5]),  5,7},
  {&(_tg__ZTV7S5643C88S5643C17__8S5643C16[5]),  5,5},
  {&(_tg__ZTV7S5643C68S5643C17__A1__8S5643C16[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C17__A1__8S5643C16[3]),  3,3},
  {&(_tg__ZTV7S5643C6__8S5643C17__8S5643C16[4]),  4,6},
  {&(_tg__ZTV8S5643C10__8S5643C17__8S5643C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S5643C16[];
extern  VTBL_ENTRY _ZTV8S5643C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C16[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5643C16D0Ev,_ZTv0_n24_N8S5643C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S5643C16D0Ev,_ZThn204_N8S5643C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5643C16D1Ev,_ZTv0_n24_N8S5643C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S5643C16D1Ev,_ZThn204_N8S5643C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S5643C16D0Ev,_ZTv0_n20_N8S5643C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S5643C16D0Ev,_ZThn104_N8S5643C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S5643C16D1Ev,_ZTv0_n20_N8S5643C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S5643C16D1Ev,_ZThn104_N8S5643C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5643C16 = {  "S5643C16", // class name
  bases_S5643C16, 16,
  &(vtc_S5643C16[0]), // expected_vtbl_contents
  &(vtt_S5643C16[0]), // expected_vtt_contents
  ABISELECT(1632,1176), // object size
  NSPAIRA(_ZTI8S5643C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S5643C16),37, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5643C16),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5643C15  : S5643C8 , S5643C13 , S5643C16 , S5643C17 {
  virtual  ~S5643C15(); // _ZN8S5643C15D2Ev
  S5643C15(); // tgen
};
//SIG(-1 S5643C15) C1{ BC2{ VBC3{ m FD} VBC4{ m FC3[7]} VBC5{ m} FC4[10]} BC6{ VBC3 BC4 vd Fi[4]} BC7{ VBC8{ BC3 BC4 VBC5} VBC9{ BC3 VBC5 VBC4 vd} BC10{ m} VBC11{ VBC5 BC2 BC9 BC8} vd} BC11 vd}


 S5643C15 ::~S5643C15(){ note_dtor("S5643C15", this);}
S5643C15 ::S5643C15(){ note_ctor("S5643C15", this);} // tgen

static void Test_S5643C15()
{
  extern Class_Descriptor cd_S5643C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(265,772)];
    init_test(&cd_S5643C15, buf);
    S5643C15 *dp, &lv = *(dp=new (buf) S5643C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4224,3084), "sizeof(S5643C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5643C15)");
    /*is_ambiguous_... S5643C15::S5643C8 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C8*), ABISELECT(2608,1912), "S5643C15");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C13*), ABISELECT(2608,1912), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C8*)(S5643C17*), ABISELECT(2608,1912), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C8*)(S5643C17*), ABISELECT(2608,1912), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C8 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C8*), ABISELECT(2624,1924), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C6*), ABISELECT(2624,1924), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C8*)(S5643C17*), ABISELECT(2624,1924), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C6*)(S5643C17*), ABISELECT(2624,1924), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C8*)(S5643C17*), ABISELECT(2624,1924), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C6*)(S5643C17*), ABISELECT(2624,1924), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C8 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C8*), 0, "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C10 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C10*), 0, "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C6 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*), 0, "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C17*), 0, "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C8*)(S5643C17*), 0, "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*)(S5643C17*), 0, "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C10*)(S5643C17*), 0, "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C17*), 0, "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C8*)(S5643C17*), 0, "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*)(S5643C17*), 0, "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C10*)(S5643C17*), 0, "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C8 */ AMB_check_base_class_offset(lv, (S5643C8*), 0, "S5643C15");
    check_base_class_offset(lv, (S5643C2*)(S5643C13*), ABISELECT(1152,848), "S5643C15");
    check_base_class_offset(lv, (S5643C13*), ABISELECT(1136,844), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C10 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C10*), ABISELECT(2752,2012), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C10 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C10*), ABISELECT(2768,2024), "S5643C15");
    /*is_ambiguous_... S5643C16::S5643C10 */ AMB_check_base_class_offset(lv, (S5643C10*)(S5643C16*), ABISELECT(2736,2008), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*), ABISELECT(2896,2112), "S5643C15");
    /*is_ambiguous_... S5643C16::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C6*)(S5643C16*), ABISELECT(2880,2108), "S5643C15");
    check_base_class_offset(lv, (S239C12_nt*)(S5643C16*), ABISELECT(1280,948), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C8*)(S5643C17*), ABISELECT(2912,2124), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*)(S5643C17*), ABISELECT(4064,2972), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C6*)(S5643C17*), ABISELECT(4048,2968), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C10*)(S5643C17*), ABISELECT(4096,2988), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C10*)(S5643C17*), ABISELECT(4112,3000), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C10*)(S5643C17*), ABISELECT(4080,2984), "S5643C15");
    check_base_class_offset(lv, (S5643C17*)(S5643C16*), ABISELECT(2912,2124), "S5643C15");
    check_base_class_offset(lv, (S5643C16*), ABISELECT(1280,948), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C8*)(S5643C17*), ABISELECT(1296,952), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*)(S5643C17*), ABISELECT(2448,1800), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C6*)(S5643C17*), ABISELECT(2432,1796), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C10*)(S5643C17*), ABISELECT(2480,1816), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C10*)(S5643C17*), ABISELECT(2496,1828), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C10*)(S5643C17*), ABISELECT(2464,1812), "S5643C15");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C17*), ABISELECT(1296,952), "S5643C15");
    test_class_info(&lv, &cd_S5643C15);
    dp->~S5643C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5643C15(Test_S5643C15, "S5643C15", ABISELECT(4224,3084));

#else // __cplusplus

extern void _ZN8S5643C15C1Ev();
extern void _ZN8S5643C15D2Ev();
Name_Map name_map_S5643C15[] = {
  NSPAIR(_ZN8S5643C15C1Ev),
  NSPAIR(_ZN8S5643C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C8;
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C13;
extern VTBL_ENTRY _ZTI8S5643C13[];
extern  VTBL_ENTRY _ZTV8S5643C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C13[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C10;
extern VTBL_ENTRY _ZTI8S5643C10[];
extern  VTBL_ENTRY _ZTV8S5643C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C10[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S239C12_nt;
extern VTBL_ENTRY _ZTI10S239C12_nt[];
extern Class_Descriptor cd_S5643C8;
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C10;
extern VTBL_ENTRY _ZTI8S5643C10[];
extern  VTBL_ENTRY _ZTV8S5643C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C10[];
extern Class_Descriptor cd_S5643C17;
extern VTBL_ENTRY _ZTI8S5643C17[];
extern  VTBL_ENTRY _ZTV8S5643C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C17[];
extern Class_Descriptor cd_S5643C16;
extern VTBL_ENTRY _ZTI8S5643C16[];
extern  VTBL_ENTRY _ZTV8S5643C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C16[];
extern Class_Descriptor cd_S5643C8;
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C10;
extern VTBL_ENTRY _ZTI8S5643C10[];
extern  VTBL_ENTRY _ZTV8S5643C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C10[];
extern Class_Descriptor cd_S5643C17;
extern VTBL_ENTRY _ZTI8S5643C17[];
extern  VTBL_ENTRY _ZTV8S5643C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C17[];
static Base_Class bases_S5643C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(2608,1912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(2624,1924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C8,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C2,    ABISELECT(1152,848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C13,    ABISELECT(1136,844), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C3_nt,    ABISELECT(2752,2012), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(2768,2024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C10,    ABISELECT(2736,2008), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S5643C3_nt,    ABISELECT(2896,2112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C6,    ABISELECT(2880,2108), //bcp->offset
    44, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S239C12_nt,    ABISELECT(1280,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
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S5643C8,    ABISELECT(2912,2124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(4064,2972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C6,    ABISELECT(4048,2968), //bcp->offset
    59, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(4096,2988), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(4112,3000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C10,    ABISELECT(4080,2984), //bcp->offset
    65, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S5643C17,    ABISELECT(2912,2124), //bcp->offset
    51, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S5643C16,    ABISELECT(1280,948), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C8,    ABISELECT(1296,952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(2448,1800), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C6,    ABISELECT(2432,1796), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(2480,1816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(2496,1828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C10,    ABISELECT(2464,1812), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S5643C17,    ABISELECT(1296,952), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S5643C15[];
extern void _ZN8S5643C15D1Ev();
extern void _ZN8S5643C15D0Ev();
extern void ABISELECT(_ZThn1136_N8S5643C15D1Ev,_ZThn844_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn1136_N8S5643C15D0Ev,_ZThn844_N8S5643C15D0Ev)();
extern void ABISELECT(_ZThn1280_N8S5643C15D1Ev,_ZThn948_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn1280_N8S5643C15D0Ev,_ZThn948_N8S5643C15D0Ev)();
extern void ABISELECT(_ZThn1296_N8S5643C15D1Ev,_ZThn952_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn1296_N8S5643C15D0Ev,_ZThn952_N8S5643C15D0Ev)();
extern void ABISELECT(_ZThn2432_N8S5643C15D1Ev,_ZThn1796_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn2432_N8S5643C15D0Ev,_ZThn1796_N8S5643C15D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S5643C15D1Ev,_ZTv0_n20_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn2880_N8S5643C15D1Ev,_ZThn2108_N8S5643C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S5643C15D0Ev,_ZTv0_n20_N8S5643C15D0Ev)();
extern void ABISELECT(_ZThn2880_N8S5643C15D0Ev,_ZThn2108_N8S5643C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5643C15D1Ev,_ZTv0_n24_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn2912_N8S5643C15D1Ev,_ZThn2124_N8S5643C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5643C15D0Ev,_ZTv0_n24_N8S5643C15D0Ev)();
extern void ABISELECT(_ZThn2912_N8S5643C15D0Ev,_ZThn2124_N8S5643C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n48_N8S5643C15D1Ev,_ZTvn844_n24_N8S5643C15D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S5643C15D0Ev,_ZTvn844_n24_N8S5643C15D0Ev)();
static  VTBL_ENTRY vtc_S5643C15[] = {
  ABISELECT(2912,2124),
  ABISELECT(2880,2108),
  ABISELECT(2736,2008),
  0,
  ABISELECT(2624,1924),
  ABISELECT(2608,1912),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&_ZN8S5643C15D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C15D0Ev,
  ABISELECT(1472,1068),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C15D1Ev,_ZThn844_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C15D0Ev,_ZThn844_N8S5643C15D0Ev),
  ABISELECT(1328,964),
  ABISELECT(1632,1176),
  ABISELECT(1344,976),
  ABISELECT(1600,1160),
  ABISELECT(-1280,-948),
  ABISELECT(1456,1060),
  ABISELECT(-1280,-948),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S5643C15D1Ev,_ZThn948_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S5643C15D0Ev,_ZThn948_N8S5643C15D0Ev),
  ABISELECT(-1296,-952),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  ABISELECT(-1296,-952),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S5643C15D1Ev,_ZThn952_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S5643C15D0Ev,_ZThn952_N8S5643C15D0Ev),
  ABISELECT(192,128),
  ABISELECT(-2432,-1796),
  ABISELECT(-2432,-1796),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2432_N8S5643C15D1Ev,_ZThn1796_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2432_N8S5643C15D0Ev,_ZThn1796_N8S5643C15D0Ev),
  ABISELECT(-2464,-1812),
  ABISELECT(-2464,-1812),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  ABISELECT(-2736,-2008),
  ABISELECT(-2736,-2008),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  ABISELECT(-2880,-2108),
  ABISELECT(-256,-184),
  ABISELECT(-2880,-2108),
  ABISELECT(-2880,-2108),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S5643C15D1Ev,_ZTv0_n20_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S5643C15D0Ev,_ZTv0_n20_N8S5643C15D0Ev),
  ABISELECT(-2912,-2124),
  ABISELECT(-2912,-2124),
  ABISELECT(-288,-200),
  ABISELECT(-304,-212),
  ABISELECT(-2912,-2124),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5643C15D1Ev,_ZTv0_n24_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5643C15D0Ev,_ZTv0_n24_N8S5643C15D0Ev),
  ABISELECT(-1424,-1044),
  ABISELECT(-4048,-2968),
  ABISELECT(-4048,-2968),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S5643C15D1Ev,_ZTvn844_n24_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S5643C15D0Ev,_ZTvn844_n24_N8S5643C15D0Ev),
  ABISELECT(-4080,-2984),
  ABISELECT(-4080,-2984),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
};
extern VTBL_ENTRY _ZTV8S5643C15[];
static  VTBL_ENTRY _tg__ZTV7S5643C8__8S5643C15[] = {
  0,
  ABISELECT(2624,1924),
  ABISELECT(2608,1912),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
extern void _ZN8S5643C13D1Ev();
extern void _ZN8S5643C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C13__8S5643C15[] = {
  ABISELECT(1472,1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C13[0]),
  (VTBL_ENTRY)&_ZN8S5643C13D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C13D0Ev,
};
extern void _ZN8S5643C16D1Ev();
extern void _ZN8S5643C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C16__8S5643C15[] = {
  ABISELECT(1328,964),
  ABISELECT(1632,1176),
  ABISELECT(1344,976),
  ABISELECT(1600,1160),
  ABISELECT(-1280,-948),
  ABISELECT(1456,1060),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&_ZN8S5643C16D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__8S5643C16__8S5643C15[] = {
  ABISELECT(-2736,-2008),
  ABISELECT(-1456,-1060),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S5643C16D1Ev,_ZTv0_n20_N8S5643C16D1Ev)();
extern void ABISELECT(_ZThn1600_N8S5643C16D1Ev,_ZThn1160_N8S5643C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S5643C16D0Ev,_ZTv0_n20_N8S5643C16D0Ev)();
extern void ABISELECT(_ZThn1600_N8S5643C16D0Ev,_ZThn1160_N8S5643C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C16__8S5643C15[] = {
  ABISELECT(-1600,-1160),
  ABISELECT(-256,-184),
  ABISELECT(-2880,-2108),
  ABISELECT(-1600,-1160),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S5643C16D1Ev,_ZTv0_n20_N8S5643C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S5643C16D0Ev,_ZTv0_n20_N8S5643C16D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S5643C16D1Ev,_ZTv0_n24_N8S5643C16D1Ev)();
extern void ABISELECT(_ZThn1632_N8S5643C16D1Ev,_ZThn1176_N8S5643C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5643C16D0Ev,_ZTv0_n24_N8S5643C16D0Ev)();
extern void ABISELECT(_ZThn1632_N8S5643C16D0Ev,_ZThn1176_N8S5643C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5643C17__8S5643C16__8S5643C15[] = {
  ABISELECT(-1632,-1176),
  ABISELECT(-2912,-2124),
  ABISELECT(-288,-200),
  ABISELECT(-304,-212),
  ABISELECT(-1632,-1176),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5643C16D1Ev,_ZTv0_n24_N8S5643C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5643C16D0Ev,_ZTv0_n24_N8S5643C16D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N8S5643C16D1Ev,_ZTvn844_n24_N8S5643C16D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S5643C16D0Ev,_ZTvn844_n24_N8S5643C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C17__A1__8S5643C16__8S5643C15[] = {
  ABISELECT(-1424,-1044),
  ABISELECT(-4048,-2968),
  ABISELECT(-2768,-2020),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S5643C16D1Ev,_ZTvn844_n24_N8S5643C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S5643C16D0Ev,_ZTvn844_n24_N8S5643C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C17__A1__8S5643C16__8S5643C15[] = {
  ABISELECT(-4080,-2984),
  ABISELECT(-2800,-2036),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
};
extern void _ZN8S5643C17D1Ev();
extern void _ZN8S5643C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C17__A__8S5643C15[] = {
  ABISELECT(-1296,-952),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&_ZN8S5643C17D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5643C88S5643C17__A2__8S5643C15[] = {
  ABISELECT(-1296,-952),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C17__A2__8S5643C15[] = {
  ABISELECT(192,128),
  ABISELECT(-2432,-1796),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C17__A2__8S5643C15[] = {
  ABISELECT(-2464,-1812),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C10[0]),
};
extern void ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev)();
extern void ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C17__A__8S5643C15[] = {
  ABISELECT(192,128),
  ABISELECT(-2432,-1796),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__8S5643C17__A__8S5643C15[] = {
  ABISELECT(-2464,-1812),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__8S5643C15[] = {
  ABISELECT(-2736,-2008),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C10[0]),
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C15[] = {
  ABISELECT(-256,-184),
  ABISELECT(-2880,-2108),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
extern void _ZN8S5643C17D1Ev();
extern void _ZN8S5643C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C17__8S5643C15[] = {
  ABISELECT(-2912,-2124),
  ABISELECT(-288,-200),
  ABISELECT(-304,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&_ZN8S5643C17D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5643C88S5643C17__A1__8S5643C15[] = {
  ABISELECT(-2912,-2124),
  ABISELECT(-288,-200),
  ABISELECT(-304,-212),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C17__A1__8S5643C15[] = {
  ABISELECT(-1424,-1044),
  ABISELECT(-4048,-2968),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C17__A1__8S5643C15[] = {
  ABISELECT(-4080,-2984),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C10[0]),
};
extern void ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev)();
extern void ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C17__8S5643C15[] = {
  ABISELECT(-1424,-1044),
  ABISELECT(-4048,-2968),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__8S5643C17__8S5643C15[] = {
  ABISELECT(-4080,-2984),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
};
static  VTT_ENTRY vtt_S5643C15[] = {
  {&(_ZTV8S5643C15[8]),  8,68},
  {&(_tg__ZTV7S5643C8__8S5643C15[5]),  5,5},
  {&(_tg__ZTV8S5643C13__8S5643C15[3]),  3,5},
  {&(_tg__ZTV8S5643C16__8S5643C15[8]),  8,10},
  {&(_tg__ZTV8S5643C10__8S5643C16__8S5643C15[3]),  3,3},
  {&(_tg__ZTV7S5643C6__8S5643C16__8S5643C15[5]),  5,7},
  {&(_tg__ZTV8S5643C17__8S5643C16__8S5643C15[6]),  6,8},
  {&(_tg__ZTV7S5643C68S5643C17__A1__8S5643C16__8S5643C15[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C17__A1__8S5643C16__8S5643C15[3]),  3,3},
  {&(_tg__ZTV8S5643C17__A__8S5643C15[5]),  5,7},
  {&(_tg__ZTV7S5643C88S5643C17__A2__8S5643C15[5]),  5,5},
  {&(_tg__ZTV7S5643C68S5643C17__A2__8S5643C15[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C17__A2__8S5643C15[3]),  3,3},
  {&(_tg__ZTV7S5643C6__8S5643C17__A__8S5643C15[4]),  4,6},
  {&(_tg__ZTV8S5643C10__8S5643C17__A__8S5643C15[3]),  3,3},
  {&(_ZTV8S5643C15[13]),  13,68},
  {&(_ZTV8S5643C15[23]),  23,68},
  {&(_ZTV8S5643C15[44]),  44,68},
  {&(_ZTV8S5643C15[49]),  49,68},
  {&(_ZTV8S5643C15[57]),  57,68},
  {&(_ZTV8S5643C15[63]),  63,68},
  {&(_ZTV8S5643C15[68]),  68,68},
  {&(_ZTV8S5643C15[30]),  30,68},
  {&(_ZTV8S5643C15[36]),  36,68},
  {&(_ZTV8S5643C15[41]),  41,68},
  {&(_tg__ZTV8S5643C10__8S5643C15[3]),  3,3},
  {&(_tg__ZTV7S5643C6__8S5643C15[4]),  4,6},
  {&(_tg__ZTV8S5643C17__8S5643C15[5]),  5,7},
  {&(_tg__ZTV7S5643C88S5643C17__A1__8S5643C15[5]),  5,5},
  {&(_tg__ZTV7S5643C68S5643C17__A1__8S5643C15[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C17__A1__8S5643C15[3]),  3,3},
  {&(_tg__ZTV7S5643C6__8S5643C17__8S5643C15[4]),  4,6},
  {&(_tg__ZTV8S5643C10__8S5643C17__8S5643C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S5643C15[];
extern  VTBL_ENTRY _ZTV8S5643C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C15[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5643C16D0Ev,_ZTv0_n24_N8S5643C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N8S5643C16D0Ev,_ZThn1176_N8S5643C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5643C16D1Ev,_ZTv0_n24_N8S5643C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N8S5643C16D1Ev,_ZThn1176_N8S5643C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S5643C16D0Ev,_ZTv0_n20_N8S5643C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1600_N8S5643C16D0Ev,_ZThn1160_N8S5643C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S5643C16D1Ev,_ZTv0_n20_N8S5643C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1600_N8S5643C16D1Ev,_ZThn1160_N8S5643C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5643C15D0Ev,_ZTv0_n24_N8S5643C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2912_N8S5643C15D0Ev,_ZThn2124_N8S5643C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5643C15D1Ev,_ZTv0_n24_N8S5643C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2912_N8S5643C15D1Ev,_ZThn2124_N8S5643C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S5643C15D0Ev,_ZTv0_n20_N8S5643C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2880_N8S5643C15D0Ev,_ZThn2108_N8S5643C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S5643C15D1Ev,_ZTv0_n20_N8S5643C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2880_N8S5643C15D1Ev,_ZThn2108_N8S5643C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5643C15 = {  "S5643C15", // class name
  bases_S5643C15, 27,
  &(vtc_S5643C15[0]), // expected_vtbl_contents
  &(vtt_S5643C15[0]), // expected_vtt_contents
  ABISELECT(4224,3084), // object size
  NSPAIRA(_ZTI8S5643C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S5643C15),68, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5643C15),33, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5643C4  : S5643C5 , virtual S5643C12 , virtual S5643C15 {
  virtual  ~S5643C4(); // _ZN7S5643C4D2Ev
  S5643C4(); // tgen
};
//SIG(-1 S5643C4) C1{ BC2{ VBC3{ BC4{ m FD} VBC5{ m} VBC6{ m FC4[7]} vd} VBC7{ VBC4 VBC6 VBC5 FC6[10]} BC8{ VBC6 VBC7 VBC9{ BC4 BC6 VBC5} BC5 FC5} VBC10{ BC3 vd} vd} VBC11{ VBC12{ VBC4 BC6 vd Fi[4]} VBC13{ m} Fi} VBC14{ BC7 BC12 BC15{ VBC9 VBC3 BC13 VBC16{ VBC5 BC7 BC3 BC9} vd} BC16 vd} vd}


 S5643C4 ::~S5643C4(){ note_dtor("S5643C4", this);}
S5643C4 ::S5643C4(){ note_ctor("S5643C4", this);} // tgen

static void Test_S5643C4()
{
  extern Class_Descriptor cd_S5643C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(349,1017)];
    init_test(&cd_S5643C4, buf);
    S5643C4 *dp, &lv = *(dp=new (buf) S5643C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5568,4064), "sizeof(S5643C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5643C4)");
    /*is_ambiguous_... S5643C4::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*), ABISELECT(32,12), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C6 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C8 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C8*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C10 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C10*), ABISELECT(48,24), "S5643C4");
    check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*)(S5643C11*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C8 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C8*)(S5643C15*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C17*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C8*)(S5643C17*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*)(S5643C17*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C10*)(S5643C17*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C17*)(S5643C15*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C8*)(S5643C17*)(S5643C15*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*)(S5643C17*)(S5643C15*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C10*)(S5643C17*)(S5643C15*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C6*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C8 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C8*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C9::S5643C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C9*)(S5643C5*), ABISELECT(48,24), "S5643C4");
    check_base_class_offset(lv, (S5643C2*)(S5643C6*)(S5643C11*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C8 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C8*)(S5643C15*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C8*)(S5643C17*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C6*)(S5643C17*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C8*)(S5643C17*)(S5643C15*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C6*)(S5643C17*)(S5643C15*), ABISELECT(48,24), "S5643C4");
    /*is_ambiguous_... S5643C5::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C6*)(S5643C5*), ABISELECT(16,8), "S5643C4");
    /*is_ambiguous_... S5643C16::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C6*)(S5643C16*)(S5643C15*), ABISELECT(16,8), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C8 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C8*), ABISELECT(1296,952), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C13 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C13*), ABISELECT(1296,952), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C8 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C8*)(S5643C15*), ABISELECT(1296,952), "S5643C4");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C13*)(S5643C15*), ABISELECT(1296,952), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C8*)(S5643C17*), ABISELECT(1296,952), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C8*)(S5643C17*)(S5643C15*), ABISELECT(1296,952), "S5643C4");
    check_base_class_offset(lv, (S5643C8*)(S5643C5*), ABISELECT(160,108), "S5643C4");
    check_base_class_offset(lv, (S5643C8*)(S5643C9*)(S5643C5*), ABISELECT(160,108), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C10 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C10*), ABISELECT(1328,968), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C10 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C10*), ABISELECT(1344,980), "S5643C4");
    check_base_class_offset(lv, (S5643C10*)(S5643C9*)(S5643C5*), ABISELECT(1312,964), "S5643C4");
    /*is_ambiguous_... S5643C16::S5643C10 */ AMB_check_base_class_offset(lv, (S5643C10*)(S5643C16*)(S5643C15*), ABISELECT(1312,964), "S5643C4");
    /*is_ambiguous_... S5643C9::S5408C7_nt */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C9*)(S5643C5*), 0, "S5643C4");
    check_base_class_offset(lv, (S5643C9*)(S5643C5*), 0, "S5643C4");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*)(S5643C11*), ABISELECT(1472,1068), "S5643C4");
    check_base_class_offset(lv, (S5643C6*)(S5643C11*), ABISELECT(1456,1064), "S5643C4");
    check_base_class_offset(lv, (S5643C11*)(S5643C5*), ABISELECT(1456,1064), "S5643C4");
    check_base_class_offset(lv, (S5643C5*), 0, "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C13 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C13*), ABISELECT(1520,1092), "S5643C4");
    check_base_class_offset(lv, (S5643C13*)(S5643C12*), ABISELECT(1504,1088), "S5643C4");
    check_base_class_offset(lv, (S239C12_nt*)(S5643C12*), 0, "S5643C4");
    check_base_class_offset(lv, (S5643C12*), ABISELECT(1488,1080), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C8 */ AMB_check_base_class_offset(lv, (S5643C8*)(S5643C15*), ABISELECT(1648,1192), "S5643C4");
    check_base_class_offset(lv, (S5643C2*)(S5643C13*)(S5643C15*), ABISELECT(2800,2040), "S5643C4");
    check_base_class_offset(lv, (S5643C13*)(S5643C15*), ABISELECT(2784,2036), "S5643C4");
    check_base_class_offset(lv, (S239C12_nt*)(S5643C16*)(S5643C15*), ABISELECT(2928,2140), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C8*)(S5643C17*), ABISELECT(4256,3104), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*)(S5643C17*), ABISELECT(5408,3952), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C6*)(S5643C17*), ABISELECT(5392,3948), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C10*)(S5643C17*), ABISELECT(5440,3968), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C10*)(S5643C17*), ABISELECT(5456,3980), "S5643C4");
    /*is_ambiguous_... S5643C4::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C10*)(S5643C17*), ABISELECT(5424,3964), "S5643C4");
    check_base_class_offset(lv, (S5643C17*)(S5643C16*)(S5643C15*), ABISELECT(4256,3104), "S5643C4");
    check_base_class_offset(lv, (S5643C16*)(S5643C15*), ABISELECT(2928,2140), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C8*)(S5643C17*)(S5643C15*), ABISELECT(2944,2144), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*)(S5643C17*)(S5643C15*), ABISELECT(4096,2992), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C6*)(S5643C17*)(S5643C15*), ABISELECT(4080,2988), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C10*)(S5643C17*)(S5643C15*), ABISELECT(4128,3008), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C10*)(S5643C17*)(S5643C15*), ABISELECT(4144,3020), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C10*)(S5643C17*)(S5643C15*), ABISELECT(4112,3004), "S5643C4");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C17*)(S5643C15*), ABISELECT(2944,2144), "S5643C4");
    check_base_class_offset(lv, (S5643C15*), ABISELECT(1648,1192), "S5643C4");
    test_class_info(&lv, &cd_S5643C4);
    dp->~S5643C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5643C4(Test_S5643C4, "S5643C4", ABISELECT(5568,4064));

#else // __cplusplus

extern void _ZN7S5643C4C1Ev();
extern void _ZN7S5643C4D2Ev();
Name_Map name_map_S5643C4[] = {
  NSPAIR(_ZN7S5643C4C1Ev),
  NSPAIR(_ZN7S5643C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C8;
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C10;
extern VTBL_ENTRY _ZTI8S5643C10[];
extern  VTBL_ENTRY _ZTV8S5643C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C10[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C9;
extern VTBL_ENTRY _ZTI7S5643C9[];
extern  VTBL_ENTRY _ZTV7S5643C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C9[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S5643C11;
extern VTBL_ENTRY _ZTI8S5643C11[];
extern  VTBL_ENTRY _ZTV8S5643C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C11[];
extern Class_Descriptor cd_S5643C5;
extern VTBL_ENTRY _ZTI7S5643C5[];
extern  VTBL_ENTRY _ZTV7S5643C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C5[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C13;
extern VTBL_ENTRY _ZTI8S5643C13[];
extern  VTBL_ENTRY _ZTV8S5643C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C13[];
extern Class_Descriptor cd_S239C12_nt;
extern VTBL_ENTRY _ZTI10S239C12_nt[];
extern Class_Descriptor cd_S5643C12;
extern VTBL_ENTRY _ZTI8S5643C12[];
extern  VTBL_ENTRY _ZTV8S5643C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C12[];
extern Class_Descriptor cd_S5643C8;
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C13;
extern VTBL_ENTRY _ZTI8S5643C13[];
extern  VTBL_ENTRY _ZTV8S5643C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C13[];
extern Class_Descriptor cd_S239C12_nt;
extern VTBL_ENTRY _ZTI10S239C12_nt[];
extern Class_Descriptor cd_S5643C8;
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C10;
extern VTBL_ENTRY _ZTI8S5643C10[];
extern  VTBL_ENTRY _ZTV8S5643C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C10[];
extern Class_Descriptor cd_S5643C17;
extern VTBL_ENTRY _ZTI8S5643C17[];
extern  VTBL_ENTRY _ZTV8S5643C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C17[];
extern Class_Descriptor cd_S5643C16;
extern VTBL_ENTRY _ZTI8S5643C16[];
extern  VTBL_ENTRY _ZTV8S5643C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C16[];
extern Class_Descriptor cd_S5643C8;
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C10;
extern VTBL_ENTRY _ZTI8S5643C10[];
extern  VTBL_ENTRY _ZTV8S5643C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C10[];
extern Class_Descriptor cd_S5643C17;
extern VTBL_ENTRY _ZTI8S5643C17[];
extern  VTBL_ENTRY _ZTV8S5643C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C17[];
extern Class_Descriptor cd_S5643C15;
extern VTBL_ENTRY _ZTI8S5643C15[];
extern  VTBL_ENTRY _ZTV8S5643C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C15[];
static Base_Class bases_S5643C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5408C7_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, 1},
  {&cd_S5643C2,    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_S5643C6,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S5643C3_nt,    ABISELECT(1296,952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C8,    ABISELECT(160,108), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S5643C3_nt,    ABISELECT(1328,968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1344,980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C10,    ABISELECT(1312,964), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1472,1068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C6,    ABISELECT(1456,1064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5643C11,    ABISELECT(1456,1064), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S5643C5,    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
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C2,    ABISELECT(1520,1092), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C13,    ABISELECT(1504,1088), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S239C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C12,    ABISELECT(1488,1080), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C8,    ABISELECT(1648,1192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(2800,2040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C13,    ABISELECT(2784,2036), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S239C12_nt,    ABISELECT(2928,2140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C8,    ABISELECT(4256,3104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(5408,3952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C6,    ABISELECT(5392,3948), //bcp->offset
    102, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(5440,3968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(5456,3980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C10,    ABISELECT(5424,3964), //bcp->offset
    108, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S5643C17,    ABISELECT(4256,3104), //bcp->offset
    94, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S5643C16,    ABISELECT(2928,2140), //bcp->offset
    68, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S5643C8,    ABISELECT(2944,2144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(4096,2992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C6,    ABISELECT(4080,2988), //bcp->offset
    85, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(4128,3008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(4144,3020), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C10,    ABISELECT(4112,3004), //bcp->offset
    91, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S5643C17,    ABISELECT(2944,2144), //bcp->offset
    78, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S5643C15,    ABISELECT(1648,1192), //bcp->offset
    52, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5643C4[];
extern void _ZN7S5643C4D1Ev();
extern void _ZN7S5643C4D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S5643C4D1Ev,_ZTv0_n20_N7S5643C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S5643C4D1Ev,_ZThn8_N7S5643C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C4D0Ev,_ZTv0_n20_N7S5643C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S5643C4D0Ev,_ZThn8_N7S5643C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C4D1Ev,_ZTv0_n20_N7S5643C4D1Ev)();
extern void ABISELECT(_ZThn1456_N7S5643C4D1Ev,_ZThn1064_N7S5643C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C4D0Ev,_ZTv0_n20_N7S5643C4D0Ev)();
extern void ABISELECT(_ZThn1456_N7S5643C4D0Ev,_ZThn1064_N7S5643C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5643C4D1Ev,_ZTv0_n24_N7S5643C4D1Ev)();
extern void ABISELECT(_ZThn1488_N7S5643C4D1Ev,_ZThn1080_N7S5643C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5643C4D0Ev,_ZTv0_n24_N7S5643C4D0Ev)();
extern void ABISELECT(_ZThn1488_N7S5643C4D0Ev,_ZThn1080_N7S5643C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5643C4D1Ev,_ZTv0_n16_N7S5643C4D1Ev)();
extern void ABISELECT(_ZThn1504_N7S5643C4D1Ev,_ZThn1088_N7S5643C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5643C4D0Ev,_ZTv0_n16_N7S5643C4D0Ev)();
extern void ABISELECT(_ZThn1504_N7S5643C4D0Ev,_ZThn1088_N7S5643C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S5643C4D1Ev,_ZTv0_n36_N7S5643C4D1Ev)();
extern void ABISELECT(_ZThn1648_N7S5643C4D1Ev,_ZThn1192_N7S5643C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S5643C4D0Ev,_ZTv0_n36_N7S5643C4D0Ev)();
extern void ABISELECT(_ZThn1648_N7S5643C4D0Ev,_ZThn1192_N7S5643C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n72_N7S5643C4D1Ev,_ZTvn844_n36_N7S5643C4D1Ev)();
extern void ABISELECT(_ZTvn1136_n72_N7S5643C4D0Ev,_ZTvn844_n36_N7S5643C4D0Ev)();
extern void ABISELECT(_ZTvn1280_n72_N7S5643C4D1Ev,_ZTvn948_n36_N7S5643C4D1Ev)();
extern void ABISELECT(_ZTvn1280_n72_N7S5643C4D0Ev,_ZTvn948_n36_N7S5643C4D0Ev)();
extern void ABISELECT(_ZTvn1296_n72_N7S5643C4D1Ev,_ZTvn952_n36_N7S5643C4D1Ev)();
extern void ABISELECT(_ZTvn1296_n72_N7S5643C4D0Ev,_ZTvn952_n36_N7S5643C4D0Ev)();
extern void ABISELECT(_ZTvn2432_n72_N7S5643C4D1Ev,_ZTvn1796_n36_N7S5643C4D1Ev)();
extern void ABISELECT(_ZTvn2432_n72_N7S5643C4D0Ev,_ZTvn1796_n36_N7S5643C4D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S5643C4D1Ev,_ZTv0_n24_N7S5643C4D1Ev)();
extern void ABISELECT(_ZThn4256_N7S5643C4D1Ev,_ZThn3104_N7S5643C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5643C4D0Ev,_ZTv0_n24_N7S5643C4D0Ev)();
extern void ABISELECT(_ZThn4256_N7S5643C4D0Ev,_ZThn3104_N7S5643C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n48_N7S5643C4D1Ev,_ZTvn844_n24_N7S5643C4D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N7S5643C4D0Ev,_ZTvn844_n24_N7S5643C4D0Ev)();
static  VTBL_ENTRY vtc_S5643C4[] = {
  ABISELECT(4256,3104),
  ABISELECT(1648,1192),
  0,
  ABISELECT(1504,1088),
  ABISELECT(1488,1080),
  ABISELECT(1456,1064),
  ABISELECT(16,8),
  ABISELECT(1312,964),
  ABISELECT(48,24),
  ABISELECT(1296,952),
  ABISELECT(160,108),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&_ZN7S5643C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C4D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C4D1Ev,_ZTv0_n20_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C4D0Ev,_ZTv0_n20_N7S5643C4D0Ev),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  ABISELECT(-1264,-940),
  ABISELECT(-1312,-964),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  ABISELECT(-1456,-1064),
  ABISELECT(-1408,-1040),
  ABISELECT(-1408,-1040),
  ABISELECT(-1456,-1064),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C4D1Ev,_ZTv0_n20_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C4D0Ev,_ZTv0_n20_N7S5643C4D0Ev),
  ABISELECT(-1488,-1080),
  ABISELECT(-1488,-1080),
  ABISELECT(-192,-128),
  ABISELECT(16,8),
  ABISELECT(-1488,-1080),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5643C4D1Ev,_ZTv0_n24_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5643C4D0Ev,_ZTv0_n24_N7S5643C4D0Ev),
  ABISELECT(-1504,-1088),
  ABISELECT(-208,-136),
  ABISELECT(-1504,-1088),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5643C4D1Ev,_ZTv0_n16_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5643C4D0Ev,_ZTv0_n16_N7S5643C4D0Ev),
  ABISELECT(-1648,-1192),
  ABISELECT(2608,1912),
  ABISELECT(-1632,-1184),
  ABISELECT(-336,-228),
  ABISELECT(-1600,-1168),
  ABISELECT(-1600,-1168),
  ABISELECT(-352,-240),
  ABISELECT(-1648,-1192),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S5643C4D1Ev,_ZTv0_n36_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S5643C4D0Ev,_ZTv0_n36_N7S5643C4D0Ev),
  ABISELECT(-1488,-1084),
  ABISELECT(-2784,-2036),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n72_N7S5643C4D1Ev,_ZTvn844_n36_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n72_N7S5643C4D0Ev,_ZTvn844_n36_N7S5643C4D0Ev),
  ABISELECT(-1632,-1188),
  ABISELECT(1328,964),
  ABISELECT(-2880,-2116),
  ABISELECT(-2912,-2132),
  ABISELECT(-2880,-2116),
  ABISELECT(-1616,-1176),
  ABISELECT(-2928,-2140),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1280_n72_N7S5643C4D1Ev,_ZTvn948_n36_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1280_n72_N7S5643C4D0Ev,_ZTvn948_n36_N7S5643C4D0Ev),
  ABISELECT(-2896,-2120),
  ABISELECT(-2896,-2120),
  ABISELECT(-1648,-1192),
  ABISELECT(-2944,-2144),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1296_n72_N7S5643C4D1Ev,_ZTvn952_n36_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1296_n72_N7S5643C4D0Ev,_ZTvn952_n36_N7S5643C4D0Ev),
  ABISELECT(-4032,-2964),
  ABISELECT(-4032,-2964),
  ABISELECT(-4080,-2988),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2432_n72_N7S5643C4D1Ev,_ZTvn1796_n36_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2432_n72_N7S5643C4D0Ev,_ZTvn1796_n36_N7S5643C4D0Ev),
  ABISELECT(-4064,-2980),
  ABISELECT(-4112,-3004),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  ABISELECT(-4256,-3104),
  ABISELECT(-4208,-3080),
  ABISELECT(-4208,-3080),
  ABISELECT(-2960,-2152),
  ABISELECT(-4256,-3104),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5643C4D1Ev,_ZTv0_n24_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5643C4D0Ev,_ZTv0_n24_N7S5643C4D0Ev),
  ABISELECT(-5344,-3924),
  ABISELECT(-5344,-3924),
  ABISELECT(-5392,-3948),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N7S5643C4D1Ev,_ZTvn844_n24_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N7S5643C4D0Ev,_ZTvn844_n24_N7S5643C4D0Ev),
  ABISELECT(-5376,-3940),
  ABISELECT(-5424,-3964),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
};
extern VTBL_ENTRY _ZTV7S5643C4[];
extern void _ZN7S5643C5D1Ev();
extern void _ZN7S5643C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C5__7S5643C4[] = {
  ABISELECT(1456,1064),
  ABISELECT(16,8),
  ABISELECT(1312,964),
  ABISELECT(48,24),
  ABISELECT(1296,952),
  ABISELECT(160,108),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C5[0]),
  (VTBL_ENTRY)&_ZN7S5643C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5643C97S5643C5__7S5643C4[] = {
  ABISELECT(1312,964),
  ABISELECT(48,24),
  ABISELECT(1296,952),
  ABISELECT(160,108),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5643C8__7S5643C97S5643C5__7S5643C4[] = {
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI7S5643C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__7S5643C97S5643C5__7S5643C4[] = {
  ABISELECT(-1264,-940),
  ABISELECT(-1312,-964),
  (VTBL_ENTRY)&(_ZTI7S5643C9[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S5643C5D1Ev,_ZTv0_n20_N7S5643C5D1Ev)();
extern void ABISELECT(_ZThn16_N7S5643C5D1Ev,_ZThn8_N7S5643C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C5D0Ev,_ZTv0_n20_N7S5643C5D0Ev)();
extern void ABISELECT(_ZThn16_N7S5643C5D0Ev,_ZThn8_N7S5643C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5643C6__7S5643C5__7S5643C4[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5643C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C5D1Ev,_ZTv0_n20_N7S5643C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C5D0Ev,_ZTv0_n20_N7S5643C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5643C8__7S5643C5__7S5643C4[] = {
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI7S5643C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__7S5643C5__7S5643C4[] = {
  ABISELECT(-1264,-940),
  ABISELECT(-1312,-964),
  (VTBL_ENTRY)&(_ZTI7S5643C5[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S5643C5D1Ev,_ZTv0_n20_N7S5643C5D1Ev)();
extern void ABISELECT(_ZThn1456_N7S5643C5D1Ev,_ZThn1064_N7S5643C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C5D0Ev,_ZTv0_n20_N7S5643C5D0Ev)();
extern void ABISELECT(_ZThn1456_N7S5643C5D0Ev,_ZThn1064_N7S5643C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5643C11__7S5643C5__7S5643C4[] = {
  ABISELECT(-1456,-1064),
  ABISELECT(-1408,-1040),
  ABISELECT(-1408,-1040),
  ABISELECT(-1456,-1064),
  (VTBL_ENTRY)&(_ZTI7S5643C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C5D1Ev,_ZTv0_n20_N7S5643C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C5D0Ev,_ZTv0_n20_N7S5643C5D0Ev),
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C6__7S5643C4[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5643C8__7S5643C4[] = {
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__7S5643C4[] = {
  ABISELECT(-1264,-940),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C10[0]),
};
extern void _ZN8S5643C11D1Ev();
extern void _ZN8S5643C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C11__7S5643C4[] = {
  ABISELECT(-1408,-1040),
  ABISELECT(-1408,-1040),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C11[0]),
  (VTBL_ENTRY)&_ZN8S5643C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C11D0Ev,
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C11__A1__7S5643C4[] = {
  ABISELECT(-1408,-1040),
  ABISELECT(-1408,-1040),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
extern void _ZN8S5643C12D1Ev();
extern void _ZN8S5643C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C12__7S5643C4[] = {
  ABISELECT(-1488,-1080),
  ABISELECT(-192,-128),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C12[0]),
  (VTBL_ENTRY)&_ZN8S5643C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C12D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S5643C12D1Ev,_ZTv0_n16_N8S5643C12D1Ev)();
extern void ABISELECT(_ZThn16_N8S5643C12D1Ev,_ZThn8_N8S5643C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S5643C12D0Ev,_ZTv0_n16_N8S5643C12D0Ev)();
extern void ABISELECT(_ZThn16_N8S5643C12D0Ev,_ZThn8_N8S5643C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5643C13__8S5643C12__7S5643C4[] = {
  ABISELECT(-16,-8),
  ABISELECT(-208,-136),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S5643C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S5643C12D1Ev,_ZTv0_n16_N8S5643C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S5643C12D0Ev,_ZTv0_n16_N8S5643C12D0Ev),
};
extern void _ZN8S5643C13D1Ev();
extern void _ZN8S5643C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C13__7S5643C4[] = {
  ABISELECT(-208,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C13[0]),
  (VTBL_ENTRY)&_ZN8S5643C13D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C13D0Ev,
};
extern void _ZN8S5643C15D1Ev();
extern void _ZN8S5643C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C15__7S5643C4[] = {
  ABISELECT(2608,1912),
  ABISELECT(-1632,-1184),
  ABISELECT(-336,-228),
  ABISELECT(-1600,-1168),
  ABISELECT(-1600,-1168),
  ABISELECT(-352,-240),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&_ZN8S5643C15D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5643C88S5643C15__A1__7S5643C4[] = {
  ABISELECT(-1600,-1168),
  ABISELECT(-1600,-1168),
  ABISELECT(-352,-240),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
extern void _ZN8S5643C13D1Ev();
extern void _ZN8S5643C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C138S5643C15__A1__7S5643C4[] = {
  ABISELECT(-1488,-1084),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C13[0]),
  (VTBL_ENTRY)&_ZN8S5643C13D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C13D0Ev,
};
extern void _ZN8S5643C16D1Ev();
extern void _ZN8S5643C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C168S5643C15__7S5643C4[] = {
  ABISELECT(-1632,-1188),
  ABISELECT(1328,964),
  ABISELECT(-2880,-2116),
  ABISELECT(-2912,-2132),
  ABISELECT(-2880,-2116),
  ABISELECT(-1616,-1176),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&_ZN8S5643C16D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__8S5643C168S5643C15__7S5643C4[] = {
  ABISELECT(-1264,-940),
  ABISELECT(1616,1176),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S5643C16D1Ev,_ZTv0_n20_N8S5643C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S5643C16D0Ev,_ZTv0_n20_N8S5643C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C168S5643C15__7S5643C4[] = {
  ABISELECT(2912,2132),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(2912,2132),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S5643C16D1Ev,_ZTv0_n20_N8S5643C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S5643C16D0Ev,_ZTv0_n20_N8S5643C16D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S5643C16D1Ev,_ZTv0_n24_N8S5643C16D1Ev)();
extern void ABISELECT(_ZThn1328_N8S5643C16D1Ev,_ZThn964_N8S5643C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5643C16D0Ev,_ZTv0_n24_N8S5643C16D0Ev)();
extern void ABISELECT(_ZThn1328_N8S5643C16D0Ev,_ZThn964_N8S5643C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5643C17__8S5643C168S5643C15__7S5643C4[] = {
  ABISELECT(-1328,-964),
  ABISELECT(-4208,-3080),
  ABISELECT(-4208,-3080),
  ABISELECT(-2960,-2152),
  ABISELECT(-1328,-964),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5643C16D1Ev,_ZTv0_n24_N8S5643C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5643C16D0Ev,_ZTv0_n24_N8S5643C16D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N8S5643C16D1Ev,_ZTvn844_n24_N8S5643C16D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S5643C16D0Ev,_ZTvn844_n24_N8S5643C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C17__A1__8S5643C168S5643C15__7S5643C4[] = {
  ABISELECT(-5344,-3924),
  ABISELECT(-5344,-3924),
  ABISELECT(-2464,-1808),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S5643C16D1Ev,_ZTvn844_n24_N8S5643C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S5643C16D0Ev,_ZTvn844_n24_N8S5643C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C17__A1__8S5643C168S5643C15__7S5643C4[] = {
  ABISELECT(-5376,-3940),
  ABISELECT(-2496,-1824),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
};
extern void _ZN8S5643C17D1Ev();
extern void _ZN8S5643C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C178S5643C15__A1__7S5643C4[] = {
  ABISELECT(-2896,-2120),
  ABISELECT(-2896,-2120),
  ABISELECT(-1648,-1192),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&_ZN8S5643C17D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5643C88S5643C178S5643C15__A3__7S5643C4[] = {
  ABISELECT(-2896,-2120),
  ABISELECT(-2896,-2120),
  ABISELECT(-1648,-1192),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C178S5643C15__A3__7S5643C4[] = {
  ABISELECT(-4032,-2964),
  ABISELECT(-4032,-2964),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C178S5643C15__A2__7S5643C4[] = {
  ABISELECT(-4064,-2980),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C10[0]),
};
extern void ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev)();
extern void ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C178S5643C15__A1__7S5643C4[] = {
  ABISELECT(-4032,-2964),
  ABISELECT(-4032,-2964),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__8S5643C178S5643C15__A1__7S5643C4[] = {
  ABISELECT(-4064,-2980),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
};
extern void ABISELECT(_ZThn1136_N8S5643C15D1Ev,_ZThn844_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn1136_N8S5643C15D0Ev,_ZThn844_N8S5643C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S5643C13__8S5643C15__7S5643C4[] = {
  ABISELECT(-1488,-1084),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C15D1Ev,_ZThn844_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C15D0Ev,_ZThn844_N8S5643C15D0Ev),
};
extern void ABISELECT(_ZThn1280_N8S5643C15D1Ev,_ZThn948_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn1280_N8S5643C15D0Ev,_ZThn948_N8S5643C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S5643C16__8S5643C15__7S5643C4[] = {
  ABISELECT(-1632,-1188),
  ABISELECT(1328,964),
  ABISELECT(-2880,-2116),
  ABISELECT(-2912,-2132),
  ABISELECT(-2880,-2116),
  ABISELECT(-1616,-1176),
  ABISELECT(-1280,-948),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S5643C15D1Ev,_ZThn948_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S5643C15D0Ev,_ZThn948_N8S5643C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__8S5643C15__7S5643C4[] = {
  ABISELECT(-1264,-940),
  ABISELECT(336,228),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S5643C15D1Ev,_ZTv0_n20_N8S5643C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S5643C15D0Ev,_ZTv0_n20_N8S5643C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C15__7S5643C4[] = {
  ABISELECT(1632,1184),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(1632,1184),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S5643C15D1Ev,_ZTv0_n20_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S5643C15D0Ev,_ZTv0_n20_N8S5643C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S5643C15D1Ev,_ZTv0_n24_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn2608_N8S5643C15D1Ev,_ZThn1912_N8S5643C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5643C15D0Ev,_ZTv0_n24_N8S5643C15D0Ev)();
extern void ABISELECT(_ZThn2608_N8S5643C15D0Ev,_ZThn1912_N8S5643C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5643C17__8S5643C15__7S5643C4[] = {
  ABISELECT(-2608,-1912),
  ABISELECT(-4208,-3080),
  ABISELECT(-4208,-3080),
  ABISELECT(-2960,-2152),
  ABISELECT(-2608,-1912),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5643C15D1Ev,_ZTv0_n24_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5643C15D0Ev,_ZTv0_n24_N8S5643C15D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N8S5643C15D1Ev,_ZTvn844_n24_N8S5643C15D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S5643C15D0Ev,_ZTvn844_n24_N8S5643C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C17__A1__8S5643C15__7S5643C4[] = {
  ABISELECT(-5344,-3924),
  ABISELECT(-5344,-3924),
  ABISELECT(-3744,-2756),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S5643C15D1Ev,_ZTvn844_n24_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S5643C15D0Ev,_ZTvn844_n24_N8S5643C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C17__A1__8S5643C15__7S5643C4[] = {
  ABISELECT(-5376,-3940),
  ABISELECT(-3776,-2772),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
};
extern void ABISELECT(_ZThn1296_N8S5643C15D1Ev,_ZThn952_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn1296_N8S5643C15D0Ev,_ZThn952_N8S5643C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S5643C17__A__8S5643C15__7S5643C4[] = {
  ABISELECT(-2896,-2120),
  ABISELECT(-2896,-2120),
  ABISELECT(-1648,-1192),
  ABISELECT(-1296,-952),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S5643C15D1Ev,_ZThn952_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S5643C15D0Ev,_ZThn952_N8S5643C15D0Ev),
};
extern void ABISELECT(_ZThn2432_N8S5643C15D1Ev,_ZThn1796_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn2432_N8S5643C15D0Ev,_ZThn1796_N8S5643C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C17__A2__8S5643C15__7S5643C4[] = {
  ABISELECT(-4032,-2964),
  ABISELECT(-4032,-2964),
  ABISELECT(-2432,-1796),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2432_N8S5643C15D1Ev,_ZThn1796_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2432_N8S5643C15D0Ev,_ZThn1796_N8S5643C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C17__A2__8S5643C15__7S5643C4[] = {
  ABISELECT(-4064,-2980),
  ABISELECT(-2464,-1812),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
};
extern void _ZN8S5643C17D1Ev();
extern void _ZN8S5643C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C17__7S5643C4[] = {
  ABISELECT(-4208,-3080),
  ABISELECT(-4208,-3080),
  ABISELECT(-2960,-2152),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&_ZN8S5643C17D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5643C88S5643C17__A2__7S5643C4[] = {
  ABISELECT(-4208,-3080),
  ABISELECT(-4208,-3080),
  ABISELECT(-2960,-2152),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C17__A2__7S5643C4[] = {
  ABISELECT(-5344,-3924),
  ABISELECT(-5344,-3924),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C17__A1__7S5643C4[] = {
  ABISELECT(-5376,-3940),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C10[0]),
};
extern void ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev)();
extern void ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C17__7S5643C4[] = {
  ABISELECT(-5344,-3924),
  ABISELECT(-5344,-3924),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__8S5643C17__7S5643C4[] = {
  ABISELECT(-5376,-3940),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
};
static  VTT_ENTRY vtt_S5643C4[] = {
  {&(_ZTV7S5643C4[14]),  14,111},
  {&(_tg__ZTV7S5643C5__7S5643C4[9]),  9,11},
  {&(_tg__ZTV7S5643C97S5643C5__7S5643C4[7]),  7,7},
  {&(_tg__ZTV7S5643C8__7S5643C97S5643C5__7S5643C4[5]),  5,5},
  {&(_tg__ZTV8S5643C10__7S5643C97S5643C5__7S5643C4[3]),  3,3},
  {&(_tg__ZTV7S5643C6__7S5643C5__7S5643C4[5]),  5,7},
  {&(_tg__ZTV7S5643C8__7S5643C5__7S5643C4[5]),  5,5},
  {&(_tg__ZTV8S5643C10__7S5643C5__7S5643C4[3]),  3,3},
  {&(_tg__ZTV8S5643C11__7S5643C5__7S5643C4[5]),  5,7},
  {&(_ZTV7S5643C4[21]),  21,111},
  {&(_ZTV7S5643C4[28]),  28,111},
  {&(_ZTV7S5643C4[31]),  31,111},
  {&(_ZTV7S5643C4[36]),  36,111},
  {&(_ZTV7S5643C4[44]),  44,111},
  {&(_ZTV7S5643C4[50]),  50,111},
  {&(_ZTV7S5643C4[61]),  61,111},
  {&(_ZTV7S5643C4[66]),  66,111},
  {&(_ZTV7S5643C4[76]),  76,111},
  {&(_ZTV7S5643C4[100]),  100,111},
  {&(_ZTV7S5643C4[106]),  106,111},
  {&(_ZTV7S5643C4[111]),  111,111},
  {&(_ZTV7S5643C4[83]),  83,111},
  {&(_ZTV7S5643C4[89]),  89,111},
  {&(_ZTV7S5643C4[94]),  94,111},
  {&(_tg__ZTV7S5643C6__7S5643C4[4]),  4,6},
  {&(_tg__ZTV7S5643C8__7S5643C4[5]),  5,5},
  {&(_tg__ZTV8S5643C10__7S5643C4[3]),  3,3},
  {&(_tg__ZTV8S5643C11__7S5643C4[4]),  4,6},
  {&(_tg__ZTV7S5643C68S5643C11__A1__7S5643C4[4]),  4,6},
  {&(_tg__ZTV8S5643C12__7S5643C4[5]),  5,7},
  {&(_tg__ZTV8S5643C13__8S5643C12__7S5643C4[4]),  4,6},
  {&(_tg__ZTV8S5643C13__7S5643C4[3]),  3,5},
  {&(_tg__ZTV8S5643C15__7S5643C4[8]),  8,10},
  {&(_tg__ZTV7S5643C88S5643C15__A1__7S5643C4[5]),  5,5},
  {&(_tg__ZTV8S5643C138S5643C15__A1__7S5643C4[3]),  3,5},
  {&(_tg__ZTV8S5643C168S5643C15__7S5643C4[8]),  8,10},
  {&(_tg__ZTV8S5643C10__8S5643C168S5643C15__7S5643C4[3]),  3,3},
  {&(_tg__ZTV7S5643C6__8S5643C168S5643C15__7S5643C4[5]),  5,7},
  {&(_tg__ZTV8S5643C17__8S5643C168S5643C15__7S5643C4[6]),  6,8},
  {&(_tg__ZTV7S5643C68S5643C17__A1__8S5643C168S5643C15__7S5643C4[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C17__A1__8S5643C168S5643C15__7S5643C4[3]),  3,3},
  {&(_tg__ZTV8S5643C178S5643C15__A1__7S5643C4[5]),  5,7},
  {&(_tg__ZTV7S5643C88S5643C178S5643C15__A3__7S5643C4[5]),  5,5},
  {&(_tg__ZTV7S5643C68S5643C178S5643C15__A3__7S5643C4[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C178S5643C15__A2__7S5643C4[3]),  3,3},
  {&(_tg__ZTV7S5643C6__8S5643C178S5643C15__A1__7S5643C4[4]),  4,6},
  {&(_tg__ZTV8S5643C10__8S5643C178S5643C15__A1__7S5643C4[3]),  3,3},
  {&(_tg__ZTV8S5643C13__8S5643C15__7S5643C4[3]),  3,5},
  {&(_tg__ZTV8S5643C16__8S5643C15__7S5643C4[8]),  8,10},
  {&(_tg__ZTV8S5643C10__8S5643C15__7S5643C4[3]),  3,3},
  {&(_tg__ZTV7S5643C6__8S5643C15__7S5643C4[5]),  5,7},
  {&(_tg__ZTV8S5643C17__8S5643C15__7S5643C4[6]),  6,8},
  {&(_tg__ZTV7S5643C68S5643C17__A1__8S5643C15__7S5643C4[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C17__A1__8S5643C15__7S5643C4[3]),  3,3},
  {&(_tg__ZTV8S5643C17__A__8S5643C15__7S5643C4[5]),  5,7},
  {&(_tg__ZTV7S5643C68S5643C17__A2__8S5643C15__7S5643C4[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C17__A2__8S5643C15__7S5643C4[3]),  3,3},
  {&(_tg__ZTV8S5643C17__7S5643C4[5]),  5,7},
  {&(_tg__ZTV7S5643C88S5643C17__A2__7S5643C4[5]),  5,5},
  {&(_tg__ZTV7S5643C68S5643C17__A2__7S5643C4[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C17__A1__7S5643C4[3]),  3,3},
  {&(_tg__ZTV7S5643C6__8S5643C17__7S5643C4[4]),  4,6},
  {&(_tg__ZTV8S5643C10__8S5643C17__7S5643C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5643C4[];
extern  VTBL_ENTRY _ZTV7S5643C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C4[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5643C15D0Ev,_ZTv0_n24_N8S5643C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S5643C15D0Ev,_ZThn1912_N8S5643C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5643C15D1Ev,_ZTv0_n24_N8S5643C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S5643C15D1Ev,_ZThn1912_N8S5643C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5643C16D0Ev,_ZTv0_n24_N8S5643C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1328_N8S5643C16D0Ev,_ZThn964_N8S5643C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5643C16D1Ev,_ZTv0_n24_N8S5643C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1328_N8S5643C16D1Ev,_ZThn964_N8S5643C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S5643C12D0Ev,_ZTv0_n16_N8S5643C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S5643C12D0Ev,_ZThn8_N8S5643C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S5643C12D1Ev,_ZTv0_n16_N8S5643C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S5643C12D1Ev,_ZThn8_N8S5643C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5643C5D0Ev,_ZTv0_n20_N7S5643C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N7S5643C5D0Ev,_ZThn1064_N7S5643C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5643C5D0Ev,_ZThn8_N7S5643C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5643C5D1Ev,_ZTv0_n20_N7S5643C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N7S5643C5D1Ev,_ZThn1064_N7S5643C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5643C5D1Ev,_ZThn8_N7S5643C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S5643C4D0Ev,_ZTv0_n36_N7S5643C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1648_N7S5643C4D0Ev,_ZThn1192_N7S5643C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S5643C4D1Ev,_ZTv0_n36_N7S5643C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1648_N7S5643C4D1Ev,_ZThn1192_N7S5643C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5643C4D0Ev,_ZTv0_n16_N7S5643C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1504_N7S5643C4D0Ev,_ZThn1088_N7S5643C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5643C4D1Ev,_ZTv0_n16_N7S5643C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1504_N7S5643C4D1Ev,_ZThn1088_N7S5643C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5643C4D0Ev,_ZTv0_n24_N7S5643C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4256_N7S5643C4D0Ev,_ZThn3104_N7S5643C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N7S5643C4D0Ev,_ZThn1080_N7S5643C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5643C4D1Ev,_ZTv0_n24_N7S5643C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4256_N7S5643C4D1Ev,_ZThn3104_N7S5643C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N7S5643C4D1Ev,_ZThn1080_N7S5643C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5643C4D0Ev,_ZTv0_n20_N7S5643C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N7S5643C4D0Ev,_ZThn1064_N7S5643C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5643C4D0Ev,_ZThn8_N7S5643C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5643C4D1Ev,_ZTv0_n20_N7S5643C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N7S5643C4D1Ev,_ZThn1064_N7S5643C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5643C4D1Ev,_ZThn8_N7S5643C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5643C4 = {  "S5643C4", // class name
  bases_S5643C4, 39,
  &(vtc_S5643C4[0]), // expected_vtbl_contents
  &(vtt_S5643C4[0]), // expected_vtt_contents
  ABISELECT(5568,4064), // object size
  NSPAIRA(_ZTI7S5643C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5643C4),111, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5643C4),63, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5643C1  : S5643C2 , virtual S5643C4 {
  void *s5643c1f0;
  int s5643c1f1;
  virtual  ~S5643C1(); // _ZN7S5643C1D2Ev
  S5643C1(); // tgen
};
//SIG(1 S5643C1) C1{ BC2{ m FC3{ m FD}[7]} VBC4{ BC5{ VBC6{ BC3 VBC7{ m} VBC2 vd} VBC8{ VBC3 VBC2 VBC7 FC2[10]} BC9{ VBC2 VBC8 VBC10{ BC3 BC2 VBC7} BC7 FC7} VBC11{ BC6 vd} vd} VBC12{ VBC13{ VBC3 BC2 vd Fi[4]} VBC14{ m} Fi} VBC15{ BC8 BC13 BC16{ VBC10 VBC6 BC14 VBC17{ VBC7 BC8 BC6 BC10} vd} BC17 vd} vd} vd Fp Fi}


 S5643C1 ::~S5643C1(){ note_dtor("S5643C1", this);}
S5643C1 ::S5643C1(){ note_ctor("S5643C1", this);} // tgen

static void Test_S5643C1()
{
  extern Class_Descriptor cd_S5643C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(358,1041)];
    init_test(&cd_S5643C1, buf);
    S5643C1 *dp, &lv = *(dp=new (buf) S5643C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5712,4160), "sizeof(S5643C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5643C1)");
    /*is_ambiguous_... S5643C1::S5643C2 */ AMB_check_base_class_offset(lv, (S5643C2*), ABISELECT(16,4), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*), ABISELECT(176,108), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C6 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*), 0, "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C8 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C8*), 0, "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C10 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C10*), 0, "S5643C1");
    check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*)(S5643C11*), 0, "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C8 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C8*)(S5643C15*), 0, "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C17*), 0, "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C8*)(S5643C17*), 0, "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*)(S5643C17*), 0, "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C10*)(S5643C17*), 0, "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C17*)(S5643C15*), 0, "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C8*)(S5643C17*)(S5643C15*), 0, "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C6*)(S5643C17*)(S5643C15*), 0, "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C10*)(S5643C17*)(S5643C15*), 0, "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C6*), ABISELECT(192,120), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C8 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C8*), ABISELECT(192,120), "S5643C1");
    /*is_ambiguous_... S5643C9::S5643C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C9*)(S5643C5*)(S5643C4*), ABISELECT(192,120), "S5643C1");
    check_base_class_offset(lv, (S5643C2*)(S5643C6*)(S5643C11*), ABISELECT(192,120), "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C8 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C8*)(S5643C15*), ABISELECT(192,120), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C8*)(S5643C17*), ABISELECT(192,120), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C6*)(S5643C17*), ABISELECT(192,120), "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C8*)(S5643C17*)(S5643C15*), ABISELECT(192,120), "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C6*)(S5643C17*)(S5643C15*), ABISELECT(192,120), "S5643C1");
    /*is_ambiguous_... S5643C5::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C6*)(S5643C5*)(S5643C4*), ABISELECT(160,104), "S5643C1");
    /*is_ambiguous_... S5643C16::S5643C6 */ AMB_check_base_class_offset(lv, (S5643C6*)(S5643C16*)(S5643C15*), ABISELECT(160,104), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C8 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C8*), ABISELECT(1440,1048), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C13 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C13*), ABISELECT(1440,1048), "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C8 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C8*)(S5643C15*), ABISELECT(1440,1048), "S5643C1");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C13*)(S5643C15*), ABISELECT(1440,1048), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C8*)(S5643C17*), ABISELECT(1440,1048), "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C8*)(S5643C17*)(S5643C15*), ABISELECT(1440,1048), "S5643C1");
    check_base_class_offset(lv, (S5643C8*)(S5643C5*)(S5643C4*), ABISELECT(304,204), "S5643C1");
    check_base_class_offset(lv, (S5643C8*)(S5643C9*)(S5643C5*)(S5643C4*), ABISELECT(304,204), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C10 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C10*), ABISELECT(1472,1064), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C10 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C10*), ABISELECT(1488,1076), "S5643C1");
    check_base_class_offset(lv, (S5643C10*)(S5643C9*)(S5643C5*)(S5643C4*), ABISELECT(1456,1060), "S5643C1");
    /*is_ambiguous_... S5643C16::S5643C10 */ AMB_check_base_class_offset(lv, (S5643C10*)(S5643C16*)(S5643C15*), ABISELECT(1456,1060), "S5643C1");
    /*is_ambiguous_... S5643C9::S5408C7_nt */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S5643C9*)(S5643C5*)(S5643C4*), ABISELECT(144,96), "S5643C1");
    check_base_class_offset(lv, (S5643C9*)(S5643C5*)(S5643C4*), ABISELECT(144,96), "S5643C1");
    check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*)(S5643C11*), ABISELECT(1616,1164), "S5643C1");
    check_base_class_offset(lv, (S5643C6*)(S5643C11*), ABISELECT(1600,1160), "S5643C1");
    check_base_class_offset(lv, (S5643C11*)(S5643C5*)(S5643C4*), ABISELECT(1600,1160), "S5643C1");
    check_base_class_offset(lv, (S5643C5*)(S5643C4*), ABISELECT(144,96), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C13 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C13*), ABISELECT(1664,1188), "S5643C1");
    check_base_class_offset(lv, (S5643C13*)(S5643C12*), ABISELECT(1648,1184), "S5643C1");
    check_base_class_offset(lv, (S239C12_nt*)(S5643C12*), 0, "S5643C1");
    check_base_class_offset(lv, (S5643C12*)(S5643C4*), ABISELECT(1632,1176), "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C8 */ AMB_check_base_class_offset(lv, (S5643C8*)(S5643C15*), ABISELECT(1792,1288), "S5643C1");
    check_base_class_offset(lv, (S5643C2*)(S5643C13*)(S5643C15*), ABISELECT(2944,2136), "S5643C1");
    check_base_class_offset(lv, (S5643C13*)(S5643C15*), ABISELECT(2928,2132), "S5643C1");
    check_base_class_offset(lv, (S239C12_nt*)(S5643C16*)(S5643C15*), ABISELECT(3072,2236), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C8*)(S5643C17*), ABISELECT(4400,3200), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*)(S5643C17*), ABISELECT(5552,4048), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C6*)(S5643C17*), ABISELECT(5536,4044), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C10*)(S5643C17*), ABISELECT(5584,4064), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C10*)(S5643C17*), ABISELECT(5600,4076), "S5643C1");
    /*is_ambiguous_... S5643C1::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C10*)(S5643C17*), ABISELECT(5568,4060), "S5643C1");
    check_base_class_offset(lv, (S5643C17*)(S5643C16*)(S5643C15*), ABISELECT(4400,3200), "S5643C1");
    check_base_class_offset(lv, (S5643C16*)(S5643C15*), ABISELECT(3072,2236), "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C8*)(S5643C17*)(S5643C15*), ABISELECT(3088,2240), "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C6*)(S5643C17*)(S5643C15*), ABISELECT(4240,3088), "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C6*)(S5643C17*)(S5643C15*), ABISELECT(4224,3084), "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S5643C10*)(S5643C17*)(S5643C15*), ABISELECT(4272,3104), "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C2*)(S5643C10*)(S5643C17*)(S5643C15*), ABISELECT(4288,3116), "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C10*)(S5643C17*)(S5643C15*), ABISELECT(4256,3100), "S5643C1");
    /*is_ambiguous_... S5643C15::S5643C17 */ AMB_check_base_class_offset(lv, (S5643C17*)(S5643C15*), ABISELECT(3088,2240), "S5643C1");
    check_base_class_offset(lv, (S5643C15*)(S5643C4*), ABISELECT(1792,1288), "S5643C1");
    check_base_class_offset(lv, (S5643C4*), ABISELECT(144,96), "S5643C1");
    check_field_offset(lv, s5643c1f0, ABISELECT(128,88), "S5643C1.s5643c1f0");
    check_field_offset(lv, s5643c1f1, ABISELECT(136,92), "S5643C1.s5643c1f1");
    test_class_info(&lv, &cd_S5643C1);
    dp->~S5643C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5643C1(Test_S5643C1, "S5643C1", ABISELECT(5712,4160));

#else // __cplusplus

extern void _ZN7S5643C1C1Ev();
extern void _ZN7S5643C1D2Ev();
Name_Map name_map_S5643C1[] = {
  NSPAIR(_ZN7S5643C1C1Ev),
  NSPAIR(_ZN7S5643C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C8;
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C10;
extern VTBL_ENTRY _ZTI8S5643C10[];
extern  VTBL_ENTRY _ZTV8S5643C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C10[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C9;
extern VTBL_ENTRY _ZTI7S5643C9[];
extern  VTBL_ENTRY _ZTV7S5643C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C9[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S5643C11;
extern VTBL_ENTRY _ZTI8S5643C11[];
extern  VTBL_ENTRY _ZTV8S5643C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C11[];
extern Class_Descriptor cd_S5643C5;
extern VTBL_ENTRY _ZTI7S5643C5[];
extern  VTBL_ENTRY _ZTV7S5643C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C5[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C13;
extern VTBL_ENTRY _ZTI8S5643C13[];
extern  VTBL_ENTRY _ZTV8S5643C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C13[];
extern Class_Descriptor cd_S239C12_nt;
extern VTBL_ENTRY _ZTI10S239C12_nt[];
extern Class_Descriptor cd_S5643C12;
extern VTBL_ENTRY _ZTI8S5643C12[];
extern  VTBL_ENTRY _ZTV8S5643C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C12[];
extern Class_Descriptor cd_S5643C8;
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C13;
extern VTBL_ENTRY _ZTI8S5643C13[];
extern  VTBL_ENTRY _ZTV8S5643C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C13[];
extern Class_Descriptor cd_S239C12_nt;
extern VTBL_ENTRY _ZTI10S239C12_nt[];
extern Class_Descriptor cd_S5643C8;
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C10;
extern VTBL_ENTRY _ZTI8S5643C10[];
extern  VTBL_ENTRY _ZTV8S5643C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C10[];
extern Class_Descriptor cd_S5643C17;
extern VTBL_ENTRY _ZTI8S5643C17[];
extern  VTBL_ENTRY _ZTV8S5643C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C17[];
extern Class_Descriptor cd_S5643C16;
extern VTBL_ENTRY _ZTI8S5643C16[];
extern  VTBL_ENTRY _ZTV8S5643C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C16[];
extern Class_Descriptor cd_S5643C8;
extern VTBL_ENTRY _ZTI7S5643C8[];
extern  VTBL_ENTRY _ZTV7S5643C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C6;
extern VTBL_ENTRY _ZTI7S5643C6[];
extern  VTBL_ENTRY _ZTV7S5643C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C10;
extern VTBL_ENTRY _ZTI8S5643C10[];
extern  VTBL_ENTRY _ZTV8S5643C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C10[];
extern Class_Descriptor cd_S5643C17;
extern VTBL_ENTRY _ZTI8S5643C17[];
extern  VTBL_ENTRY _ZTV8S5643C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C17[];
extern Class_Descriptor cd_S5643C15;
extern VTBL_ENTRY _ZTI8S5643C15[];
extern  VTBL_ENTRY _ZTV8S5643C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5643C15[];
extern Class_Descriptor cd_S5643C4;
extern VTBL_ENTRY _ZTI7S5643C4[];
extern  VTBL_ENTRY _ZTV7S5643C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C4[];
static Base_Class bases_S5643C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C2,    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_S5643C3_nt,    ABISELECT(176,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
    4, //immediately_derived
  0, 0},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(192,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
    4, //immediately_derived
  0, 1},
  {&cd_S5643C6,    ABISELECT(160,104), //bcp->offset
    34, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S5643C3_nt,    ABISELECT(1440,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C8,    ABISELECT(304,204), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S5643C3_nt,    ABISELECT(1472,1064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1488,1076), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C10,    ABISELECT(1456,1060), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S5408C7_nt,    ABISELECT(144,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
    11, //immediately_derived
  0, 0},
  {&cd_S5643C9,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1616,1164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C6,    ABISELECT(1600,1160), //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
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5643C11,    ABISELECT(1600,1160), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S5643C5,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(1664,1188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C13,    ABISELECT(1648,1184), //bcp->offset
    64, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S239C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5643C12,    ABISELECT(1632,1176), //bcp->offset
    56, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S5643C8,    ABISELECT(1792,1288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(2944,2136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C13,    ABISELECT(2928,2132), //bcp->offset
    81, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S239C12_nt,    ABISELECT(3072,2236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C8,    ABISELECT(4400,3200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(5552,4048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C6,    ABISELECT(5536,4044), //bcp->offset
    120, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(5584,4064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(5600,4076), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C10,    ABISELECT(5568,4060), //bcp->offset
    126, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S5643C17,    ABISELECT(4400,3200), //bcp->offset
    112, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S5643C16,    ABISELECT(3072,2236), //bcp->offset
    86, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S5643C8,    ABISELECT(3088,2240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(4240,3088), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C6,    ABISELECT(4224,3084), //bcp->offset
    103, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(4272,3104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(4288,3116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S5643C10,    ABISELECT(4256,3100), //bcp->offset
    109, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S5643C17,    ABISELECT(3088,2240), //bcp->offset
    96, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S5643C15,    ABISELECT(1792,1288), //bcp->offset
    70, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S5643C4,    ABISELECT(144,96), //bcp->offset
    17, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5643C1[];
extern void _ZN7S5643C1D1Ev();
extern void _ZN7S5643C1D0Ev();
extern void ABISELECT(_ZTv0_n120_N7S5643C1D1Ev,_ZTv0_n60_N7S5643C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S5643C1D1Ev,_ZThn96_N7S5643C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S5643C1D0Ev,_ZTv0_n60_N7S5643C1D0Ev)();
extern void ABISELECT(_ZThn144_N7S5643C1D0Ev,_ZThn96_N7S5643C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C1D1Ev,_ZTv0_n20_N7S5643C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S5643C1D1Ev,_ZThn104_N7S5643C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C1D0Ev,_ZTv0_n20_N7S5643C1D0Ev)();
extern void ABISELECT(_ZThn160_N7S5643C1D0Ev,_ZThn104_N7S5643C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C1D1Ev,_ZTv0_n20_N7S5643C1D1Ev)();
extern void ABISELECT(_ZThn1600_N7S5643C1D1Ev,_ZThn1160_N7S5643C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C1D0Ev,_ZTv0_n20_N7S5643C1D0Ev)();
extern void ABISELECT(_ZThn1600_N7S5643C1D0Ev,_ZThn1160_N7S5643C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5643C1D1Ev,_ZTv0_n24_N7S5643C1D1Ev)();
extern void ABISELECT(_ZThn1632_N7S5643C1D1Ev,_ZThn1176_N7S5643C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5643C1D0Ev,_ZTv0_n24_N7S5643C1D0Ev)();
extern void ABISELECT(_ZThn1632_N7S5643C1D0Ev,_ZThn1176_N7S5643C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5643C1D1Ev,_ZTv0_n16_N7S5643C1D1Ev)();
extern void ABISELECT(_ZThn1648_N7S5643C1D1Ev,_ZThn1184_N7S5643C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5643C1D0Ev,_ZTv0_n16_N7S5643C1D0Ev)();
extern void ABISELECT(_ZThn1648_N7S5643C1D0Ev,_ZThn1184_N7S5643C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S5643C1D1Ev,_ZTv0_n36_N7S5643C1D1Ev)();
extern void ABISELECT(_ZThn1792_N7S5643C1D1Ev,_ZThn1288_N7S5643C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S5643C1D0Ev,_ZTv0_n36_N7S5643C1D0Ev)();
extern void ABISELECT(_ZThn1792_N7S5643C1D0Ev,_ZThn1288_N7S5643C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n72_N7S5643C1D1Ev,_ZTvn844_n36_N7S5643C1D1Ev)();
extern void ABISELECT(_ZTvn1136_n72_N7S5643C1D0Ev,_ZTvn844_n36_N7S5643C1D0Ev)();
extern void ABISELECT(_ZTvn1280_n72_N7S5643C1D1Ev,_ZTvn948_n36_N7S5643C1D1Ev)();
extern void ABISELECT(_ZTvn1280_n72_N7S5643C1D0Ev,_ZTvn948_n36_N7S5643C1D0Ev)();
extern void ABISELECT(_ZTvn1296_n72_N7S5643C1D1Ev,_ZTvn952_n36_N7S5643C1D1Ev)();
extern void ABISELECT(_ZTvn1296_n72_N7S5643C1D0Ev,_ZTvn952_n36_N7S5643C1D0Ev)();
extern void ABISELECT(_ZTvn2432_n72_N7S5643C1D1Ev,_ZTvn1796_n36_N7S5643C1D1Ev)();
extern void ABISELECT(_ZTvn2432_n72_N7S5643C1D0Ev,_ZTvn1796_n36_N7S5643C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S5643C1D1Ev,_ZTv0_n24_N7S5643C1D1Ev)();
extern void ABISELECT(_ZThn4400_N7S5643C1D1Ev,_ZThn3200_N7S5643C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5643C1D0Ev,_ZTv0_n24_N7S5643C1D0Ev)();
extern void ABISELECT(_ZThn4400_N7S5643C1D0Ev,_ZThn3200_N7S5643C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n48_N7S5643C1D1Ev,_ZTvn844_n24_N7S5643C1D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N7S5643C1D0Ev,_ZTvn844_n24_N7S5643C1D0Ev)();
static  VTBL_ENTRY vtc_S5643C1[] = {
  ABISELECT(4400,3200),
  ABISELECT(1792,1288),
  0,
  ABISELECT(1648,1184),
  ABISELECT(1632,1176),
  ABISELECT(1600,1160),
  ABISELECT(1456,1060),
  ABISELECT(1440,1048),
  ABISELECT(304,204),
  ABISELECT(192,120),
  0,
  ABISELECT(160,104),
  ABISELECT(144,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  (VTBL_ENTRY)&_ZN7S5643C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C1D0Ev,
  ABISELECT(-144,-96),
  ABISELECT(4256,3104),
  ABISELECT(1648,1192),
  ABISELECT(-144,-96),
  ABISELECT(1504,1088),
  ABISELECT(1488,1080),
  ABISELECT(1456,1064),
  ABISELECT(16,8),
  ABISELECT(1312,964),
  ABISELECT(-144,-96),
  ABISELECT(1296,952),
  ABISELECT(160,108),
  ABISELECT(48,24),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S5643C1D1Ev,_ZTv0_n60_N7S5643C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S5643C1D0Ev,_ZTv0_n60_N7S5643C1D0Ev),
  ABISELECT(-160,-104),
  ABISELECT(32,16),
  ABISELECT(-160,-104),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C1D1Ev,_ZTv0_n20_N7S5643C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C1D0Ev,_ZTv0_n20_N7S5643C1D0Ev),
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  ABISELECT(-1456,-1060),
  ABISELECT(-1456,-1060),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  ABISELECT(-1600,-1160),
  ABISELECT(-1408,-1040),
  ABISELECT(-1600,-1160),
  ABISELECT(-1600,-1160),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C1D1Ev,_ZTv0_n20_N7S5643C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C1D0Ev,_ZTv0_n20_N7S5643C1D0Ev),
  ABISELECT(-1632,-1176),
  ABISELECT(-1632,-1176),
  ABISELECT(-192,-128),
  ABISELECT(16,8),
  ABISELECT(-1632,-1176),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5643C1D1Ev,_ZTv0_n24_N7S5643C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5643C1D0Ev,_ZTv0_n24_N7S5643C1D0Ev),
  ABISELECT(-1648,-1184),
  ABISELECT(-208,-136),
  ABISELECT(-1648,-1184),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5643C1D1Ev,_ZTv0_n16_N7S5643C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5643C1D0Ev,_ZTv0_n16_N7S5643C1D0Ev),
  ABISELECT(-1792,-1288),
  ABISELECT(2608,1912),
  ABISELECT(-1632,-1184),
  ABISELECT(-336,-228),
  ABISELECT(-1792,-1288),
  ABISELECT(-1600,-1168),
  ABISELECT(-352,-240),
  ABISELECT(-1792,-1288),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S5643C1D1Ev,_ZTv0_n36_N7S5643C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S5643C1D0Ev,_ZTv0_n36_N7S5643C1D0Ev),
  ABISELECT(-1488,-1084),
  ABISELECT(-2928,-2132),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n72_N7S5643C1D1Ev,_ZTvn844_n36_N7S5643C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n72_N7S5643C1D0Ev,_ZTvn844_n36_N7S5643C1D0Ev),
  ABISELECT(-1632,-1188),
  ABISELECT(1328,964),
  ABISELECT(-2880,-2116),
  ABISELECT(-2912,-2132),
  ABISELECT(-3072,-2236),
  ABISELECT(-1616,-1176),
  ABISELECT(-3072,-2236),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1280_n72_N7S5643C1D1Ev,_ZTvn948_n36_N7S5643C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1280_n72_N7S5643C1D0Ev,_ZTvn948_n36_N7S5643C1D0Ev),
  ABISELECT(-3088,-2240),
  ABISELECT(-2896,-2120),
  ABISELECT(-1648,-1192),
  ABISELECT(-3088,-2240),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1296_n72_N7S5643C1D1Ev,_ZTvn952_n36_N7S5643C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1296_n72_N7S5643C1D0Ev,_ZTvn952_n36_N7S5643C1D0Ev),
  ABISELECT(-4032,-2964),
  ABISELECT(-4224,-3084),
  ABISELECT(-4224,-3084),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2432_n72_N7S5643C1D1Ev,_ZTvn1796_n36_N7S5643C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2432_n72_N7S5643C1D0Ev,_ZTvn1796_n36_N7S5643C1D0Ev),
  ABISELECT(-4256,-3100),
  ABISELECT(-4256,-3100),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  ABISELECT(-4400,-3200),
  ABISELECT(-4400,-3200),
  ABISELECT(-4208,-3080),
  ABISELECT(-2960,-2152),
  ABISELECT(-4400,-3200),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5643C1D1Ev,_ZTv0_n24_N7S5643C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5643C1D0Ev,_ZTv0_n24_N7S5643C1D0Ev),
  ABISELECT(-5344,-3924),
  ABISELECT(-5536,-4044),
  ABISELECT(-5536,-4044),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N7S5643C1D1Ev,_ZTvn844_n24_N7S5643C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N7S5643C1D0Ev,_ZTvn844_n24_N7S5643C1D0Ev),
  ABISELECT(-5568,-4060),
  ABISELECT(-5568,-4060),
  (VTBL_ENTRY)&(_ZTI7S5643C1[0]),
};
extern VTBL_ENTRY _ZTV7S5643C1[];
extern void _ZN7S5643C4D1Ev();
extern void _ZN7S5643C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C4__7S5643C1[] = {
  ABISELECT(4256,3104),
  ABISELECT(1648,1192),
  ABISELECT(-144,-96),
  ABISELECT(1504,1088),
  ABISELECT(1488,1080),
  ABISELECT(1456,1064),
  ABISELECT(16,8),
  ABISELECT(1312,964),
  ABISELECT(-144,-96),
  ABISELECT(1296,952),
  ABISELECT(160,108),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&_ZN7S5643C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C4D0Ev,
};
extern void _ZN7S5643C5D1Ev();
extern void _ZN7S5643C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C57S5643C4__7S5643C1[] = {
  ABISELECT(1456,1064),
  ABISELECT(16,8),
  ABISELECT(1312,964),
  ABISELECT(-144,-96),
  ABISELECT(1296,952),
  ABISELECT(160,108),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C5[0]),
  (VTBL_ENTRY)&_ZN7S5643C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5643C97S5643C57S5643C4__7S5643C1[] = {
  ABISELECT(1312,964),
  ABISELECT(-144,-96),
  ABISELECT(1296,952),
  ABISELECT(160,108),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5643C8__7S5643C97S5643C57S5643C4__7S5643C1[] = {
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI7S5643C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__7S5643C97S5643C57S5643C4__7S5643C1[] = {
  ABISELECT(-1456,-1060),
  ABISELECT(-1312,-964),
  (VTBL_ENTRY)&(_ZTI7S5643C9[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S5643C5D1Ev,_ZTv0_n20_N7S5643C5D1Ev)();
extern void ABISELECT(_ZThn16_N7S5643C5D1Ev,_ZThn8_N7S5643C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C5D0Ev,_ZTv0_n20_N7S5643C5D0Ev)();
extern void ABISELECT(_ZThn16_N7S5643C5D0Ev,_ZThn8_N7S5643C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5643C6__7S5643C57S5643C4__7S5643C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(-160,-104),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5643C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C5D1Ev,_ZTv0_n20_N7S5643C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C5D0Ev,_ZTv0_n20_N7S5643C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5643C8__7S5643C57S5643C4__7S5643C1[] = {
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI7S5643C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__7S5643C57S5643C4__7S5643C1[] = {
  ABISELECT(-1456,-1060),
  ABISELECT(-1312,-964),
  (VTBL_ENTRY)&(_ZTI7S5643C5[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S5643C5D1Ev,_ZTv0_n20_N7S5643C5D1Ev)();
extern void ABISELECT(_ZThn1456_N7S5643C5D1Ev,_ZThn1064_N7S5643C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C5D0Ev,_ZTv0_n20_N7S5643C5D0Ev)();
extern void ABISELECT(_ZThn1456_N7S5643C5D0Ev,_ZThn1064_N7S5643C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5643C11__7S5643C57S5643C4__7S5643C1[] = {
  ABISELECT(-1456,-1064),
  ABISELECT(-1408,-1040),
  ABISELECT(-1600,-1160),
  ABISELECT(-1456,-1064),
  (VTBL_ENTRY)&(_ZTI7S5643C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C5D1Ev,_ZTv0_n20_N7S5643C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C5D0Ev,_ZTv0_n20_N7S5643C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S5643C4D1Ev,_ZTv0_n20_N7S5643C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S5643C4D1Ev,_ZThn8_N7S5643C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C4D0Ev,_ZTv0_n20_N7S5643C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S5643C4D0Ev,_ZThn8_N7S5643C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5643C6__7S5643C4__7S5643C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(-160,-104),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C4D1Ev,_ZTv0_n20_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C4D0Ev,_ZTv0_n20_N7S5643C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5643C8__7S5643C4__7S5643C1[] = {
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__7S5643C4__7S5643C1[] = {
  ABISELECT(-1456,-1060),
  ABISELECT(-1312,-964),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S5643C4D1Ev,_ZTv0_n20_N7S5643C4D1Ev)();
extern void ABISELECT(_ZThn1456_N7S5643C4D1Ev,_ZThn1064_N7S5643C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5643C4D0Ev,_ZTv0_n20_N7S5643C4D0Ev)();
extern void ABISELECT(_ZThn1456_N7S5643C4D0Ev,_ZThn1064_N7S5643C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5643C11__7S5643C4__7S5643C1[] = {
  ABISELECT(-1456,-1064),
  ABISELECT(-1408,-1040),
  ABISELECT(-1600,-1160),
  ABISELECT(-1456,-1064),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C4D1Ev,_ZTv0_n20_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5643C4D0Ev,_ZTv0_n20_N7S5643C4D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S5643C4D1Ev,_ZTv0_n24_N7S5643C4D1Ev)();
extern void ABISELECT(_ZThn1488_N7S5643C4D1Ev,_ZThn1080_N7S5643C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5643C4D0Ev,_ZTv0_n24_N7S5643C4D0Ev)();
extern void ABISELECT(_ZThn1488_N7S5643C4D0Ev,_ZThn1080_N7S5643C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5643C12__7S5643C4__7S5643C1[] = {
  ABISELECT(-1488,-1080),
  ABISELECT(-1632,-1176),
  ABISELECT(-192,-128),
  ABISELECT(16,8),
  ABISELECT(-1488,-1080),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5643C4D1Ev,_ZTv0_n24_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5643C4D0Ev,_ZTv0_n24_N7S5643C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S5643C4D1Ev,_ZTv0_n16_N7S5643C4D1Ev)();
extern void ABISELECT(_ZThn1504_N7S5643C4D1Ev,_ZThn1088_N7S5643C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5643C4D0Ev,_ZTv0_n16_N7S5643C4D0Ev)();
extern void ABISELECT(_ZThn1504_N7S5643C4D0Ev,_ZThn1088_N7S5643C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5643C13__7S5643C4__7S5643C1[] = {
  ABISELECT(-1504,-1088),
  ABISELECT(-208,-136),
  ABISELECT(-1504,-1088),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5643C4D1Ev,_ZTv0_n16_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5643C4D0Ev,_ZTv0_n16_N7S5643C4D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N7S5643C4D1Ev,_ZTv0_n36_N7S5643C4D1Ev)();
extern void ABISELECT(_ZThn1648_N7S5643C4D1Ev,_ZThn1192_N7S5643C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S5643C4D0Ev,_ZTv0_n36_N7S5643C4D0Ev)();
extern void ABISELECT(_ZThn1648_N7S5643C4D0Ev,_ZThn1192_N7S5643C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5643C15__7S5643C4__7S5643C1[] = {
  ABISELECT(-1648,-1192),
  ABISELECT(2608,1912),
  ABISELECT(-1632,-1184),
  ABISELECT(-336,-228),
  ABISELECT(-1792,-1288),
  ABISELECT(-1600,-1168),
  ABISELECT(-352,-240),
  ABISELECT(-1648,-1192),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S5643C4D1Ev,_ZTv0_n36_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S5643C4D0Ev,_ZTv0_n36_N7S5643C4D0Ev),
};
extern void ABISELECT(_ZTvn1136_n72_N7S5643C4D1Ev,_ZTvn844_n36_N7S5643C4D1Ev)();
extern void ABISELECT(_ZTvn1136_n72_N7S5643C4D0Ev,_ZTvn844_n36_N7S5643C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S5643C138S5643C15__A1__7S5643C4__7S5643C1[] = {
  ABISELECT(-1488,-1084),
  ABISELECT(-2784,-2036),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n72_N7S5643C4D1Ev,_ZTvn844_n36_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n72_N7S5643C4D0Ev,_ZTvn844_n36_N7S5643C4D0Ev),
};
extern void ABISELECT(_ZTvn1280_n72_N7S5643C4D1Ev,_ZTvn948_n36_N7S5643C4D1Ev)();
extern void ABISELECT(_ZTvn1280_n72_N7S5643C4D0Ev,_ZTvn948_n36_N7S5643C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S5643C168S5643C15__7S5643C4__7S5643C1[] = {
  ABISELECT(-1632,-1188),
  ABISELECT(1328,964),
  ABISELECT(-2880,-2116),
  ABISELECT(-2912,-2132),
  ABISELECT(-3072,-2236),
  ABISELECT(-1616,-1176),
  ABISELECT(-2928,-2140),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1280_n72_N7S5643C4D1Ev,_ZTvn948_n36_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1280_n72_N7S5643C4D0Ev,_ZTvn948_n36_N7S5643C4D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S5643C4D1Ev,_ZTv0_n24_N7S5643C4D1Ev)();
extern void ABISELECT(_ZThn4256_N7S5643C4D1Ev,_ZThn3104_N7S5643C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5643C4D0Ev,_ZTv0_n24_N7S5643C4D0Ev)();
extern void ABISELECT(_ZThn4256_N7S5643C4D0Ev,_ZThn3104_N7S5643C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5643C17__7S5643C4__7S5643C1[] = {
  ABISELECT(-4256,-3104),
  ABISELECT(-4400,-3200),
  ABISELECT(-4208,-3080),
  ABISELECT(-2960,-2152),
  ABISELECT(-4256,-3104),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5643C4D1Ev,_ZTv0_n24_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5643C4D0Ev,_ZTv0_n24_N7S5643C4D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N7S5643C4D1Ev,_ZTvn844_n24_N7S5643C4D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N7S5643C4D0Ev,_ZTvn844_n24_N7S5643C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C17__A2__7S5643C4__7S5643C1[] = {
  ABISELECT(-5344,-3924),
  ABISELECT(-5536,-4044),
  ABISELECT(-5392,-3948),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N7S5643C4D1Ev,_ZTvn844_n24_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N7S5643C4D0Ev,_ZTvn844_n24_N7S5643C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C17__A1__7S5643C4__7S5643C1[] = {
  ABISELECT(-5568,-4060),
  ABISELECT(-5424,-3964),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
};
extern void ABISELECT(_ZTvn1296_n72_N7S5643C4D1Ev,_ZTvn952_n36_N7S5643C4D1Ev)();
extern void ABISELECT(_ZTvn1296_n72_N7S5643C4D0Ev,_ZTvn952_n36_N7S5643C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S5643C178S5643C15__A1__7S5643C4__7S5643C1[] = {
  ABISELECT(-3088,-2240),
  ABISELECT(-2896,-2120),
  ABISELECT(-1648,-1192),
  ABISELECT(-2944,-2144),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1296_n72_N7S5643C4D1Ev,_ZTvn952_n36_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1296_n72_N7S5643C4D0Ev,_ZTvn952_n36_N7S5643C4D0Ev),
};
extern void ABISELECT(_ZTvn2432_n72_N7S5643C4D1Ev,_ZTvn1796_n36_N7S5643C4D1Ev)();
extern void ABISELECT(_ZTvn2432_n72_N7S5643C4D0Ev,_ZTvn1796_n36_N7S5643C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C178S5643C15__A3__7S5643C4__7S5643C1[] = {
  ABISELECT(-4032,-2964),
  ABISELECT(-4224,-3084),
  ABISELECT(-4080,-2988),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2432_n72_N7S5643C4D1Ev,_ZTvn1796_n36_N7S5643C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2432_n72_N7S5643C4D0Ev,_ZTvn1796_n36_N7S5643C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C178S5643C15__A2__7S5643C4__7S5643C1[] = {
  ABISELECT(-4256,-3100),
  ABISELECT(-4112,-3004),
  (VTBL_ENTRY)&(_ZTI7S5643C4[0]),
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C6__7S5643C1[] = {
  ABISELECT(32,16),
  ABISELECT(-160,-104),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5643C8__7S5643C1[] = {
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__7S5643C1[] = {
  ABISELECT(-1456,-1060),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C10[0]),
};
extern void _ZN8S5643C11D1Ev();
extern void _ZN8S5643C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C11__7S5643C1[] = {
  ABISELECT(-1408,-1040),
  ABISELECT(-1600,-1160),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C11[0]),
  (VTBL_ENTRY)&_ZN8S5643C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C11D0Ev,
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C11__A1__7S5643C1[] = {
  ABISELECT(-1408,-1040),
  ABISELECT(-1600,-1160),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
extern void _ZN8S5643C12D1Ev();
extern void _ZN8S5643C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C12__7S5643C1[] = {
  ABISELECT(-1632,-1176),
  ABISELECT(-192,-128),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C12[0]),
  (VTBL_ENTRY)&_ZN8S5643C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C12D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S5643C12D1Ev,_ZTv0_n16_N8S5643C12D1Ev)();
extern void ABISELECT(_ZThn16_N8S5643C12D1Ev,_ZThn8_N8S5643C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S5643C12D0Ev,_ZTv0_n16_N8S5643C12D0Ev)();
extern void ABISELECT(_ZThn16_N8S5643C12D0Ev,_ZThn8_N8S5643C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5643C13__8S5643C12__7S5643C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-208,-136),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S5643C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S5643C12D1Ev,_ZTv0_n16_N8S5643C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S5643C12D0Ev,_ZTv0_n16_N8S5643C12D0Ev),
};
extern void _ZN8S5643C13D1Ev();
extern void _ZN8S5643C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C13__7S5643C1[] = {
  ABISELECT(-208,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C13[0]),
  (VTBL_ENTRY)&_ZN8S5643C13D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C13D0Ev,
};
extern void _ZN8S5643C15D1Ev();
extern void _ZN8S5643C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C15__7S5643C1[] = {
  ABISELECT(2608,1912),
  ABISELECT(-1632,-1184),
  ABISELECT(-336,-228),
  ABISELECT(-1792,-1288),
  ABISELECT(-1600,-1168),
  ABISELECT(-352,-240),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&_ZN8S5643C15D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5643C88S5643C15__A1__7S5643C1[] = {
  ABISELECT(-1792,-1288),
  ABISELECT(-1600,-1168),
  ABISELECT(-352,-240),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
extern void _ZN8S5643C13D1Ev();
extern void _ZN8S5643C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C138S5643C15__A1__7S5643C1[] = {
  ABISELECT(-1488,-1084),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C13[0]),
  (VTBL_ENTRY)&_ZN8S5643C13D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C13D0Ev,
};
extern void _ZN8S5643C16D1Ev();
extern void _ZN8S5643C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C168S5643C15__7S5643C1[] = {
  ABISELECT(-1632,-1188),
  ABISELECT(1328,964),
  ABISELECT(-2880,-2116),
  ABISELECT(-2912,-2132),
  ABISELECT(-3072,-2236),
  ABISELECT(-1616,-1176),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&_ZN8S5643C16D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__8S5643C168S5643C15__7S5643C1[] = {
  ABISELECT(-1456,-1060),
  ABISELECT(1616,1176),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S5643C16D1Ev,_ZTv0_n20_N8S5643C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S5643C16D0Ev,_ZTv0_n20_N8S5643C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C168S5643C15__7S5643C1[] = {
  ABISELECT(2912,2132),
  ABISELECT(32,16),
  ABISELECT(-160,-104),
  ABISELECT(2912,2132),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S5643C16D1Ev,_ZTv0_n20_N8S5643C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S5643C16D0Ev,_ZTv0_n20_N8S5643C16D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S5643C16D1Ev,_ZTv0_n24_N8S5643C16D1Ev)();
extern void ABISELECT(_ZThn1328_N8S5643C16D1Ev,_ZThn964_N8S5643C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5643C16D0Ev,_ZTv0_n24_N8S5643C16D0Ev)();
extern void ABISELECT(_ZThn1328_N8S5643C16D0Ev,_ZThn964_N8S5643C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5643C17__8S5643C168S5643C15__7S5643C1[] = {
  ABISELECT(-1328,-964),
  ABISELECT(-4400,-3200),
  ABISELECT(-4208,-3080),
  ABISELECT(-2960,-2152),
  ABISELECT(-1328,-964),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5643C16D1Ev,_ZTv0_n24_N8S5643C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5643C16D0Ev,_ZTv0_n24_N8S5643C16D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N8S5643C16D1Ev,_ZTvn844_n24_N8S5643C16D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S5643C16D0Ev,_ZTvn844_n24_N8S5643C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C17__A1__8S5643C168S5643C15__7S5643C1[] = {
  ABISELECT(-5344,-3924),
  ABISELECT(-5536,-4044),
  ABISELECT(-2464,-1808),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S5643C16D1Ev,_ZTvn844_n24_N8S5643C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S5643C16D0Ev,_ZTvn844_n24_N8S5643C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C17__A1__8S5643C168S5643C15__7S5643C1[] = {
  ABISELECT(-5568,-4060),
  ABISELECT(-2496,-1824),
  (VTBL_ENTRY)&(_ZTI8S5643C16[0]),
};
extern void _ZN8S5643C17D1Ev();
extern void _ZN8S5643C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C178S5643C15__A1__7S5643C1[] = {
  ABISELECT(-3088,-2240),
  ABISELECT(-2896,-2120),
  ABISELECT(-1648,-1192),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&_ZN8S5643C17D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5643C88S5643C178S5643C15__A3__7S5643C1[] = {
  ABISELECT(-3088,-2240),
  ABISELECT(-2896,-2120),
  ABISELECT(-1648,-1192),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C178S5643C15__A3__7S5643C1[] = {
  ABISELECT(-4032,-2964),
  ABISELECT(-4224,-3084),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C178S5643C15__A2__7S5643C1[] = {
  ABISELECT(-4256,-3100),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C10[0]),
};
extern void ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev)();
extern void ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C178S5643C15__A1__7S5643C1[] = {
  ABISELECT(-4032,-2964),
  ABISELECT(-4224,-3084),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__8S5643C178S5643C15__A1__7S5643C1[] = {
  ABISELECT(-4256,-3100),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
};
extern void ABISELECT(_ZThn1136_N8S5643C15D1Ev,_ZThn844_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn1136_N8S5643C15D0Ev,_ZThn844_N8S5643C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S5643C13__8S5643C15__7S5643C1[] = {
  ABISELECT(-1488,-1084),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C15D1Ev,_ZThn844_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C15D0Ev,_ZThn844_N8S5643C15D0Ev),
};
extern void ABISELECT(_ZThn1280_N8S5643C15D1Ev,_ZThn948_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn1280_N8S5643C15D0Ev,_ZThn948_N8S5643C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S5643C16__8S5643C15__7S5643C1[] = {
  ABISELECT(-1632,-1188),
  ABISELECT(1328,964),
  ABISELECT(-2880,-2116),
  ABISELECT(-2912,-2132),
  ABISELECT(-3072,-2236),
  ABISELECT(-1616,-1176),
  ABISELECT(-1280,-948),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S5643C15D1Ev,_ZThn948_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S5643C15D0Ev,_ZThn948_N8S5643C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__8S5643C15__7S5643C1[] = {
  ABISELECT(-1456,-1060),
  ABISELECT(336,228),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S5643C15D1Ev,_ZTv0_n20_N8S5643C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S5643C15D0Ev,_ZTv0_n20_N8S5643C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C15__7S5643C1[] = {
  ABISELECT(1632,1184),
  ABISELECT(32,16),
  ABISELECT(-160,-104),
  ABISELECT(1632,1184),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S5643C15D1Ev,_ZTv0_n20_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S5643C15D0Ev,_ZTv0_n20_N8S5643C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S5643C15D1Ev,_ZTv0_n24_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn2608_N8S5643C15D1Ev,_ZThn1912_N8S5643C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5643C15D0Ev,_ZTv0_n24_N8S5643C15D0Ev)();
extern void ABISELECT(_ZThn2608_N8S5643C15D0Ev,_ZThn1912_N8S5643C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5643C17__8S5643C15__7S5643C1[] = {
  ABISELECT(-2608,-1912),
  ABISELECT(-4400,-3200),
  ABISELECT(-4208,-3080),
  ABISELECT(-2960,-2152),
  ABISELECT(-2608,-1912),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5643C15D1Ev,_ZTv0_n24_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5643C15D0Ev,_ZTv0_n24_N8S5643C15D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N8S5643C15D1Ev,_ZTvn844_n24_N8S5643C15D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S5643C15D0Ev,_ZTvn844_n24_N8S5643C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C17__A1__8S5643C15__7S5643C1[] = {
  ABISELECT(-5344,-3924),
  ABISELECT(-5536,-4044),
  ABISELECT(-3744,-2756),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S5643C15D1Ev,_ZTvn844_n24_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S5643C15D0Ev,_ZTvn844_n24_N8S5643C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C17__A1__8S5643C15__7S5643C1[] = {
  ABISELECT(-5568,-4060),
  ABISELECT(-3776,-2772),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
};
extern void ABISELECT(_ZThn1296_N8S5643C15D1Ev,_ZThn952_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn1296_N8S5643C15D0Ev,_ZThn952_N8S5643C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S5643C17__A__8S5643C15__7S5643C1[] = {
  ABISELECT(-3088,-2240),
  ABISELECT(-2896,-2120),
  ABISELECT(-1648,-1192),
  ABISELECT(-1296,-952),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S5643C15D1Ev,_ZThn952_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S5643C15D0Ev,_ZThn952_N8S5643C15D0Ev),
};
extern void ABISELECT(_ZThn2432_N8S5643C15D1Ev,_ZThn1796_N8S5643C15D1Ev)();
extern void ABISELECT(_ZThn2432_N8S5643C15D0Ev,_ZThn1796_N8S5643C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C17__A2__8S5643C15__7S5643C1[] = {
  ABISELECT(-4032,-2964),
  ABISELECT(-4224,-3084),
  ABISELECT(-2432,-1796),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2432_N8S5643C15D1Ev,_ZThn1796_N8S5643C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2432_N8S5643C15D0Ev,_ZThn1796_N8S5643C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C17__A2__8S5643C15__7S5643C1[] = {
  ABISELECT(-4256,-3100),
  ABISELECT(-2464,-1812),
  (VTBL_ENTRY)&(_ZTI8S5643C15[0]),
};
extern void _ZN8S5643C17D1Ev();
extern void _ZN8S5643C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5643C17__7S5643C1[] = {
  ABISELECT(-4400,-3200),
  ABISELECT(-4208,-3080),
  ABISELECT(-2960,-2152),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&_ZN8S5643C17D1Ev,
  (VTBL_ENTRY)&_ZN8S5643C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5643C88S5643C17__A2__7S5643C1[] = {
  ABISELECT(-4400,-3200),
  ABISELECT(-4208,-3080),
  ABISELECT(-2960,-2152),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C8[0]),
};
extern void _ZN7S5643C6D1Ev();
extern void _ZN7S5643C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5643C68S5643C17__A2__7S5643C1[] = {
  ABISELECT(-5344,-3924),
  ABISELECT(-5536,-4044),
  0,
  (VTBL_ENTRY)&(_ZTI7S5643C6[0]),
  (VTBL_ENTRY)&_ZN7S5643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5643C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S5643C108S5643C17__A1__7S5643C1[] = {
  ABISELECT(-5568,-4060),
  0,
  (VTBL_ENTRY)&(_ZTI8S5643C10[0]),
};
extern void ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev)();
extern void ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5643C6__8S5643C17__7S5643C1[] = {
  ABISELECT(-5344,-3924),
  ABISELECT(-5536,-4044),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D1Ev,_ZThn844_N8S5643C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S5643C17D0Ev,_ZThn844_N8S5643C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S5643C10__8S5643C17__7S5643C1[] = {
  ABISELECT(-5568,-4060),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S5643C17[0]),
};
static  VTT_ENTRY vtt_S5643C1[] = {
  {&(_ZTV7S5643C1[15]),  15,129},
  {&(_ZTV7S5643C1[32]),  32,129},
  {&(_ZTV7S5643C1[39]),  39,129},
  {&(_ZTV7S5643C1[46]),  46,129},
  {&(_ZTV7S5643C1[49]),  49,129},
  {&(_ZTV7S5643C1[54]),  54,129},
  {&(_ZTV7S5643C1[62]),  62,129},
  {&(_ZTV7S5643C1[68]),  68,129},
  {&(_ZTV7S5643C1[79]),  79,129},
  {&(_ZTV7S5643C1[84]),  84,129},
  {&(_ZTV7S5643C1[94]),  94,129},
  {&(_ZTV7S5643C1[118]),  118,129},
  {&(_ZTV7S5643C1[124]),  124,129},
  {&(_ZTV7S5643C1[129]),  129,129},
  {&(_ZTV7S5643C1[101]),  101,129},
  {&(_ZTV7S5643C1[107]),  107,129},
  {&(_ZTV7S5643C1[112]),  112,129},
  {&(_tg__ZTV7S5643C4__7S5643C1[14]),  14,16},
  {&(_tg__ZTV7S5643C57S5643C4__7S5643C1[9]),  9,11},
  {&(_tg__ZTV7S5643C97S5643C57S5643C4__7S5643C1[7]),  7,7},
  {&(_tg__ZTV7S5643C8__7S5643C97S5643C57S5643C4__7S5643C1[5]),  5,5},
  {&(_tg__ZTV8S5643C10__7S5643C97S5643C57S5643C4__7S5643C1[3]),  3,3},
  {&(_tg__ZTV7S5643C6__7S5643C57S5643C4__7S5643C1[5]),  5,7},
  {&(_tg__ZTV7S5643C8__7S5643C57S5643C4__7S5643C1[5]),  5,5},
  {&(_tg__ZTV8S5643C10__7S5643C57S5643C4__7S5643C1[3]),  3,3},
  {&(_tg__ZTV8S5643C11__7S5643C57S5643C4__7S5643C1[5]),  5,7},
  {&(_tg__ZTV7S5643C6__7S5643C4__7S5643C1[5]),  5,7},
  {&(_tg__ZTV7S5643C8__7S5643C4__7S5643C1[5]),  5,5},
  {&(_tg__ZTV8S5643C10__7S5643C4__7S5643C1[3]),  3,3},
  {&(_tg__ZTV8S5643C11__7S5643C4__7S5643C1[5]),  5,7},
  {&(_tg__ZTV8S5643C12__7S5643C4__7S5643C1[6]),  6,8},
  {&(_tg__ZTV8S5643C13__7S5643C4__7S5643C1[4]),  4,6},
  {&(_tg__ZTV8S5643C15__7S5643C4__7S5643C1[9]),  9,11},
  {&(_tg__ZTV8S5643C138S5643C15__A1__7S5643C4__7S5643C1[3]),  3,5},
  {&(_tg__ZTV8S5643C168S5643C15__7S5643C4__7S5643C1[8]),  8,10},
  {&(_tg__ZTV8S5643C17__7S5643C4__7S5643C1[6]),  6,8},
  {&(_tg__ZTV7S5643C68S5643C17__A2__7S5643C4__7S5643C1[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C17__A1__7S5643C4__7S5643C1[3]),  3,3},
  {&(_tg__ZTV8S5643C178S5643C15__A1__7S5643C4__7S5643C1[5]),  5,7},
  {&(_tg__ZTV7S5643C68S5643C178S5643C15__A3__7S5643C4__7S5643C1[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C178S5643C15__A2__7S5643C4__7S5643C1[3]),  3,3},
  {&(_tg__ZTV7S5643C6__7S5643C1[4]),  4,6},
  {&(_tg__ZTV7S5643C8__7S5643C1[5]),  5,5},
  {&(_tg__ZTV8S5643C10__7S5643C1[3]),  3,3},
  {&(_tg__ZTV8S5643C11__7S5643C1[4]),  4,6},
  {&(_tg__ZTV7S5643C68S5643C11__A1__7S5643C1[4]),  4,6},
  {&(_tg__ZTV8S5643C12__7S5643C1[5]),  5,7},
  {&(_tg__ZTV8S5643C13__8S5643C12__7S5643C1[4]),  4,6},
  {&(_tg__ZTV8S5643C13__7S5643C1[3]),  3,5},
  {&(_tg__ZTV8S5643C15__7S5643C1[8]),  8,10},
  {&(_tg__ZTV7S5643C88S5643C15__A1__7S5643C1[5]),  5,5},
  {&(_tg__ZTV8S5643C138S5643C15__A1__7S5643C1[3]),  3,5},
  {&(_tg__ZTV8S5643C168S5643C15__7S5643C1[8]),  8,10},
  {&(_tg__ZTV8S5643C10__8S5643C168S5643C15__7S5643C1[3]),  3,3},
  {&(_tg__ZTV7S5643C6__8S5643C168S5643C15__7S5643C1[5]),  5,7},
  {&(_tg__ZTV8S5643C17__8S5643C168S5643C15__7S5643C1[6]),  6,8},
  {&(_tg__ZTV7S5643C68S5643C17__A1__8S5643C168S5643C15__7S5643C1[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C17__A1__8S5643C168S5643C15__7S5643C1[3]),  3,3},
  {&(_tg__ZTV8S5643C178S5643C15__A1__7S5643C1[5]),  5,7},
  {&(_tg__ZTV7S5643C88S5643C178S5643C15__A3__7S5643C1[5]),  5,5},
  {&(_tg__ZTV7S5643C68S5643C178S5643C15__A3__7S5643C1[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C178S5643C15__A2__7S5643C1[3]),  3,3},
  {&(_tg__ZTV7S5643C6__8S5643C178S5643C15__A1__7S5643C1[4]),  4,6},
  {&(_tg__ZTV8S5643C10__8S5643C178S5643C15__A1__7S5643C1[3]),  3,3},
  {&(_tg__ZTV8S5643C13__8S5643C15__7S5643C1[3]),  3,5},
  {&(_tg__ZTV8S5643C16__8S5643C15__7S5643C1[8]),  8,10},
  {&(_tg__ZTV8S5643C10__8S5643C15__7S5643C1[3]),  3,3},
  {&(_tg__ZTV7S5643C6__8S5643C15__7S5643C1[5]),  5,7},
  {&(_tg__ZTV8S5643C17__8S5643C15__7S5643C1[6]),  6,8},
  {&(_tg__ZTV7S5643C68S5643C17__A1__8S5643C15__7S5643C1[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C17__A1__8S5643C15__7S5643C1[3]),  3,3},
  {&(_tg__ZTV8S5643C17__A__8S5643C15__7S5643C1[5]),  5,7},
  {&(_tg__ZTV7S5643C68S5643C17__A2__8S5643C15__7S5643C1[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C17__A2__8S5643C15__7S5643C1[3]),  3,3},
  {&(_tg__ZTV8S5643C17__7S5643C1[5]),  5,7},
  {&(_tg__ZTV7S5643C88S5643C17__A2__7S5643C1[5]),  5,5},
  {&(_tg__ZTV7S5643C68S5643C17__A2__7S5643C1[4]),  4,6},
  {&(_tg__ZTV8S5643C108S5643C17__A1__7S5643C1[3]),  3,3},
  {&(_tg__ZTV7S5643C6__8S5643C17__7S5643C1[4]),  4,6},
  {&(_tg__ZTV8S5643C10__8S5643C17__7S5643C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5643C1[];
extern  VTBL_ENTRY _ZTV7S5643C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5643C1[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5643C15D0Ev,_ZTv0_n24_N8S5643C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S5643C15D0Ev,_ZThn1912_N8S5643C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5643C15D1Ev,_ZTv0_n24_N8S5643C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S5643C15D1Ev,_ZThn1912_N8S5643C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5643C16D0Ev,_ZTv0_n24_N8S5643C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1328_N8S5643C16D0Ev,_ZThn964_N8S5643C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5643C16D1Ev,_ZTv0_n24_N8S5643C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1328_N8S5643C16D1Ev,_ZThn964_N8S5643C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S5643C12D0Ev,_ZTv0_n16_N8S5643C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S5643C12D0Ev,_ZThn8_N8S5643C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S5643C12D1Ev,_ZTv0_n16_N8S5643C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S5643C12D1Ev,_ZThn8_N8S5643C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S5643C4D0Ev,_ZTv0_n36_N7S5643C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1648_N7S5643C4D0Ev,_ZThn1192_N7S5643C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S5643C4D1Ev,_ZTv0_n36_N7S5643C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1648_N7S5643C4D1Ev,_ZThn1192_N7S5643C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5643C4D0Ev,_ZTv0_n16_N7S5643C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1504_N7S5643C4D0Ev,_ZThn1088_N7S5643C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5643C4D1Ev,_ZTv0_n16_N7S5643C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1504_N7S5643C4D1Ev,_ZThn1088_N7S5643C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5643C4D0Ev,_ZTv0_n24_N7S5643C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4256_N7S5643C4D0Ev,_ZThn3104_N7S5643C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N7S5643C4D0Ev,_ZThn1080_N7S5643C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5643C4D1Ev,_ZTv0_n24_N7S5643C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4256_N7S5643C4D1Ev,_ZThn3104_N7S5643C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N7S5643C4D1Ev,_ZThn1080_N7S5643C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5643C4D0Ev,_ZTv0_n20_N7S5643C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N7S5643C4D0Ev,_ZThn1064_N7S5643C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5643C4D0Ev,_ZThn8_N7S5643C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5643C4D1Ev,_ZTv0_n20_N7S5643C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N7S5643C4D1Ev,_ZThn1064_N7S5643C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5643C4D1Ev,_ZThn8_N7S5643C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5643C5D0Ev,_ZTv0_n20_N7S5643C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N7S5643C5D0Ev,_ZThn1064_N7S5643C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5643C5D0Ev,_ZThn8_N7S5643C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5643C5D1Ev,_ZTv0_n20_N7S5643C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N7S5643C5D1Ev,_ZThn1064_N7S5643C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5643C5D1Ev,_ZThn8_N7S5643C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S5643C1D0Ev,_ZTv0_n36_N7S5643C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1792_N7S5643C1D0Ev,_ZThn1288_N7S5643C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S5643C1D1Ev,_ZTv0_n36_N7S5643C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1792_N7S5643C1D1Ev,_ZThn1288_N7S5643C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5643C1D0Ev,_ZTv0_n16_N7S5643C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1648_N7S5643C1D0Ev,_ZThn1184_N7S5643C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5643C1D1Ev,_ZTv0_n16_N7S5643C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1648_N7S5643C1D1Ev,_ZThn1184_N7S5643C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5643C1D0Ev,_ZTv0_n24_N7S5643C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N7S5643C1D0Ev,_ZThn3200_N7S5643C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N7S5643C1D0Ev,_ZThn1176_N7S5643C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5643C1D1Ev,_ZTv0_n24_N7S5643C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N7S5643C1D1Ev,_ZThn3200_N7S5643C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N7S5643C1D1Ev,_ZThn1176_N7S5643C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5643C1D0Ev,_ZTv0_n20_N7S5643C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1600_N7S5643C1D0Ev,_ZThn1160_N7S5643C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S5643C1D0Ev,_ZThn104_N7S5643C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5643C1D1Ev,_ZTv0_n20_N7S5643C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1600_N7S5643C1D1Ev,_ZThn1160_N7S5643C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S5643C1D1Ev,_ZThn104_N7S5643C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S5643C1D0Ev,_ZTv0_n60_N7S5643C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S5643C1D0Ev,_ZThn96_N7S5643C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S5643C1D1Ev,_ZTv0_n60_N7S5643C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S5643C1D1Ev,_ZThn96_N7S5643C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5643C1 = {  "S5643C1", // class name
  bases_S5643C1, 41,
  &(vtc_S5643C1[0]), // expected_vtbl_contents
  &(vtt_S5643C1[0]), // expected_vtt_contents
  ABISELECT(5712,4160), // object size
  NSPAIRA(_ZTI7S5643C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5643C1),129, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5643C1),80, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1098C3_nt  : S3221C8_nt {
};
//SIG(-1 S1098C3_nt) C1{ BC2{ m Fi}}



//skip512 S1098C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S1098C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1098C3_nt[];
VTBL_ENTRY *P__ZTI10S1098C3_nt = _ZTI10S1098C3_nt; 
Class_Descriptor cd_S1098C3_nt = {  "S1098C3_nt", // class name
  bases_S1098C3_nt, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI10S1098C3_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  S1098C5_nt  {
  void *s1098c5f0;
  void  mf1098c5(); // _ZN10S1098C5_nt8mf1098c5Ev
};
//SIG(-1 S1098C5_nt) C1{ m Fp}


void  S1098C5_nt ::mf1098c5(){}

//skip512 S1098C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1098C9_nt  {
  void *s1098c9f0;
  int s1098c9f1;
  void  mf1098c9(); // _ZN10S1098C9_nt8mf1098c9Ev
};
//SIG(-1 S1098C9_nt) C1{ m Fp Fi}


void  S1098C9_nt ::mf1098c9(){}

//skip512 S1098C9_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S1098C8_nt  : S1098C9_nt {
};
//SIG(-1 S1098C8_nt) C1{ BC2{ m Fp Fi}}



//skip512 S1098C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S1098C9_nt;
static Base_Class bases_S1098C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1098C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S1098C7_nt  {
  int s1098c7f0;
  ::S1098C8_nt s1098c7f1;
  void  mf1098c7(); // _ZN10S1098C7_nt8mf1098c7Ev
};
//SIG(-1 S1098C7_nt) C1{ m Fi FC2{ BC3{ m Fp Fi}}}


void  S1098C7_nt ::mf1098c7(){}

//skip512 S1098C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1098C12_nt  {
  int s1098c12f0[2];
  void  mf1098c12(); // _ZN11S1098C12_nt9mf1098c12Ev
};
//SIG(-1 S1098C12_nt) C1{ m Fi[2]}


void  S1098C12_nt ::mf1098c12(){}

//skip512 S1098C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1098C10_nt  {
  ::S3221C4_nt s1098c10f0;
  ::S1098C12_nt s1098c10f1;
  void  mf1098c10(); // _ZN11S1098C10_nt9mf1098c10Ev
};
//SIG(-1 S1098C10_nt) C1{ m FC2{ m Fi[2]} FC3{ m Fi[2]}}


void  S1098C10_nt ::mf1098c10(){}

//skip512 S1098C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1098C2  : S1098C3_nt {
  ::S1098C5_nt s1098c2f0;
  ::S1098C5_nt s1098c2f1;
  ::S1098C5_nt s1098c2f2;
  ::S1098C7_nt s1098c2f3;
  char s1098c2f4;
  ::S1098C10_nt s1098c2f5;
  ::S1098C10_nt s1098c2f6;
  void *s1098c2f7;
  ::S1098C10_nt s1098c2f8;
  ::S1098C10_nt s1098c2f9;
  char s1098c2f10[5];
  virtual  ~S1098C2(); // _ZN7S1098C2D1Ev
  virtual void  v5(); // _ZN7S1098C22v5Ev
  virtual void  v6(); // _ZN7S1098C22v6Ev
  virtual void  v7(); // _ZN7S1098C22v7Ev
  virtual void  v8(); // _ZN7S1098C22v8Ev
  virtual void  v9(); // _ZN7S1098C22v9Ev
  virtual void  v10(); // _ZN7S1098C23v10Ev
  virtual void  v11(); // _ZN7S1098C23v11Ev
  S1098C2(); // tgen
};
//SIG(-1 S1098C2) C1{ BC2{ BC3{ m Fi}} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp} FC4 FC4 FC5{ m Fi FC6{ BC7{ m Fp Fi}}} Fc FC8{ m FC9{ m Fi[2]} FC10{ m Fi[2]}} FC8 Fp FC8 FC8 Fc[5]}


 S1098C2 ::~S1098C2(){ note_dtor("S1098C2", this);}
void  S1098C2 ::v5(){vfunc_called(this, "_ZN7S1098C22v5Ev");}
void  S1098C2 ::v6(){vfunc_called(this, "_ZN7S1098C22v6Ev");}
void  S1098C2 ::v7(){vfunc_called(this, "_ZN7S1098C22v7Ev");}
void  S1098C2 ::v8(){vfunc_called(this, "_ZN7S1098C22v8Ev");}
void  S1098C2 ::v9(){vfunc_called(this, "_ZN7S1098C22v9Ev");}
void  S1098C2 ::v10(){vfunc_called(this, "_ZN7S1098C23v10Ev");}
void  S1098C2 ::v11(){vfunc_called(this, "_ZN7S1098C23v11Ev");}
S1098C2 ::S1098C2(){ note_ctor("S1098C2", this);} // tgen

static void Test_S1098C2()
{
  extern Class_Descriptor cd_S1098C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S1098C2, buf);
    S1098C2 *dp, &lv = *(dp=new (buf) S1098C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S1098C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1098C2)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1098C3_nt*), ABISELECT(8,4), "S1098C2");
    check_base_class_offset(lv, (S1098C3_nt*), ABISELECT(8,4), "S1098C2");
    check_field_offset(lv, s1098c2f0, ABISELECT(16,8), "S1098C2.s1098c2f0");
    check_field_offset(lv, s1098c2f1, ABISELECT(24,12), "S1098C2.s1098c2f1");
    check_field_offset(lv, s1098c2f2, ABISELECT(32,16), "S1098C2.s1098c2f2");
    check_field_offset(lv, s1098c2f3, ABISELECT(40,20), "S1098C2.s1098c2f3");
    check_field_offset(lv, s1098c2f4, ABISELECT(64,32), "S1098C2.s1098c2f4");
    check_field_offset(lv, s1098c2f5, ABISELECT(68,36), "S1098C2.s1098c2f5");
    check_field_offset(lv, s1098c2f6, ABISELECT(84,52), "S1098C2.s1098c2f6");
    check_field_offset(lv, s1098c2f7, ABISELECT(104,68), "S1098C2.s1098c2f7");
    check_field_offset(lv, s1098c2f8, ABISELECT(112,72), "S1098C2.s1098c2f8");
    check_field_offset(lv, s1098c2f9, ABISELECT(128,88), "S1098C2.s1098c2f9");
    check_field_offset(lv, s1098c2f10, ABISELECT(144,104), "S1098C2.s1098c2f10");
    test_class_info(&lv, &cd_S1098C2);
    dp->~S1098C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1098C2(Test_S1098C2, "S1098C2", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S1098C2C1Ev();
extern void _ZN7S1098C2D1Ev();
Name_Map name_map_S1098C2[] = {
  NSPAIR(_ZN7S1098C2C1Ev),
  NSPAIR(_ZN7S1098C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1098C3_nt;
extern VTBL_ENTRY _ZTI10S1098C3_nt[];
static Base_Class bases_S1098C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1098C3_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 _ZTI7S1098C2[];
extern void _ZN7S1098C2D1Ev();
extern void _ZN7S1098C2D0Ev();
extern void _ZN7S1098C22v5Ev();
extern void _ZN7S1098C22v6Ev();
extern void _ZN7S1098C22v7Ev();
extern void _ZN7S1098C22v8Ev();
extern void _ZN7S1098C22v9Ev();
extern void _ZN7S1098C23v10Ev();
extern void _ZN7S1098C23v11Ev();
static  VTBL_ENTRY vtc_S1098C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1098C2[0]),
  (VTBL_ENTRY)&_ZN7S1098C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1098C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1098C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1098C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1098C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1098C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1098C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1098C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1098C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S1098C2[];
extern  VTBL_ENTRY _ZTV7S1098C2[];
Class_Descriptor cd_S1098C2 = {  "S1098C2", // class name
  bases_S1098C2, 2,
  &(vtc_S1098C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S1098C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1098C2),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  S1098C1  : S1098C2 {
  ::S1098C12_nt s1098c1f0;
  int s1098c1f1[2];
  ::S3221C4_nt s1098c1f2;
  int s1098c1f3;
  ::S1098C12_nt s1098c1f4;
  char s1098c1f5;
  ::S1098C7_nt s1098c1f6;
  virtual void  v1(); // _ZN7S1098C12v1Ev
  virtual void  v2(); // _ZN7S1098C12v2Ev
  virtual void  v3(); // _ZN7S1098C12v3Ev
  virtual void  v4(); // _ZN7S1098C12v4Ev
  ~S1098C1(); // tgen
  S1098C1(); // tgen
};
//SIG(1 S1098C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v5 v6 v7 v8 v9 v10 v11 FC5{ m Fp} FC5 FC5 FC6{ m Fi FC7{ BC8{ m Fp Fi}}} Fc FC9{ m FC10{ m Fi[2]} FC11{ m Fi[2]}} FC9 Fp FC9 FC9 Fc[5]} v1 v2 v3 v4 FC11 Fi[2] FC10 Fi FC11 Fc FC6}


void  S1098C1 ::v1(){vfunc_called(this, "_ZN7S1098C12v1Ev");}
void  S1098C1 ::v2(){vfunc_called(this, "_ZN7S1098C12v2Ev");}
void  S1098C1 ::v3(){vfunc_called(this, "_ZN7S1098C12v3Ev");}
void  S1098C1 ::v4(){vfunc_called(this, "_ZN7S1098C12v4Ev");}
S1098C1 ::~S1098C1(){ note_dtor("S1098C1", this);} // tgen
S1098C1 ::S1098C1(){ note_ctor("S1098C1", this);} // tgen

static void Test_S1098C1()
{
  extern Class_Descriptor cd_S1098C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,42)];
    init_test(&cd_S1098C1, buf);
    S1098C1 *dp, &lv = *(dp=new (buf) S1098C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,164), "sizeof(S1098C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1098C1)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1098C3_nt*)(S1098C2*), ABISELECT(8,4), "S1098C1");
    check_base_class_offset(lv, (S1098C3_nt*)(S1098C2*), ABISELECT(8,4), "S1098C1");
    check_base_class_offset(lv, (S1098C2*), 0, "S1098C1");
    check_field_offset(lv, s1098c1f0, ABISELECT(152,112), "S1098C1.s1098c1f0");
    check_field_offset(lv, s1098c1f1, ABISELECT(160,120), "S1098C1.s1098c1f1");
    check_field_offset(lv, s1098c1f2, ABISELECT(168,128), "S1098C1.s1098c1f2");
    check_field_offset(lv, s1098c1f3, ABISELECT(176,136), "S1098C1.s1098c1f3");
    check_field_offset(lv, s1098c1f4, ABISELECT(180,140), "S1098C1.s1098c1f4");
    check_field_offset(lv, s1098c1f5, ABISELECT(188,148), "S1098C1.s1098c1f5");
    check_field_offset(lv, s1098c1f6, ABISELECT(192,152), "S1098C1.s1098c1f6");
    test_class_info(&lv, &cd_S1098C1);
    dp->~S1098C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1098C1(Test_S1098C1, "S1098C1", ABISELECT(216,164));

#else // __cplusplus

extern void _ZN7S1098C1C1Ev();
extern void _ZN7S1098C1D1Ev();
Name_Map name_map_S1098C1[] = {
  NSPAIR(_ZN7S1098C1C1Ev),
  NSPAIR(_ZN7S1098C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1098C3_nt;
extern VTBL_ENTRY _ZTI10S1098C3_nt[];
extern Class_Descriptor cd_S1098C2;
extern VTBL_ENTRY _ZTI7S1098C2[];
extern  VTBL_ENTRY _ZTV7S1098C2[];
static Base_Class bases_S1098C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1098C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1098C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1098C1[];
extern void _ZN7S1098C1D1Ev();
extern void _ZN7S1098C1D0Ev();
extern void _ZN7S1098C22v5Ev();
extern void _ZN7S1098C22v6Ev();
extern void _ZN7S1098C22v7Ev();
extern void _ZN7S1098C22v8Ev();
extern void _ZN7S1098C22v9Ev();
extern void _ZN7S1098C23v10Ev();
extern void _ZN7S1098C23v11Ev();
extern void _ZN7S1098C12v1Ev();
extern void _ZN7S1098C12v2Ev();
extern void _ZN7S1098C12v3Ev();
extern void _ZN7S1098C12v4Ev();
static  VTBL_ENTRY vtc_S1098C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1098C1[0]),
  (VTBL_ENTRY)&_ZN7S1098C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1098C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1098C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1098C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1098C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1098C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1098C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1098C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1098C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1098C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1098C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1098C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1098C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1098C1[];
extern  VTBL_ENTRY _ZTV7S1098C1[];
Class_Descriptor cd_S1098C1 = {  "S1098C1", // class name
  bases_S1098C1, 3,
  &(vtc_S1098C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,164), // object size
  NSPAIRA(_ZTI7S1098C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1098C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1093C3  : S3221C8_nt {
};
//SIG(-1 S1093C3) C1{ BC2{ m Fi}}



static void Test_S1093C3()
{
  extern Class_Descriptor cd_S1093C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1093C3, buf);
    S1093C3 &lv = *(new (buf) S1093C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1093C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1093C3)");
    check_base_class_offset(lv, (S3221C8_nt*), 0, "S1093C3");
    test_class_info(&lv, &cd_S1093C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1093C3(Test_S1093C3, "S1093C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S1093C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1093C3[];
Class_Descriptor cd_S1093C3 = {  "S1093C3", // class name
  bases_S1093C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1093C3),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  S1093C6_nt  {
  void *s1093c6f0;
  void  mf1093c6(); // _ZN10S1093C6_nt8mf1093c6Ev
};
//SIG(-1 S1093C6_nt) C1{ m Fp}


void  S1093C6_nt ::mf1093c6(){}

//skip512 S1093C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1093C13  {
  ::S3221C4_nt s1093c13f0;
  ::S1098C12_nt s1093c13f1;
  void  mf1093c13(); // _ZN8S1093C139mf1093c13Ev
};
//SIG(-1 S1093C13) C1{ m FC2{ m Fi[2]} FC3{ m Fi[2]}}


void  S1093C13 ::mf1093c13(){}

static void Test_S1093C13()
{
  {
    init_simple_test("S1093C13");
    S1093C13 lv;
    check2(sizeof(lv), 16, "sizeof(S1093C13)");
    check2(__alignof__(lv), 4, "__alignof__(S1093C13)");
    check_field_offset(lv, s1093c13f0, 0, "S1093C13.s1093c13f0");
    check_field_offset(lv, s1093c13f1, 8, "S1093C13.s1093c13f1");
  }
}
static Arrange_To_Call_Me vS1093C13(Test_S1093C13, "S1093C13", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1093C2  : S1093C3 {
  ::S1098C5_nt s1093c2f0;
  ::S1093C6_nt s1093c2f1;
  ::S1093C6_nt s1093c2f2;
  ::S1098C7_nt s1093c2f3;
  char s1093c2f4;
  ::S1098C10_nt s1093c2f5;
  ::S1093C13 s1093c2f6;
  void *s1093c2f7;
  ::S1093C13 s1093c2f8;
  ::S1093C13 s1093c2f9;
  char s1093c2f10[5];
  virtual  ~S1093C2(); // _ZN7S1093C2D1Ev
  virtual void  v4(); // _ZN7S1093C22v4Ev
  virtual void  v5(); // _ZN7S1093C22v5Ev
  virtual void  v6(); // _ZN7S1093C22v6Ev
  virtual void  v7(); // _ZN7S1093C22v7Ev
  virtual void  v8(); // _ZN7S1093C22v8Ev
  virtual void  v9(); // _ZN7S1093C22v9Ev
  virtual void  v10(); // _ZN7S1093C23v10Ev
  S1093C2(); // tgen
};
//SIG(-1 S1093C2) C1{ BC2{ BC3{ m Fi}} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp} FC5{ m Fp} FC5 FC6{ m Fi FC7{ BC8{ m Fp Fi}}} Fc FC9{ m FC10{ m Fi[2]} FC11{ m Fi[2]}} FC12{ m FC10 FC11} Fp FC12 FC12 Fc[5]}


 S1093C2 ::~S1093C2(){ note_dtor("S1093C2", this);}
void  S1093C2 ::v4(){vfunc_called(this, "_ZN7S1093C22v4Ev");}
void  S1093C2 ::v5(){vfunc_called(this, "_ZN7S1093C22v5Ev");}
void  S1093C2 ::v6(){vfunc_called(this, "_ZN7S1093C22v6Ev");}
void  S1093C2 ::v7(){vfunc_called(this, "_ZN7S1093C22v7Ev");}
void  S1093C2 ::v8(){vfunc_called(this, "_ZN7S1093C22v8Ev");}
void  S1093C2 ::v9(){vfunc_called(this, "_ZN7S1093C22v9Ev");}
void  S1093C2 ::v10(){vfunc_called(this, "_ZN7S1093C23v10Ev");}
S1093C2 ::S1093C2(){ note_ctor("S1093C2", this);} // tgen

static void Test_S1093C2()
{
  extern Class_Descriptor cd_S1093C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S1093C2, buf);
    S1093C2 *dp, &lv = *(dp=new (buf) S1093C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S1093C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1093C2)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1093C3*), ABISELECT(8,4), "S1093C2");
    check_base_class_offset(lv, (S1093C3*), ABISELECT(8,4), "S1093C2");
    check_field_offset(lv, s1093c2f0, ABISELECT(16,8), "S1093C2.s1093c2f0");
    check_field_offset(lv, s1093c2f1, ABISELECT(24,12), "S1093C2.s1093c2f1");
    check_field_offset(lv, s1093c2f2, ABISELECT(32,16), "S1093C2.s1093c2f2");
    check_field_offset(lv, s1093c2f3, ABISELECT(40,20), "S1093C2.s1093c2f3");
    check_field_offset(lv, s1093c2f4, ABISELECT(64,32), "S1093C2.s1093c2f4");
    check_field_offset(lv, s1093c2f5, ABISELECT(68,36), "S1093C2.s1093c2f5");
    check_field_offset(lv, s1093c2f6, ABISELECT(84,52), "S1093C2.s1093c2f6");
    check_field_offset(lv, s1093c2f7, ABISELECT(104,68), "S1093C2.s1093c2f7");
    check_field_offset(lv, s1093c2f8, ABISELECT(112,72), "S1093C2.s1093c2f8");
    check_field_offset(lv, s1093c2f9, ABISELECT(128,88), "S1093C2.s1093c2f9");
    check_field_offset(lv, s1093c2f10, ABISELECT(144,104), "S1093C2.s1093c2f10");
    test_class_info(&lv, &cd_S1093C2);
    dp->~S1093C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1093C2(Test_S1093C2, "S1093C2", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S1093C2C1Ev();
extern void _ZN7S1093C2D1Ev();
Name_Map name_map_S1093C2[] = {
  NSPAIR(_ZN7S1093C2C1Ev),
  NSPAIR(_ZN7S1093C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1093C3;
extern VTBL_ENTRY _ZTI7S1093C3[];
static Base_Class bases_S1093C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1093C3,    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 _ZTI7S1093C2[];
extern void _ZN7S1093C2D1Ev();
extern void _ZN7S1093C2D0Ev();
extern void _ZN7S1093C22v4Ev();
extern void _ZN7S1093C22v5Ev();
extern void _ZN7S1093C22v6Ev();
extern void _ZN7S1093C22v7Ev();
extern void _ZN7S1093C22v8Ev();
extern void _ZN7S1093C22v9Ev();
extern void _ZN7S1093C23v10Ev();
static  VTBL_ENTRY vtc_S1093C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1093C2[0]),
  (VTBL_ENTRY)&_ZN7S1093C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1093C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1093C22v4Ev,
  (VTBL_ENTRY)&_ZN7S1093C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1093C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1093C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1093C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1093C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1093C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S1093C2[];
extern  VTBL_ENTRY _ZTV7S1093C2[];
Class_Descriptor cd_S1093C2 = {  "S1093C2", // class name
  bases_S1093C2, 2,
  &(vtc_S1093C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S1093C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1093C2),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  S1093C17  {
  int s1093c17f0;
  ::S1098C8_nt s1093c17f1;
  void  mf1093c17(); // _ZN8S1093C179mf1093c17Ev
};
//SIG(-1 S1093C17) C1{ m Fi FC2{ BC3{ m Fp Fi}}}


void  S1093C17 ::mf1093c17(){}

static void Test_S1093C17()
{
  {
    init_simple_test("S1093C17");
    S1093C17 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1093C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1093C17)");
    check_field_offset(lv, s1093c17f0, 0, "S1093C17.s1093c17f0");
    check_field_offset(lv, s1093c17f1, ABISELECT(8,4), "S1093C17.s1093c17f1");
  }
}
static Arrange_To_Call_Me vS1093C17(Test_S1093C17, "S1093C17", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1093C16  {
  int s1093c16f0[6];
  ::S1093C17 s1093c16f1;
  void  mf1093c16(); // _ZN8S1093C169mf1093c16Ev
};
//SIG(-1 S1093C16) C1{ m Fi[6] FC2{ m Fi FC3{ BC4{ m Fp Fi}}}}


void  S1093C16 ::mf1093c16(){}

static void Test_S1093C16()
{
  {
    init_simple_test("S1093C16");
    S1093C16 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S1093C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1093C16)");
    check_field_offset(lv, s1093c16f0, 0, "S1093C16.s1093c16f0");
    check_field_offset(lv, s1093c16f1, 24, "S1093C16.s1093c16f1");
  }
}
static Arrange_To_Call_Me vS1093C16(Test_S1093C16, "S1093C16", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1093C1  : S1093C2 {
  ::S1093C16 s1093c1f0;
  ::S1093C16 s1093c1f1;
  ::S1093C16 s1093c1f2;
  ::S1093C16 s1093c1f3;
  virtual void  v1(); // _ZN7S1093C12v1Ev
  virtual void  v2(); // _ZN7S1093C12v2Ev
  virtual void  v3(); // _ZN7S1093C12v3Ev
  ~S1093C1(); // tgen
  S1093C1(); // tgen
};
//SIG(1 S1093C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v4 v5 v6 v7 v8 v9 v10 FC5{ m Fp} FC6{ m Fp} FC6 FC7{ m Fi FC8{ BC9{ m Fp Fi}}} Fc FC10{ m FC11{ m Fi[2]} FC12{ m Fi[2]}} FC13{ m FC11 FC12} Fp FC13 FC13 Fc[5]} v1 v2 v3 FC14{ m Fi[6] FC15{ m Fi FC8}} FC14 FC14 FC14}


void  S1093C1 ::v1(){vfunc_called(this, "_ZN7S1093C12v1Ev");}
void  S1093C1 ::v2(){vfunc_called(this, "_ZN7S1093C12v2Ev");}
void  S1093C1 ::v3(){vfunc_called(this, "_ZN7S1093C12v3Ev");}
S1093C1 ::~S1093C1(){ note_dtor("S1093C1", this);} // tgen
S1093C1 ::S1093C1(){ note_ctor("S1093C1", this);} // tgen

static void Test_S1093C1()
{
  extern Class_Descriptor cd_S1093C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,65)];
    init_test(&cd_S1093C1, buf);
    S1093C1 *dp, &lv = *(dp=new (buf) S1093C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,256), "sizeof(S1093C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1093C1)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1093C3*)(S1093C2*), ABISELECT(8,4), "S1093C1");
    check_base_class_offset(lv, (S1093C3*)(S1093C2*), ABISELECT(8,4), "S1093C1");
    check_base_class_offset(lv, (S1093C2*), 0, "S1093C1");
    check_field_offset(lv, s1093c1f0, ABISELECT(152,112), "S1093C1.s1093c1f0");
    check_field_offset(lv, s1093c1f1, ABISELECT(200,148), "S1093C1.s1093c1f1");
    check_field_offset(lv, s1093c1f2, ABISELECT(248,184), "S1093C1.s1093c1f2");
    check_field_offset(lv, s1093c1f3, ABISELECT(296,220), "S1093C1.s1093c1f3");
    test_class_info(&lv, &cd_S1093C1);
    dp->~S1093C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1093C1(Test_S1093C1, "S1093C1", ABISELECT(344,256));

#else // __cplusplus

extern void _ZN7S1093C1C1Ev();
extern void _ZN7S1093C1D1Ev();
Name_Map name_map_S1093C1[] = {
  NSPAIR(_ZN7S1093C1C1Ev),
  NSPAIR(_ZN7S1093C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1093C3;
extern VTBL_ENTRY _ZTI7S1093C3[];
extern Class_Descriptor cd_S1093C2;
extern VTBL_ENTRY _ZTI7S1093C2[];
extern  VTBL_ENTRY _ZTV7S1093C2[];
static Base_Class bases_S1093C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1093C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1093C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1093C1[];
extern void _ZN7S1093C1D1Ev();
extern void _ZN7S1093C1D0Ev();
extern void _ZN7S1093C22v4Ev();
extern void _ZN7S1093C22v5Ev();
extern void _ZN7S1093C22v6Ev();
extern void _ZN7S1093C22v7Ev();
extern void _ZN7S1093C22v8Ev();
extern void _ZN7S1093C22v9Ev();
extern void _ZN7S1093C23v10Ev();
extern void _ZN7S1093C12v1Ev();
extern void _ZN7S1093C12v2Ev();
extern void _ZN7S1093C12v3Ev();
static  VTBL_ENTRY vtc_S1093C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1093C1[0]),
  (VTBL_ENTRY)&_ZN7S1093C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1093C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1093C22v4Ev,
  (VTBL_ENTRY)&_ZN7S1093C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1093C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1093C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1093C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1093C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1093C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1093C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1093C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1093C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1093C1[];
extern  VTBL_ENTRY _ZTV7S1093C1[];
Class_Descriptor cd_S1093C1 = {  "S1093C1", // class name
  bases_S1093C1, 3,
  &(vtc_S1093C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,256), // object size
  NSPAIRA(_ZTI7S1093C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1093C1),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  S20711C4  : virtual S5643C3_nt , virtual S5643C2 , virtual S5408C7_nt {
  ::S5643C2 s20711c4f0[10];
  ~S20711C4(); // tgen
  S20711C4(); // tgen
};
//SIG(-1 S20711C4) C1{ VBC2{ m FD} VBC3{ m FC2[7]} VBC4{ m} FC3[10]}


S20711C4 ::~S20711C4(){ note_dtor("S20711C4", this);} // tgen
S20711C4 ::S20711C4(){ note_ctor("S20711C4", this);} // tgen

static void Test_S20711C4()
{
  extern Class_Descriptor cd_S20711C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(80,236)];
    init_test(&cd_S20711C4, buf);
    S20711C4 *dp, &lv = *(dp=new (buf) S20711C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1264,940), "sizeof(S20711C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20711C4)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(1136,844), "S20711C4");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(1152,856), "S20711C4");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S20711C4");
    check_field_offset(lv, s20711c4f0, ABISELECT(16,4), "S20711C4.s20711c4f0");
    test_class_info(&lv, &cd_S20711C4);
    dp->~S20711C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20711C4(Test_S20711C4, "S20711C4", ABISELECT(1264,940));

#else // __cplusplus

extern void _ZN8S20711C4C1Ev();
extern void _ZN8S20711C4D1Ev();
Name_Map name_map_S20711C4[] = {
  NSPAIR(_ZN8S20711C4C1Ev),
  NSPAIR(_ZN8S20711C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
static Base_Class bases_S20711C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(1136,844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5643C2,    ABISELECT(1152,856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20711C4[];
static  VTBL_ENTRY vtc_S20711C4[] = {
  0,
  ABISELECT(1152,856),
  ABISELECT(1136,844),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C4[0]),
};
extern VTBL_ENTRY _ZTV8S20711C4[];
static  VTT_ENTRY vtt_S20711C4[] = {
  {&(_ZTV8S20711C4[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S20711C4[];
extern  VTBL_ENTRY _ZTV8S20711C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C4[];
Class_Descriptor cd_S20711C4 = {  "S20711C4", // class name
  bases_S20711C4, 3,
  &(vtc_S20711C4[0]), // expected_vtbl_contents
  &(vtt_S20711C4[0]), // expected_vtt_contents
  ABISELECT(1264,940), // object size
  NSPAIRA(_ZTI8S20711C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20711C4),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20711C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20711C7  : S5643C3_nt , virtual S5408C7_nt , virtual S5643C2 {
  virtual  ~S20711C7(); // _ZN8S20711C7D2Ev
  S20711C7(); // tgen
};
//SIG(-1 S20711C7) C1{ BC2{ m FD} VBC3{ m} VBC4{ m FC2[7]} vd}


 S20711C7 ::~S20711C7(){ note_dtor("S20711C7", this);}
S20711C7 ::S20711C7(){ note_ctor("S20711C7", this);} // tgen

static void Test_S20711C7()
{
  extern Class_Descriptor cd_S20711C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,26)];
    init_test(&cd_S20711C7, buf);
    S20711C7 *dp, &lv = *(dp=new (buf) S20711C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S20711C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20711C7)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(16,4), "S20711C7");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S20711C7");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(32,16), "S20711C7");
    test_class_info(&lv, &cd_S20711C7);
    dp->~S20711C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20711C7(Test_S20711C7, "S20711C7", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN8S20711C7C1Ev();
extern void _ZN8S20711C7D2Ev();
Name_Map name_map_S20711C7[] = {
  NSPAIR(_ZN8S20711C7C1Ev),
  NSPAIR(_ZN8S20711C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
static Base_Class bases_S20711C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    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_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5643C2,    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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20711C7[];
extern void _ZN8S20711C7D1Ev();
extern void _ZN8S20711C7D0Ev();
static  VTBL_ENTRY vtc_S20711C7[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C7[0]),
  (VTBL_ENTRY)&_ZN8S20711C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S20711C7[];
static  VTT_ENTRY vtt_S20711C7[] = {
  {&(_ZTV8S20711C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20711C7[];
extern  VTBL_ENTRY _ZTV8S20711C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C7[];
Class_Descriptor cd_S20711C7 = {  "S20711C7", // class name
  bases_S20711C7, 3,
  &(vtc_S20711C7[0]), // expected_vtbl_contents
  &(vtt_S20711C7[0]), // expected_vtt_contents
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI8S20711C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20711C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20711C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20711C8  : S5643C3_nt , S5643C2 , virtual S5408C7_nt {
  ~S20711C8(); // tgen
  S20711C8(); // tgen
};
//SIG(-1 S20711C8) C1{ BC2{ m FD} BC3{ m FC2[7]} VBC4{ m}}


S20711C8 ::~S20711C8(){ note_dtor("S20711C8", this);} // tgen
S20711C8 ::S20711C8(){ note_ctor("S20711C8", this);} // tgen

static void Test_S20711C8()
{
  extern Class_Descriptor cd_S20711C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,26)];
    init_test(&cd_S20711C8, buf);
    S20711C8 *dp, &lv = *(dp=new (buf) S20711C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S20711C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20711C8)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(16,4), "S20711C8");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(32,16), "S20711C8");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S20711C8");
    test_class_info(&lv, &cd_S20711C8);
    dp->~S20711C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20711C8(Test_S20711C8, "S20711C8", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN8S20711C8C1Ev();
extern void _ZN8S20711C8D1Ev();
Name_Map name_map_S20711C8[] = {
  NSPAIR(_ZN8S20711C8C1Ev),
  NSPAIR(_ZN8S20711C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
static Base_Class bases_S20711C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    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_S5643C2,    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_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20711C8[];
static  VTBL_ENTRY vtc_S20711C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C8[0]),
};
extern VTBL_ENTRY _ZTV8S20711C8[];
static  VTT_ENTRY vtt_S20711C8[] = {
  {&(_ZTV8S20711C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20711C8[];
extern  VTBL_ENTRY _ZTV8S20711C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C8[];
Class_Descriptor cd_S20711C8 = {  "S20711C8", // class name
  bases_S20711C8, 3,
  &(vtc_S20711C8[0]), // expected_vtbl_contents
  &(vtt_S20711C8[0]), // expected_vtt_contents
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI8S20711C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20711C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20711C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20711C2  : virtual S5408C7_nt , S20711C4 , S20711C7 , S20711C8 {
  ~S20711C2(); // tgen
  S20711C2(); // tgen
};
//SIG(-1 S20711C2) C1{ VBC2{ m} BC3{ VBC4{ m FD} VBC5{ m FC4[7]} VBC2 FC5[10]} BC6{ BC4 VBC2 VBC5 vd} BC7{ BC4 BC5 VBC2}}


S20711C2 ::~S20711C2(){ note_dtor("S20711C2", this);} // tgen
S20711C2 ::S20711C2(){ note_ctor("S20711C2", this);} // tgen

static void Test_S20711C2()
{
  extern Class_Descriptor cd_S20711C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(91,265)];
    init_test(&cd_S20711C2, buf);
    S20711C2 *dp, &lv = *(dp=new (buf) S20711C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1440,1056), "sizeof(S20711C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20711C2)");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S20711C2");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C4*), 0, "S20711C2");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C7*), 0, "S20711C2");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C8*), 0, "S20711C2");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C4*), ABISELECT(1312,960), "S20711C2");
    check_base_class_offset(lv, (S5643C2*)(S20711C4*), ABISELECT(1328,972), "S20711C2");
    check_base_class_offset(lv, (S5643C2*)(S20711C7*), ABISELECT(1328,972), "S20711C2");
    check_base_class_offset(lv, (S20711C4*), 0, "S20711C2");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C7*), ABISELECT(1152,848), "S20711C2");
    check_base_class_offset(lv, (S20711C7*), ABISELECT(1136,844), "S20711C2");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C8*), ABISELECT(1184,864), "S20711C2");
    check_base_class_offset(lv, (S5643C2*)(S20711C8*), ABISELECT(1200,876), "S20711C2");
    check_base_class_offset(lv, (S20711C8*), ABISELECT(1168,860), "S20711C2");
    test_class_info(&lv, &cd_S20711C2);
    dp->~S20711C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20711C2(Test_S20711C2, "S20711C2", ABISELECT(1440,1056));

#else // __cplusplus

extern void _ZN8S20711C2C1Ev();
extern void _ZN8S20711C2D1Ev();
Name_Map name_map_S20711C2[] = {
  NSPAIR(_ZN8S20711C2C1Ev),
  NSPAIR(_ZN8S20711C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C4;
extern VTBL_ENTRY _ZTI8S20711C4[];
extern  VTBL_ENTRY _ZTV8S20711C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S20711C7;
extern VTBL_ENTRY _ZTI8S20711C7[];
extern  VTBL_ENTRY _ZTV8S20711C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C7[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C8;
extern VTBL_ENTRY _ZTI8S20711C8[];
extern  VTBL_ENTRY _ZTV8S20711C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C8[];
static Base_Class bases_S20711C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5643C3_nt,    ABISELECT(1312,960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1328,972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C4,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C3_nt,    ABISELECT(1152,848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C7,    ABISELECT(1136,844), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C3_nt,    ABISELECT(1184,864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1200,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C8,    ABISELECT(1168,860), //bcp->offset
    13, //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 _ZTI8S20711C2[];
extern void _ZN8S20711C2D1Ev();
extern void _ZN8S20711C2D0Ev();
extern void ABISELECT(_ZThn1136_N8S20711C2D1Ev,_ZThn844_N8S20711C2D1Ev)();
extern void ABISELECT(_ZThn1136_N8S20711C2D0Ev,_ZThn844_N8S20711C2D0Ev)();
static  VTBL_ENTRY vtc_S20711C2[] = {
  0,
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
  (VTBL_ENTRY)&_ZN8S20711C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C2D0Ev,
  ABISELECT(192,128),
  ABISELECT(-1136,-844),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C2D1Ev,_ZThn844_N8S20711C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C2D0Ev,_ZThn844_N8S20711C2D0Ev),
  ABISELECT(-1168,-860),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
};
extern VTBL_ENTRY _ZTV8S20711C2[];
static  VTBL_ENTRY _tg__ZTV8S20711C4__8S20711C2[] = {
  0,
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C4[0]),
};
extern void _ZN8S20711C7D1Ev();
extern void _ZN8S20711C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C7__8S20711C2[] = {
  ABISELECT(192,128),
  ABISELECT(-1136,-844),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C7[0]),
  (VTBL_ENTRY)&_ZN8S20711C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__8S20711C2[] = {
  ABISELECT(-1168,-860),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C8[0]),
};
static  VTT_ENTRY vtt_S20711C2[] = {
  {&(_ZTV8S20711C2[5]),  5,16},
  {&(_tg__ZTV8S20711C4__8S20711C2[5]),  5,5},
  {&(_tg__ZTV8S20711C7__8S20711C2[4]),  4,6},
  {&(_tg__ZTV8S20711C8__8S20711C2[3]),  3,3},
  {&(_ZTV8S20711C2[11]),  11,16},
  {&(_ZTV8S20711C2[16]),  16,16},
};
extern VTBL_ENTRY _ZTI8S20711C2[];
extern  VTBL_ENTRY _ZTV8S20711C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C2[];
Class_Descriptor cd_S20711C2 = {  "S20711C2", // class name
  bases_S20711C2, 9,
  &(vtc_S20711C2[0]), // expected_vtbl_contents
  &(vtt_S20711C2[0]), // expected_vtt_contents
  ABISELECT(1440,1056), // object size
  NSPAIRA(_ZTI8S20711C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20711C2),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20711C2),6, //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  S20711C10  : virtual S5643C3_nt , S5643C2 {
  int s20711c10f0[4];
  virtual  ~S20711C10(); // _ZN9S20711C10D2Ev
  S20711C10(); // tgen
};
//SIG(-1 S20711C10) C1{ VBC2{ m FD} BC3{ m FC2[7]} vd Fi[4]}


 S20711C10 ::~S20711C10(){ note_dtor("S20711C10", this);}
S20711C10 ::S20711C10(){ note_ctor("S20711C10", this);} // tgen

static void Test_S20711C10()
{
  extern Class_Descriptor cd_S20711C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,30)];
    init_test(&cd_S20711C10, buf);
    S20711C10 *dp, &lv = *(dp=new (buf) S20711C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,116), "sizeof(S20711C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20711C10)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(144,104), "S20711C10");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(16,4), "S20711C10");
    check_field_offset(lv, s20711c10f0, ABISELECT(128,88), "S20711C10.s20711c10f0");
    test_class_info(&lv, &cd_S20711C10);
    dp->~S20711C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20711C10(Test_S20711C10, "S20711C10", ABISELECT(160,116));

#else // __cplusplus

extern void _ZN9S20711C10C1Ev();
extern void _ZN9S20711C10D2Ev();
Name_Map name_map_S20711C10[] = {
  NSPAIR(_ZN9S20711C10C1Ev),
  NSPAIR(_ZN9S20711C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
static Base_Class bases_S20711C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_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
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C2,    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 _ZTI9S20711C10[];
extern void _ZN9S20711C10D1Ev();
extern void _ZN9S20711C10D0Ev();
static  VTBL_ENTRY vtc_S20711C10[] = {
  ABISELECT(144,104),
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C10[0]),
  (VTBL_ENTRY)&_ZN9S20711C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20711C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S20711C10[];
static  VTT_ENTRY vtt_S20711C10[] = {
  {&(_ZTV9S20711C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20711C10[];
extern  VTBL_ENTRY _ZTV9S20711C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C10[];
Class_Descriptor cd_S20711C10 = {  "S20711C10", // class name
  bases_S20711C10, 2,
  &(vtc_S20711C10[0]), // expected_vtbl_contents
  &(vtt_S20711C10[0]), // expected_vtt_contents
  ABISELECT(160,116), // object size
  NSPAIRA(_ZTI9S20711C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20711C10),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20711C10),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20711C11  : virtual S20711C8 , virtual S20711C7 , S239C12_nt , virtual S20711C2 {
  virtual  ~S20711C11(); // _ZN9S20711C11D2Ev
  S20711C11(); // tgen
};
//SIG(-1 S20711C11) C1{ VBC2{ BC3{ m FD} BC4{ m FC3[7]} VBC5{ m}} VBC6{ BC3 VBC5 VBC4 vd} BC7{ m} VBC8{ VBC5 BC9{ VBC3 VBC4 VBC5 FC4[10]} BC6 BC2} vd}


 S20711C11 ::~S20711C11(){ note_dtor("S20711C11", this);}
S20711C11 ::S20711C11(){ note_ctor("S20711C11", this);} // tgen

static void Test_S20711C11()
{
  extern Class_Descriptor cd_S20711C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,295)];
    init_test(&cd_S20711C11, buf);
    S20711C11 *dp, &lv = *(dp=new (buf) S20711C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,1176), "sizeof(S20711C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20711C11)");
    /*is_ambiguous_... S20711C11::S20711C8 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C8*), ABISELECT(32,8), "S20711C11");
    /*is_ambiguous_... S20711C11::S20711C8 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C8*), ABISELECT(48,20), "S20711C11");
    /*is_ambiguous_... S20711C11::S20711C8 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C8*), 0, "S20711C11");
    /*is_ambiguous_... S20711C11::S20711C7 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C7*), 0, "S20711C11");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C2*), 0, "S20711C11");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C4*)(S20711C2*), 0, "S20711C11");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C7*)(S20711C2*), 0, "S20711C11");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C8*)(S20711C2*), 0, "S20711C11");
    /*is_ambiguous_... S20711C11::S20711C8 */ AMB_check_base_class_offset(lv, (S20711C8*), ABISELECT(16,4), "S20711C11");
    /*is_ambiguous_... S20711C11::S20711C7 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C7*), ABISELECT(176,108), "S20711C11");
    /*is_ambiguous_... S20711C11::S20711C7 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C7*), ABISELECT(192,120), "S20711C11");
    check_base_class_offset(lv, (S5643C2*)(S20711C4*)(S20711C2*), ABISELECT(192,120), "S20711C11");
    check_base_class_offset(lv, (S5643C2*)(S20711C7*)(S20711C2*), ABISELECT(192,120), "S20711C11");
    /*is_ambiguous_... S20711C11::S20711C7 */ AMB_check_base_class_offset(lv, (S20711C7*), ABISELECT(160,104), "S20711C11");
    check_base_class_offset(lv, (S239C12_nt*), 0, "S20711C11");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C4*)(S20711C2*), ABISELECT(1616,1164), "S20711C11");
    check_base_class_offset(lv, (S20711C4*)(S20711C2*), ABISELECT(304,204), "S20711C11");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C7*)(S20711C2*), ABISELECT(1456,1052), "S20711C11");
    check_base_class_offset(lv, (S20711C7*)(S20711C2*), ABISELECT(1440,1048), "S20711C11");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C8*)(S20711C2*), ABISELECT(1488,1068), "S20711C11");
    check_base_class_offset(lv, (S5643C2*)(S20711C8*)(S20711C2*), ABISELECT(1504,1080), "S20711C11");
    check_base_class_offset(lv, (S20711C8*)(S20711C2*), ABISELECT(1472,1064), "S20711C11");
    check_base_class_offset(lv, (S20711C2*), ABISELECT(304,204), "S20711C11");
    test_class_info(&lv, &cd_S20711C11);
    dp->~S20711C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20711C11(Test_S20711C11, "S20711C11", ABISELECT(1632,1176));

#else // __cplusplus

extern void _ZN9S20711C11C1Ev();
extern void _ZN9S20711C11D2Ev();
Name_Map name_map_S20711C11[] = {
  NSPAIR(_ZN9S20711C11C1Ev),
  NSPAIR(_ZN9S20711C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S20711C8;
extern VTBL_ENTRY _ZTI8S20711C8[];
extern  VTBL_ENTRY _ZTV8S20711C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C7;
extern VTBL_ENTRY _ZTI8S20711C7[];
extern  VTBL_ENTRY _ZTV8S20711C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C7[];
extern Class_Descriptor cd_S239C12_nt;
extern VTBL_ENTRY _ZTI10S239C12_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S20711C4;
extern VTBL_ENTRY _ZTI8S20711C4[];
extern  VTBL_ENTRY _ZTV8S20711C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S20711C7;
extern VTBL_ENTRY _ZTI8S20711C7[];
extern  VTBL_ENTRY _ZTV8S20711C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C7[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C8;
extern VTBL_ENTRY _ZTI8S20711C8[];
extern  VTBL_ENTRY _ZTV8S20711C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C8[];
extern Class_Descriptor cd_S20711C2;
extern VTBL_ENTRY _ZTI8S20711C2[];
extern  VTBL_ENTRY _ZTV8S20711C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C2[];
static Base_Class bases_S20711C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(32,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_S5643C2,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C8,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(176,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
    6, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(192,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
    6, //immediately_derived
  0, 1},
  {&cd_S20711C7,    ABISELECT(160,104), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S239C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5643C3_nt,    ABISELECT(1616,1164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C4,    ABISELECT(304,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    15, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1456,1052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C7,    ABISELECT(1440,1048), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1488,1068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1504,1080), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C8,    ABISELECT(1472,1064), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20711C2,    ABISELECT(304,204), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20711C11[];
extern void _ZN9S20711C11D1Ev();
extern void _ZN9S20711C11D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S20711C11D1Ev,_ZTv0_n20_N9S20711C11D1Ev)();
extern void ABISELECT(_ZThn160_N9S20711C11D1Ev,_ZThn104_N9S20711C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20711C11D0Ev,_ZTv0_n20_N9S20711C11D0Ev)();
extern void ABISELECT(_ZThn160_N9S20711C11D0Ev,_ZThn104_N9S20711C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20711C11D1Ev,_ZTv0_n24_N9S20711C11D1Ev)();
extern void ABISELECT(_ZThn304_N9S20711C11D1Ev,_ZThn204_N9S20711C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20711C11D0Ev,_ZTv0_n24_N9S20711C11D0Ev)();
extern void ABISELECT(_ZThn304_N9S20711C11D0Ev,_ZThn204_N9S20711C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n48_N9S20711C11D1Ev,_ZTvn844_n24_N9S20711C11D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N9S20711C11D0Ev,_ZTvn844_n24_N9S20711C11D0Ev)();
static  VTBL_ENTRY vtc_S20711C11[] = {
  ABISELECT(1616,1164),
  ABISELECT(304,204),
  ABISELECT(192,120),
  ABISELECT(160,104),
  0,
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
  (VTBL_ENTRY)&_ZN9S20711C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20711C11D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
  ABISELECT(-160,-104),
  ABISELECT(32,16),
  ABISELECT(-160,-104),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C11D1Ev,_ZTv0_n20_N9S20711C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C11D0Ev,_ZTv0_n20_N9S20711C11D0Ev),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1312,960),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20711C11D1Ev,_ZTv0_n24_N9S20711C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20711C11D0Ev,_ZTv0_n24_N9S20711C11D0Ev),
  ABISELECT(-1248,-928),
  ABISELECT(-1440,-1048),
  ABISELECT(-1440,-1048),
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N9S20711C11D1Ev,_ZTvn844_n24_N9S20711C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N9S20711C11D0Ev,_ZTvn844_n24_N9S20711C11D0Ev),
  ABISELECT(-1472,-1064),
  ABISELECT(-1472,-1064),
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
};
extern VTBL_ENTRY _ZTV9S20711C11[];
static  VTBL_ENTRY _tg__ZTV8S20711C8__9S20711C11[] = {
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C8[0]),
};
extern void _ZN8S20711C7D1Ev();
extern void _ZN8S20711C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C7__9S20711C11[] = {
  ABISELECT(32,16),
  ABISELECT(-160,-104),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C7[0]),
  (VTBL_ENTRY)&_ZN8S20711C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C7D0Ev,
};
extern void _ZN8S20711C2D1Ev();
extern void _ZN8S20711C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C2__9S20711C11[] = {
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
  (VTBL_ENTRY)&_ZN8S20711C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C48S20711C2__9S20711C11[] = {
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C4[0]),
};
extern void _ZN8S20711C7D1Ev();
extern void _ZN8S20711C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C78S20711C2__A1__9S20711C11[] = {
  ABISELECT(-1248,-928),
  ABISELECT(-1440,-1048),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C7[0]),
  (VTBL_ENTRY)&_ZN8S20711C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C88S20711C2__A1__9S20711C11[] = {
  ABISELECT(-1472,-1064),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C8[0]),
};
extern void ABISELECT(_ZThn1136_N8S20711C2D1Ev,_ZThn844_N8S20711C2D1Ev)();
extern void ABISELECT(_ZThn1136_N8S20711C2D0Ev,_ZThn844_N8S20711C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20711C7__8S20711C2__9S20711C11[] = {
  ABISELECT(-1248,-928),
  ABISELECT(-1440,-1048),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C2D1Ev,_ZThn844_N8S20711C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C2D0Ev,_ZThn844_N8S20711C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__8S20711C2__9S20711C11[] = {
  ABISELECT(-1472,-1064),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
};
static  VTT_ENTRY vtt_S20711C11[] = {
  {&(_ZTV9S20711C11[8]),  8,37},
  {&(_ZTV9S20711C11[13]),  13,37},
  {&(_ZTV9S20711C11[18]),  18,37},
  {&(_ZTV9S20711C11[26]),  26,37},
  {&(_ZTV9S20711C11[32]),  32,37},
  {&(_ZTV9S20711C11[37]),  37,37},
  {&(_tg__ZTV8S20711C8__9S20711C11[3]),  3,3},
  {&(_tg__ZTV8S20711C7__9S20711C11[4]),  4,6},
  {&(_tg__ZTV8S20711C2__9S20711C11[5]),  5,7},
  {&(_tg__ZTV8S20711C48S20711C2__9S20711C11[5]),  5,5},
  {&(_tg__ZTV8S20711C78S20711C2__A1__9S20711C11[4]),  4,6},
  {&(_tg__ZTV8S20711C88S20711C2__A1__9S20711C11[3]),  3,3},
  {&(_tg__ZTV8S20711C7__8S20711C2__9S20711C11[4]),  4,6},
  {&(_tg__ZTV8S20711C8__8S20711C2__9S20711C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20711C11[];
extern  VTBL_ENTRY _ZTV9S20711C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C11[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20711C11D0Ev,_ZTv0_n24_N9S20711C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20711C11D0Ev,_ZThn204_N9S20711C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20711C11D1Ev,_ZTv0_n24_N9S20711C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20711C11D1Ev,_ZThn204_N9S20711C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20711C11D0Ev,_ZTv0_n20_N9S20711C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20711C11D0Ev,_ZThn104_N9S20711C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20711C11D1Ev,_ZTv0_n20_N9S20711C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20711C11D1Ev,_ZThn104_N9S20711C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20711C11 = {  "S20711C11", // class name
  bases_S20711C11, 16,
  &(vtc_S20711C11[0]), // expected_vtbl_contents
  &(vtt_S20711C11[0]), // expected_vtt_contents
  ABISELECT(1632,1176), // object size
  NSPAIRA(_ZTI9S20711C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20711C11),37, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20711C11),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20711C9  : S20711C4 , S20711C10 , S20711C11 , S20711C2 {
  virtual  ~S20711C9(); // _ZN8S20711C9D2Ev
  S20711C9(); // tgen
};
//SIG(-1 S20711C9) C1{ BC2{ VBC3{ m FD} VBC4{ m FC3[7]} VBC5{ m} FC4[10]} BC6{ VBC3 BC4 vd Fi[4]} BC7{ VBC8{ BC3 BC4 VBC5} VBC9{ BC3 VBC5 VBC4 vd} BC10{ m} VBC11{ VBC5 BC2 BC9 BC8} vd} BC11 vd}


 S20711C9 ::~S20711C9(){ note_dtor("S20711C9", this);}
S20711C9 ::S20711C9(){ note_ctor("S20711C9", this);} // tgen

static void Test_S20711C9()
{
  extern Class_Descriptor cd_S20711C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(265,772)];
    init_test(&cd_S20711C9, buf);
    S20711C9 *dp, &lv = *(dp=new (buf) S20711C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4224,3084), "sizeof(S20711C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20711C9)");
    /*is_ambiguous_... S20711C9::S20711C4 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C4*), ABISELECT(2608,1912), "S20711C9");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C10*), ABISELECT(2608,1912), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C4*)(S20711C2*), ABISELECT(2608,1912), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C4*)(S20711C2*), ABISELECT(2608,1912), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C4 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C4*), ABISELECT(2624,1924), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C7 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C7*), ABISELECT(2624,1924), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C4*)(S20711C2*), ABISELECT(2624,1924), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C7*)(S20711C2*), ABISELECT(2624,1924), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C4*)(S20711C2*), ABISELECT(2624,1924), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C7*)(S20711C2*), ABISELECT(2624,1924), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C4 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C4*), 0, "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C8 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C8*), 0, "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C7 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C7*), 0, "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C2*), 0, "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C4*)(S20711C2*), 0, "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C7*)(S20711C2*), 0, "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C8*)(S20711C2*), 0, "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C2*), 0, "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C4*)(S20711C2*), 0, "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C7*)(S20711C2*), 0, "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C8*)(S20711C2*), 0, "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C4 */ AMB_check_base_class_offset(lv, (S20711C4*), 0, "S20711C9");
    check_base_class_offset(lv, (S5643C2*)(S20711C10*), ABISELECT(1152,848), "S20711C9");
    check_base_class_offset(lv, (S20711C10*), ABISELECT(1136,844), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C8 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C8*), ABISELECT(2752,2012), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C8 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C8*), ABISELECT(2768,2024), "S20711C9");
    /*is_ambiguous_... S20711C11::S20711C8 */ AMB_check_base_class_offset(lv, (S20711C8*)(S20711C11*), ABISELECT(2736,2008), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C7 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C7*), ABISELECT(2896,2112), "S20711C9");
    /*is_ambiguous_... S20711C11::S20711C7 */ AMB_check_base_class_offset(lv, (S20711C7*)(S20711C11*), ABISELECT(2880,2108), "S20711C9");
    check_base_class_offset(lv, (S239C12_nt*)(S20711C11*), ABISELECT(1280,948), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S20711C4*)(S20711C2*), ABISELECT(2912,2124), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C7*)(S20711C2*), ABISELECT(4064,2972), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S20711C7*)(S20711C2*), ABISELECT(4048,2968), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C8*)(S20711C2*), ABISELECT(4096,2988), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C8*)(S20711C2*), ABISELECT(4112,3000), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S20711C8*)(S20711C2*), ABISELECT(4080,2984), "S20711C9");
    check_base_class_offset(lv, (S20711C2*)(S20711C11*), ABISELECT(2912,2124), "S20711C9");
    check_base_class_offset(lv, (S20711C11*), ABISELECT(1280,948), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S20711C4*)(S20711C2*), ABISELECT(1296,952), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C7*)(S20711C2*), ABISELECT(2448,1800), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S20711C7*)(S20711C2*), ABISELECT(2432,1796), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C8*)(S20711C2*), ABISELECT(2480,1816), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C8*)(S20711C2*), ABISELECT(2496,1828), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S20711C8*)(S20711C2*), ABISELECT(2464,1812), "S20711C9");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S20711C2*), ABISELECT(1296,952), "S20711C9");
    test_class_info(&lv, &cd_S20711C9);
    dp->~S20711C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20711C9(Test_S20711C9, "S20711C9", ABISELECT(4224,3084));

#else // __cplusplus

extern void _ZN8S20711C9C1Ev();
extern void _ZN8S20711C9D2Ev();
Name_Map name_map_S20711C9[] = {
  NSPAIR(_ZN8S20711C9C1Ev),
  NSPAIR(_ZN8S20711C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S20711C4;
extern VTBL_ENTRY _ZTI8S20711C4[];
extern  VTBL_ENTRY _ZTV8S20711C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C4[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C10;
extern VTBL_ENTRY _ZTI9S20711C10[];
extern  VTBL_ENTRY _ZTV9S20711C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C10[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C8;
extern VTBL_ENTRY _ZTI8S20711C8[];
extern  VTBL_ENTRY _ZTV8S20711C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S20711C7;
extern VTBL_ENTRY _ZTI8S20711C7[];
extern  VTBL_ENTRY _ZTV8S20711C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C7[];
extern Class_Descriptor cd_S239C12_nt;
extern VTBL_ENTRY _ZTI10S239C12_nt[];
extern Class_Descriptor cd_S20711C4;
extern VTBL_ENTRY _ZTI8S20711C4[];
extern  VTBL_ENTRY _ZTV8S20711C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S20711C7;
extern VTBL_ENTRY _ZTI8S20711C7[];
extern  VTBL_ENTRY _ZTV8S20711C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C7[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C8;
extern VTBL_ENTRY _ZTI8S20711C8[];
extern  VTBL_ENTRY _ZTV8S20711C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C8[];
extern Class_Descriptor cd_S20711C2;
extern VTBL_ENTRY _ZTI8S20711C2[];
extern  VTBL_ENTRY _ZTV8S20711C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C2[];
extern Class_Descriptor cd_S20711C11;
extern VTBL_ENTRY _ZTI9S20711C11[];
extern  VTBL_ENTRY _ZTV9S20711C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C11[];
extern Class_Descriptor cd_S20711C4;
extern VTBL_ENTRY _ZTI8S20711C4[];
extern  VTBL_ENTRY _ZTV8S20711C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S20711C7;
extern VTBL_ENTRY _ZTI8S20711C7[];
extern  VTBL_ENTRY _ZTV8S20711C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C7[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C8;
extern VTBL_ENTRY _ZTI8S20711C8[];
extern  VTBL_ENTRY _ZTV8S20711C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C8[];
extern Class_Descriptor cd_S20711C2;
extern VTBL_ENTRY _ZTI8S20711C2[];
extern  VTBL_ENTRY _ZTV8S20711C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C2[];
static Base_Class bases_S20711C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(2608,1912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(2624,1924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C4,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C2,    ABISELECT(1152,848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C10,    ABISELECT(1136,844), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C3_nt,    ABISELECT(2752,2012), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(2768,2024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C8,    ABISELECT(2736,2008), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S5643C3_nt,    ABISELECT(2896,2112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C7,    ABISELECT(2880,2108), //bcp->offset
    44, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S239C12_nt,    ABISELECT(1280,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
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20711C4,    ABISELECT(2912,2124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(4064,2972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C7,    ABISELECT(4048,2968), //bcp->offset
    59, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(4096,2988), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(4112,3000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C8,    ABISELECT(4080,2984), //bcp->offset
    65, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20711C2,    ABISELECT(2912,2124), //bcp->offset
    51, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S20711C11,    ABISELECT(1280,948), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20711C4,    ABISELECT(1296,952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(2448,1800), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C7,    ABISELECT(2432,1796), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(2480,1816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(2496,1828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C8,    ABISELECT(2464,1812), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20711C2,    ABISELECT(1296,952), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20711C9[];
extern void _ZN8S20711C9D1Ev();
extern void _ZN8S20711C9D0Ev();
extern void ABISELECT(_ZThn1136_N8S20711C9D1Ev,_ZThn844_N8S20711C9D1Ev)();
extern void ABISELECT(_ZThn1136_N8S20711C9D0Ev,_ZThn844_N8S20711C9D0Ev)();
extern void ABISELECT(_ZThn1280_N8S20711C9D1Ev,_ZThn948_N8S20711C9D1Ev)();
extern void ABISELECT(_ZThn1280_N8S20711C9D0Ev,_ZThn948_N8S20711C9D0Ev)();
extern void ABISELECT(_ZThn1296_N8S20711C9D1Ev,_ZThn952_N8S20711C9D1Ev)();
extern void ABISELECT(_ZThn1296_N8S20711C9D0Ev,_ZThn952_N8S20711C9D0Ev)();
extern void ABISELECT(_ZThn2432_N8S20711C9D1Ev,_ZThn1796_N8S20711C9D1Ev)();
extern void ABISELECT(_ZThn2432_N8S20711C9D0Ev,_ZThn1796_N8S20711C9D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20711C9D1Ev,_ZTv0_n20_N8S20711C9D1Ev)();
extern void ABISELECT(_ZThn2880_N8S20711C9D1Ev,_ZThn2108_N8S20711C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20711C9D0Ev,_ZTv0_n20_N8S20711C9D0Ev)();
extern void ABISELECT(_ZThn2880_N8S20711C9D0Ev,_ZThn2108_N8S20711C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20711C9D1Ev,_ZTv0_n24_N8S20711C9D1Ev)();
extern void ABISELECT(_ZThn2912_N8S20711C9D1Ev,_ZThn2124_N8S20711C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20711C9D0Ev,_ZTv0_n24_N8S20711C9D0Ev)();
extern void ABISELECT(_ZThn2912_N8S20711C9D0Ev,_ZThn2124_N8S20711C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n48_N8S20711C9D1Ev,_ZTvn844_n24_N8S20711C9D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S20711C9D0Ev,_ZTvn844_n24_N8S20711C9D0Ev)();
static  VTBL_ENTRY vtc_S20711C9[] = {
  ABISELECT(2912,2124),
  ABISELECT(2880,2108),
  ABISELECT(2736,2008),
  0,
  ABISELECT(2624,1924),
  ABISELECT(2608,1912),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&_ZN8S20711C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C9D0Ev,
  ABISELECT(1472,1068),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C9D1Ev,_ZThn844_N8S20711C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C9D0Ev,_ZThn844_N8S20711C9D0Ev),
  ABISELECT(1328,964),
  ABISELECT(1632,1176),
  ABISELECT(1344,976),
  ABISELECT(1600,1160),
  ABISELECT(-1280,-948),
  ABISELECT(1456,1060),
  ABISELECT(-1280,-948),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S20711C9D1Ev,_ZThn948_N8S20711C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S20711C9D0Ev,_ZThn948_N8S20711C9D0Ev),
  ABISELECT(-1296,-952),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  ABISELECT(-1296,-952),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S20711C9D1Ev,_ZThn952_N8S20711C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S20711C9D0Ev,_ZThn952_N8S20711C9D0Ev),
  ABISELECT(192,128),
  ABISELECT(-2432,-1796),
  ABISELECT(-2432,-1796),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2432_N8S20711C9D1Ev,_ZThn1796_N8S20711C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2432_N8S20711C9D0Ev,_ZThn1796_N8S20711C9D0Ev),
  ABISELECT(-2464,-1812),
  ABISELECT(-2464,-1812),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  ABISELECT(-2736,-2008),
  ABISELECT(-2736,-2008),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  ABISELECT(-2880,-2108),
  ABISELECT(-256,-184),
  ABISELECT(-2880,-2108),
  ABISELECT(-2880,-2108),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20711C9D1Ev,_ZTv0_n20_N8S20711C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20711C9D0Ev,_ZTv0_n20_N8S20711C9D0Ev),
  ABISELECT(-2912,-2124),
  ABISELECT(-2912,-2124),
  ABISELECT(-288,-200),
  ABISELECT(-304,-212),
  ABISELECT(-2912,-2124),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20711C9D1Ev,_ZTv0_n24_N8S20711C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20711C9D0Ev,_ZTv0_n24_N8S20711C9D0Ev),
  ABISELECT(-1424,-1044),
  ABISELECT(-4048,-2968),
  ABISELECT(-4048,-2968),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S20711C9D1Ev,_ZTvn844_n24_N8S20711C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S20711C9D0Ev,_ZTvn844_n24_N8S20711C9D0Ev),
  ABISELECT(-4080,-2984),
  ABISELECT(-4080,-2984),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
};
extern VTBL_ENTRY _ZTV8S20711C9[];
static  VTBL_ENTRY _tg__ZTV8S20711C4__8S20711C9[] = {
  0,
  ABISELECT(2624,1924),
  ABISELECT(2608,1912),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C4[0]),
};
extern void _ZN9S20711C10D1Ev();
extern void _ZN9S20711C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20711C10__8S20711C9[] = {
  ABISELECT(1472,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C10[0]),
  (VTBL_ENTRY)&_ZN9S20711C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20711C10D0Ev,
};
extern void _ZN9S20711C11D1Ev();
extern void _ZN9S20711C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20711C11__8S20711C9[] = {
  ABISELECT(1328,964),
  ABISELECT(1632,1176),
  ABISELECT(1344,976),
  ABISELECT(1600,1160),
  ABISELECT(-1280,-948),
  ABISELECT(1456,1060),
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
  (VTBL_ENTRY)&_ZN9S20711C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20711C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__9S20711C11__8S20711C9[] = {
  ABISELECT(-2736,-2008),
  ABISELECT(-1456,-1060),
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S20711C11D1Ev,_ZTv0_n20_N9S20711C11D1Ev)();
extern void ABISELECT(_ZThn1600_N9S20711C11D1Ev,_ZThn1160_N9S20711C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20711C11D0Ev,_ZTv0_n20_N9S20711C11D0Ev)();
extern void ABISELECT(_ZThn1600_N9S20711C11D0Ev,_ZThn1160_N9S20711C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20711C7__9S20711C11__8S20711C9[] = {
  ABISELECT(-1600,-1160),
  ABISELECT(-256,-184),
  ABISELECT(-2880,-2108),
  ABISELECT(-1600,-1160),
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C11D1Ev,_ZTv0_n20_N9S20711C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C11D0Ev,_ZTv0_n20_N9S20711C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20711C11D1Ev,_ZTv0_n24_N9S20711C11D1Ev)();
extern void ABISELECT(_ZThn1632_N9S20711C11D1Ev,_ZThn1176_N9S20711C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20711C11D0Ev,_ZTv0_n24_N9S20711C11D0Ev)();
extern void ABISELECT(_ZThn1632_N9S20711C11D0Ev,_ZThn1176_N9S20711C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20711C2__9S20711C11__8S20711C9[] = {
  ABISELECT(-1632,-1176),
  ABISELECT(-2912,-2124),
  ABISELECT(-288,-200),
  ABISELECT(-304,-212),
  ABISELECT(-1632,-1176),
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20711C11D1Ev,_ZTv0_n24_N9S20711C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20711C11D0Ev,_ZTv0_n24_N9S20711C11D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N9S20711C11D1Ev,_ZTvn844_n24_N9S20711C11D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N9S20711C11D0Ev,_ZTvn844_n24_N9S20711C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20711C78S20711C2__A1__9S20711C11__8S20711C9[] = {
  ABISELECT(-1424,-1044),
  ABISELECT(-4048,-2968),
  ABISELECT(-2768,-2020),
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N9S20711C11D1Ev,_ZTvn844_n24_N9S20711C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N9S20711C11D0Ev,_ZTvn844_n24_N9S20711C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20711C88S20711C2__A1__9S20711C11__8S20711C9[] = {
  ABISELECT(-4080,-2984),
  ABISELECT(-2800,-2036),
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
};
extern void _ZN8S20711C2D1Ev();
extern void _ZN8S20711C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C2__A__8S20711C9[] = {
  ABISELECT(-1296,-952),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
  (VTBL_ENTRY)&_ZN8S20711C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C48S20711C2__A2__8S20711C9[] = {
  ABISELECT(-1296,-952),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C4[0]),
};
extern void _ZN8S20711C7D1Ev();
extern void _ZN8S20711C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C78S20711C2__A2__8S20711C9[] = {
  ABISELECT(192,128),
  ABISELECT(-2432,-1796),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C7[0]),
  (VTBL_ENTRY)&_ZN8S20711C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C88S20711C2__A2__8S20711C9[] = {
  ABISELECT(-2464,-1812),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C8[0]),
};
extern void ABISELECT(_ZThn1136_N8S20711C2D1Ev,_ZThn844_N8S20711C2D1Ev)();
extern void ABISELECT(_ZThn1136_N8S20711C2D0Ev,_ZThn844_N8S20711C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20711C7__8S20711C2__A__8S20711C9[] = {
  ABISELECT(192,128),
  ABISELECT(-2432,-1796),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C2D1Ev,_ZThn844_N8S20711C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C2D0Ev,_ZThn844_N8S20711C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__8S20711C2__A__8S20711C9[] = {
  ABISELECT(-2464,-1812),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__8S20711C9[] = {
  ABISELECT(-2736,-2008),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C8[0]),
};
extern void _ZN8S20711C7D1Ev();
extern void _ZN8S20711C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C7__8S20711C9[] = {
  ABISELECT(-256,-184),
  ABISELECT(-2880,-2108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C7[0]),
  (VTBL_ENTRY)&_ZN8S20711C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C7D0Ev,
};
extern void _ZN8S20711C2D1Ev();
extern void _ZN8S20711C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C2__8S20711C9[] = {
  ABISELECT(-2912,-2124),
  ABISELECT(-288,-200),
  ABISELECT(-304,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
  (VTBL_ENTRY)&_ZN8S20711C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C48S20711C2__A1__8S20711C9[] = {
  ABISELECT(-2912,-2124),
  ABISELECT(-288,-200),
  ABISELECT(-304,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C4[0]),
};
extern void _ZN8S20711C7D1Ev();
extern void _ZN8S20711C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C78S20711C2__A1__8S20711C9[] = {
  ABISELECT(-1424,-1044),
  ABISELECT(-4048,-2968),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C7[0]),
  (VTBL_ENTRY)&_ZN8S20711C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C88S20711C2__A1__8S20711C9[] = {
  ABISELECT(-4080,-2984),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C8[0]),
};
extern void ABISELECT(_ZThn1136_N8S20711C2D1Ev,_ZThn844_N8S20711C2D1Ev)();
extern void ABISELECT(_ZThn1136_N8S20711C2D0Ev,_ZThn844_N8S20711C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20711C7__8S20711C2__8S20711C9[] = {
  ABISELECT(-1424,-1044),
  ABISELECT(-4048,-2968),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C2D1Ev,_ZThn844_N8S20711C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C2D0Ev,_ZThn844_N8S20711C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__8S20711C2__8S20711C9[] = {
  ABISELECT(-4080,-2984),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
};
static  VTT_ENTRY vtt_S20711C9[] = {
  {&(_ZTV8S20711C9[8]),  8,68},
  {&(_tg__ZTV8S20711C4__8S20711C9[5]),  5,5},
  {&(_tg__ZTV9S20711C10__8S20711C9[3]),  3,5},
  {&(_tg__ZTV9S20711C11__8S20711C9[8]),  8,10},
  {&(_tg__ZTV8S20711C8__9S20711C11__8S20711C9[3]),  3,3},
  {&(_tg__ZTV8S20711C7__9S20711C11__8S20711C9[5]),  5,7},
  {&(_tg__ZTV8S20711C2__9S20711C11__8S20711C9[6]),  6,8},
  {&(_tg__ZTV8S20711C78S20711C2__A1__9S20711C11__8S20711C9[4]),  4,6},
  {&(_tg__ZTV8S20711C88S20711C2__A1__9S20711C11__8S20711C9[3]),  3,3},
  {&(_tg__ZTV8S20711C2__A__8S20711C9[5]),  5,7},
  {&(_tg__ZTV8S20711C48S20711C2__A2__8S20711C9[5]),  5,5},
  {&(_tg__ZTV8S20711C78S20711C2__A2__8S20711C9[4]),  4,6},
  {&(_tg__ZTV8S20711C88S20711C2__A2__8S20711C9[3]),  3,3},
  {&(_tg__ZTV8S20711C7__8S20711C2__A__8S20711C9[4]),  4,6},
  {&(_tg__ZTV8S20711C8__8S20711C2__A__8S20711C9[3]),  3,3},
  {&(_ZTV8S20711C9[13]),  13,68},
  {&(_ZTV8S20711C9[23]),  23,68},
  {&(_ZTV8S20711C9[44]),  44,68},
  {&(_ZTV8S20711C9[49]),  49,68},
  {&(_ZTV8S20711C9[57]),  57,68},
  {&(_ZTV8S20711C9[63]),  63,68},
  {&(_ZTV8S20711C9[68]),  68,68},
  {&(_ZTV8S20711C9[30]),  30,68},
  {&(_ZTV8S20711C9[36]),  36,68},
  {&(_ZTV8S20711C9[41]),  41,68},
  {&(_tg__ZTV8S20711C8__8S20711C9[3]),  3,3},
  {&(_tg__ZTV8S20711C7__8S20711C9[4]),  4,6},
  {&(_tg__ZTV8S20711C2__8S20711C9[5]),  5,7},
  {&(_tg__ZTV8S20711C48S20711C2__A1__8S20711C9[5]),  5,5},
  {&(_tg__ZTV8S20711C78S20711C2__A1__8S20711C9[4]),  4,6},
  {&(_tg__ZTV8S20711C88S20711C2__A1__8S20711C9[3]),  3,3},
  {&(_tg__ZTV8S20711C7__8S20711C2__8S20711C9[4]),  4,6},
  {&(_tg__ZTV8S20711C8__8S20711C2__8S20711C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20711C9[];
extern  VTBL_ENTRY _ZTV8S20711C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C9[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20711C11D0Ev,_ZTv0_n24_N9S20711C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N9S20711C11D0Ev,_ZThn1176_N9S20711C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20711C11D1Ev,_ZTv0_n24_N9S20711C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N9S20711C11D1Ev,_ZThn1176_N9S20711C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20711C11D0Ev,_ZTv0_n20_N9S20711C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1600_N9S20711C11D0Ev,_ZThn1160_N9S20711C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20711C11D1Ev,_ZTv0_n20_N9S20711C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1600_N9S20711C11D1Ev,_ZThn1160_N9S20711C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20711C9D0Ev,_ZTv0_n24_N8S20711C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2912_N8S20711C9D0Ev,_ZThn2124_N8S20711C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20711C9D1Ev,_ZTv0_n24_N8S20711C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2912_N8S20711C9D1Ev,_ZThn2124_N8S20711C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20711C9D0Ev,_ZTv0_n20_N8S20711C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2880_N8S20711C9D0Ev,_ZThn2108_N8S20711C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20711C9D1Ev,_ZTv0_n20_N8S20711C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2880_N8S20711C9D1Ev,_ZThn2108_N8S20711C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20711C9 = {  "S20711C9", // class name
  bases_S20711C9, 27,
  &(vtc_S20711C9[0]), // expected_vtbl_contents
  &(vtt_S20711C9[0]), // expected_vtt_contents
  ABISELECT(4224,3084), // object size
  NSPAIRA(_ZTI8S20711C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20711C9),68, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20711C9),33, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20711C13  : virtual S5408C7_nt , virtual S20711C7 , virtual S20711C8 , S5643C3_nt {
  ~S20711C13(); // tgen
  S20711C13(); // tgen
};
//SIG(-1 S20711C13) C1{ VBC2{ m} VBC3{ BC4{ m FD} VBC2 VBC5{ m FC4[7]} vd} VBC6{ BC4 BC5 VBC2} BC4}


S20711C13 ::~S20711C13(){ note_dtor("S20711C13", this);} // tgen
S20711C13 ::S20711C13(){ note_ctor("S20711C13", this);} // tgen

static void Test_S20711C13()
{
  extern Class_Descriptor cd_S20711C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,55)];
    init_test(&cd_S20711C13, buf);
    S20711C13 *dp, &lv = *(dp=new (buf) S20711C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,216), "sizeof(S20711C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20711C13)");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S20711C13");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C7*), 0, "S20711C13");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C8*), 0, "S20711C13");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C7*), ABISELECT(48,20), "S20711C13");
    check_base_class_offset(lv, (S5643C2*)(S20711C7*), ABISELECT(64,32), "S20711C13");
    check_base_class_offset(lv, (S20711C7*), ABISELECT(32,16), "S20711C13");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C8*), ABISELECT(192,120), "S20711C13");
    check_base_class_offset(lv, (S5643C2*)(S20711C8*), ABISELECT(208,132), "S20711C13");
    check_base_class_offset(lv, (S20711C8*), ABISELECT(176,116), "S20711C13");
    /*is_ambiguous_... S20711C13::S5643C3_nt */ AMB_check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(16,4), "S20711C13");
    test_class_info(&lv, &cd_S20711C13);
    dp->~S20711C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20711C13(Test_S20711C13, "S20711C13", ABISELECT(320,216));

#else // __cplusplus

extern void _ZN9S20711C13C1Ev();
extern void _ZN9S20711C13D1Ev();
Name_Map name_map_S20711C13[] = {
  NSPAIR(_ZN9S20711C13C1Ev),
  NSPAIR(_ZN9S20711C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C7;
extern VTBL_ENTRY _ZTI8S20711C7[];
extern  VTBL_ENTRY _ZTV8S20711C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C7[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C8;
extern VTBL_ENTRY _ZTI8S20711C8[];
extern  VTBL_ENTRY _ZTV8S20711C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
static Base_Class bases_S20711C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5643C3_nt,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5643C2,    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_S20711C7,    ABISELECT(32,16), //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(192,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
    6, //immediately_derived
  0, 0},
  {&cd_S5643C2,    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
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20711C8,    ABISELECT(176,116), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    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 _ZTI9S20711C13[];
extern void _ZN9S20711C13D1Ev();
extern void _ZN9S20711C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S20711C13D1Ev,_ZTv0_n20_N9S20711C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S20711C13D1Ev,_ZThn16_N9S20711C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20711C13D0Ev,_ZTv0_n20_N9S20711C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S20711C13D0Ev,_ZThn16_N9S20711C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20711C13[] = {
  ABISELECT(176,116),
  ABISELECT(64,32),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C13[0]),
  (VTBL_ENTRY)&_ZN9S20711C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20711C13D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20711C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C13D1Ev,_ZTv0_n20_N9S20711C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C13D0Ev,_ZTv0_n20_N9S20711C13D0Ev),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI9S20711C13[0]),
};
extern VTBL_ENTRY _ZTV9S20711C13[];
extern void _ZN8S20711C7D1Ev();
extern void _ZN8S20711C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C7__9S20711C13[] = {
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C7[0]),
  (VTBL_ENTRY)&_ZN8S20711C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__9S20711C13[] = {
  ABISELECT(-176,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C8[0]),
};
static  VTT_ENTRY vtt_S20711C13[] = {
  {&(_ZTV9S20711C13[6]),  6,18},
  {&(_ZTV9S20711C13[13]),  13,18},
  {&(_ZTV9S20711C13[18]),  18,18},
  {&(_tg__ZTV8S20711C7__9S20711C13[4]),  4,6},
  {&(_tg__ZTV8S20711C8__9S20711C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20711C13[];
extern  VTBL_ENTRY _ZTV9S20711C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C13[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20711C13D0Ev,_ZTv0_n20_N9S20711C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20711C13D0Ev,_ZThn16_N9S20711C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20711C13D1Ev,_ZTv0_n20_N9S20711C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20711C13D1Ev,_ZThn16_N9S20711C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20711C13 = {  "S20711C13", // class name
  bases_S20711C13, 8,
  &(vtc_S20711C13[0]), // expected_vtbl_contents
  &(vtt_S20711C13[0]), // expected_vtt_contents
  ABISELECT(320,216), // object size
  NSPAIRA(_ZTI9S20711C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20711C13),18, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20711C13),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20711C15  : virtual S5643C2 , virtual S20711C4 , virtual S20711C8 , S5408C7_nt {
  ::S5408C7_nt s20711c15f0;
  ~S20711C15(); // tgen
  S20711C15(); // tgen
};
//SIG(-1 S20711C15) C1{ VBC2{ m FC3{ m FD}[7]} VBC4{ VBC3 VBC2 VBC5{ m} FC2[10]} VBC6{ BC3 BC2 VBC5} BC5 FC5}


S20711C15 ::~S20711C15(){ note_dtor("S20711C15", this);} // tgen
S20711C15 ::S20711C15(){ note_ctor("S20711C15", this);} // tgen

static void Test_S20711C15()
{
  extern Class_Descriptor cd_S20711C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,263)];
    init_test(&cd_S20711C15, buf);
    S20711C15 *dp, &lv = *(dp=new (buf) S20711C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1048), "sizeof(S20711C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20711C15)");
    /*is_ambiguous_... S20711C15::S5643C2 */ AMB_check_base_class_offset(lv, (S5643C2*), ABISELECT(16,8), "S20711C15");
    check_base_class_offset(lv, (S5643C2*)(S20711C4*), ABISELECT(16,8), "S20711C15");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C4*), ABISELECT(1264,936), "S20711C15");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C4*), ABISELECT(1280,948), "S20711C15");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C8*), ABISELECT(1280,948), "S20711C15");
    check_base_class_offset(lv, (S20711C4*), ABISELECT(128,92), "S20711C15");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C8*), ABISELECT(1296,952), "S20711C15");
    check_base_class_offset(lv, (S5643C2*)(S20711C8*), ABISELECT(1312,964), "S20711C15");
    check_base_class_offset(lv, (S20711C8*), ABISELECT(1280,948), "S20711C15");
    /*is_ambiguous_... S20711C15::S5408C7_nt */ AMB_check_base_class_offset(lv, (S5408C7_nt*), 0, "S20711C15");
    check_field_offset(lv, s20711c15f0, ABISELECT(8,4), "S20711C15.s20711c15f0");
    test_class_info(&lv, &cd_S20711C15);
    dp->~S20711C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20711C15(Test_S20711C15, "S20711C15", ABISELECT(1424,1048));

#else // __cplusplus

extern void _ZN9S20711C15C1Ev();
extern void _ZN9S20711C15D1Ev();
Name_Map name_map_S20711C15[] = {
  NSPAIR(_ZN9S20711C15C1Ev),
  NSPAIR(_ZN9S20711C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S20711C4;
extern VTBL_ENTRY _ZTI8S20711C4[];
extern  VTBL_ENTRY _ZTV8S20711C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C8;
extern VTBL_ENTRY _ZTI8S20711C8[];
extern  VTBL_ENTRY _ZTV8S20711C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C8[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
static Base_Class bases_S20711C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C2,    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, 1},
  {&cd_S5643C3_nt,    ABISELECT(1264,936), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5408C7_nt,    ABISELECT(1280,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
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20711C4,    ABISELECT(128,92), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(1296,952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1312,964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C8,    ABISELECT(1280,948), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20711C15[];
static  VTBL_ENTRY vtc_S20711C15[] = {
  ABISELECT(1280,948),
  ABISELECT(1280,948),
  ABISELECT(1264,936),
  ABISELECT(128,92),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C15[0]),
  ABISELECT(1152,856),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI9S20711C15[0]),
  0,
  ABISELECT(-1280,-948),
  (VTBL_ENTRY)&(_ZTI9S20711C15[0]),
};
extern VTBL_ENTRY _ZTV9S20711C15[];
static  VTBL_ENTRY _tg__ZTV8S20711C4__9S20711C15[] = {
  ABISELECT(1152,856),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__9S20711C15[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C8[0]),
};
static  VTT_ENTRY vtt_S20711C15[] = {
  {&(_ZTV9S20711C15[7]),  7,15},
  {&(_ZTV9S20711C15[12]),  12,15},
  {&(_ZTV9S20711C15[15]),  15,15},
  {&(_tg__ZTV8S20711C4__9S20711C15[5]),  5,5},
  {&(_tg__ZTV8S20711C8__9S20711C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20711C15[];
extern  VTBL_ENTRY _ZTV9S20711C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C15[];
Class_Descriptor cd_S20711C15 = {  "S20711C15", // class name
  bases_S20711C15, 8,
  &(vtc_S20711C15[0]), // expected_vtbl_contents
  &(vtt_S20711C15[0]), // expected_vtt_contents
  ABISELECT(1424,1048), // object size
  NSPAIRA(_ZTI9S20711C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20711C15),15, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20711C15),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  S20711C16  : S20711C7 {
  virtual  ~S20711C16(); // _ZN9S20711C16D2Ev
  S20711C16(); // tgen
};
//SIG(-1 S20711C16) C1{ BC2{ BC3{ m FD} VBC4{ m} VBC5{ m FC3[7]} vd} vd}


 S20711C16 ::~S20711C16(){ note_dtor("S20711C16", this);}
S20711C16 ::S20711C16(){ note_ctor("S20711C16", this);} // tgen

static void Test_S20711C16()
{
  extern Class_Descriptor cd_S20711C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,26)];
    init_test(&cd_S20711C16, buf);
    S20711C16 *dp, &lv = *(dp=new (buf) S20711C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S20711C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20711C16)");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C7*), ABISELECT(16,4), "S20711C16");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C7*), 0, "S20711C16");
    check_base_class_offset(lv, (S5643C2*)(S20711C7*), ABISELECT(32,16), "S20711C16");
    check_base_class_offset(lv, (S20711C7*), 0, "S20711C16");
    test_class_info(&lv, &cd_S20711C16);
    dp->~S20711C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20711C16(Test_S20711C16, "S20711C16", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN9S20711C16C1Ev();
extern void _ZN9S20711C16D2Ev();
Name_Map name_map_S20711C16[] = {
  NSPAIR(_ZN9S20711C16C1Ev),
  NSPAIR(_ZN9S20711C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C7;
extern VTBL_ENTRY _ZTI8S20711C7[];
extern  VTBL_ENTRY _ZTV8S20711C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C7[];
static Base_Class bases_S20711C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    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
    3, //immediately_derived
  0, 0},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    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, 1},
  {&cd_S20711C7,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20711C16[];
extern void _ZN9S20711C16D1Ev();
extern void _ZN9S20711C16D0Ev();
static  VTBL_ENTRY vtc_S20711C16[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C16[0]),
  (VTBL_ENTRY)&_ZN9S20711C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20711C16D0Ev,
};
extern VTBL_ENTRY _ZTV9S20711C16[];
extern void _ZN8S20711C7D1Ev();
extern void _ZN8S20711C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C7__9S20711C16[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C7[0]),
  (VTBL_ENTRY)&_ZN8S20711C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C7D0Ev,
};
static  VTT_ENTRY vtt_S20711C16[] = {
  {&(_ZTV9S20711C16[4]),  4,6},
  {&(_tg__ZTV8S20711C7__9S20711C16[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20711C16[];
extern  VTBL_ENTRY _ZTV9S20711C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C16[];
Class_Descriptor cd_S20711C16 = {  "S20711C16", // class name
  bases_S20711C16, 4,
  &(vtc_S20711C16[0]), // expected_vtbl_contents
  &(vtt_S20711C16[0]), // expected_vtt_contents
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI9S20711C16),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20711C16),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20711C16),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  S20711C14  : virtual S20711C7 , virtual S20711C4 , S20711C15 , virtual S20711C16 {
  virtual  ~S20711C14(); // _ZN9S20711C14D2Ev
  S20711C14(); // tgen
};
//SIG(-1 S20711C14) C1{ VBC2{ BC3{ m FD} VBC4{ m} VBC5{ m FC3[7]} vd} VBC6{ VBC3 VBC5 VBC4 FC5[10]} BC7{ VBC5 VBC6 VBC8{ BC3 BC5 VBC4} BC4 FC4} VBC9{ BC2 vd} vd}


 S20711C14 ::~S20711C14(){ note_dtor("S20711C14", this);}
S20711C14 ::S20711C14(){ note_ctor("S20711C14", this);} // tgen

static void Test_S20711C14()
{
  extern Class_Descriptor cd_S20711C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(94,271)];
    init_test(&cd_S20711C14, buf);
    S20711C14 *dp, &lv = *(dp=new (buf) S20711C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1488,1080), "sizeof(S20711C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20711C14)");
    /*is_ambiguous_... S20711C14::S20711C7 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C7*), ABISELECT(32,12), "S20711C14");
    /*is_ambiguous_... S20711C14::S20711C7 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C7*), ABISELECT(48,24), "S20711C14");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C4*), ABISELECT(48,24), "S20711C14");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C8*), ABISELECT(48,24), "S20711C14");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C7*)(S20711C16*), ABISELECT(48,24), "S20711C14");
    /*is_ambiguous_... S20711C14::S20711C7 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C7*), ABISELECT(48,24), "S20711C14");
    check_base_class_offset(lv, (S5643C2*)(S20711C4*), ABISELECT(48,24), "S20711C14");
    /*is_ambiguous_... S20711C15::S5643C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C15*), ABISELECT(48,24), "S20711C14");
    check_base_class_offset(lv, (S5643C2*)(S20711C7*)(S20711C16*), ABISELECT(48,24), "S20711C14");
    /*is_ambiguous_... S20711C14::S20711C7 */ AMB_check_base_class_offset(lv, (S20711C7*), ABISELECT(16,8), "S20711C14");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C4*), ABISELECT(1296,952), "S20711C14");
    check_base_class_offset(lv, (S20711C4*), ABISELECT(160,108), "S20711C14");
    check_base_class_offset(lv, (S20711C4*)(S20711C15*), ABISELECT(160,108), "S20711C14");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C8*), ABISELECT(1328,968), "S20711C14");
    check_base_class_offset(lv, (S5643C2*)(S20711C8*), ABISELECT(1344,980), "S20711C14");
    check_base_class_offset(lv, (S20711C8*)(S20711C15*), ABISELECT(1312,964), "S20711C14");
    /*is_ambiguous_... S20711C15::S5408C7_nt */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C15*), 0, "S20711C14");
    check_base_class_offset(lv, (S20711C15*), 0, "S20711C14");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C7*)(S20711C16*), ABISELECT(1472,1068), "S20711C14");
    check_base_class_offset(lv, (S20711C7*)(S20711C16*), ABISELECT(1456,1064), "S20711C14");
    check_base_class_offset(lv, (S20711C16*), ABISELECT(1456,1064), "S20711C14");
    test_class_info(&lv, &cd_S20711C14);
    dp->~S20711C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20711C14(Test_S20711C14, "S20711C14", ABISELECT(1488,1080));

#else // __cplusplus

extern void _ZN9S20711C14C1Ev();
extern void _ZN9S20711C14D2Ev();
Name_Map name_map_S20711C14[] = {
  NSPAIR(_ZN9S20711C14C1Ev),
  NSPAIR(_ZN9S20711C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C7;
extern VTBL_ENTRY _ZTI8S20711C7[];
extern  VTBL_ENTRY _ZTV8S20711C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C7[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S20711C4;
extern VTBL_ENTRY _ZTI8S20711C4[];
extern  VTBL_ENTRY _ZTV8S20711C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C8;
extern VTBL_ENTRY _ZTI8S20711C8[];
extern  VTBL_ENTRY _ZTV8S20711C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C8[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S20711C15;
extern VTBL_ENTRY _ZTI9S20711C15[];
extern  VTBL_ENTRY _ZTV9S20711C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C15[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S20711C7;
extern VTBL_ENTRY _ZTI8S20711C7[];
extern  VTBL_ENTRY _ZTV8S20711C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C7[];
extern Class_Descriptor cd_S20711C16;
extern VTBL_ENTRY _ZTI9S20711C16[];
extern  VTBL_ENTRY _ZTV9S20711C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C16[];
static Base_Class bases_S20711C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5408C7_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, 1},
  {&cd_S5643C2,    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_S20711C7,    ABISELECT(16,8), //bcp->offset
    11, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(1296,952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C4,    ABISELECT(160,108), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(1328,968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1344,980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C8,    ABISELECT(1312,964), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C3_nt,    ABISELECT(1472,1068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C7,    ABISELECT(1456,1064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20711C16,    ABISELECT(1456,1064), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20711C14[];
extern void _ZN9S20711C14D1Ev();
extern void _ZN9S20711C14D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S20711C14D1Ev,_ZTv0_n20_N9S20711C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S20711C14D1Ev,_ZThn8_N9S20711C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20711C14D0Ev,_ZTv0_n20_N9S20711C14D0Ev)();
extern void ABISELECT(_ZThn16_N9S20711C14D0Ev,_ZThn8_N9S20711C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20711C14D1Ev,_ZTv0_n20_N9S20711C14D1Ev)();
extern void ABISELECT(_ZThn1456_N9S20711C14D1Ev,_ZThn1064_N9S20711C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20711C14D0Ev,_ZTv0_n20_N9S20711C14D0Ev)();
extern void ABISELECT(_ZThn1456_N9S20711C14D0Ev,_ZThn1064_N9S20711C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20711C14[] = {
  ABISELECT(1456,1064),
  ABISELECT(16,8),
  ABISELECT(1312,964),
  ABISELECT(48,24),
  ABISELECT(1296,952),
  ABISELECT(160,108),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C14[0]),
  (VTBL_ENTRY)&_ZN9S20711C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20711C14D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20711C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C14D1Ev,_ZTv0_n20_N9S20711C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C14D0Ev,_ZTv0_n20_N9S20711C14D0Ev),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI9S20711C14[0]),
  ABISELECT(-1264,-940),
  ABISELECT(-1312,-964),
  (VTBL_ENTRY)&(_ZTI9S20711C14[0]),
  ABISELECT(-1456,-1064),
  ABISELECT(-1408,-1040),
  ABISELECT(-1408,-1040),
  ABISELECT(-1456,-1064),
  (VTBL_ENTRY)&(_ZTI9S20711C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C14D1Ev,_ZTv0_n20_N9S20711C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C14D0Ev,_ZTv0_n20_N9S20711C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S20711C14[];
static  VTBL_ENTRY _tg__ZTV9S20711C15__9S20711C14[] = {
  ABISELECT(1312,964),
  ABISELECT(48,24),
  ABISELECT(1296,952),
  ABISELECT(160,108),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20711C4__9S20711C15__9S20711C14[] = {
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI9S20711C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__9S20711C15__9S20711C14[] = {
  ABISELECT(-1264,-940),
  ABISELECT(-1312,-964),
  (VTBL_ENTRY)&(_ZTI9S20711C15[0]),
};
extern void _ZN8S20711C7D1Ev();
extern void _ZN8S20711C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C7__9S20711C14[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C7[0]),
  (VTBL_ENTRY)&_ZN8S20711C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C4__9S20711C14[] = {
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__9S20711C14[] = {
  ABISELECT(-1264,-940),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C8[0]),
};
extern void _ZN9S20711C16D1Ev();
extern void _ZN9S20711C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20711C16__9S20711C14[] = {
  ABISELECT(-1408,-1040),
  ABISELECT(-1408,-1040),
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C16[0]),
  (VTBL_ENTRY)&_ZN9S20711C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20711C16D0Ev,
};
extern void _ZN8S20711C7D1Ev();
extern void _ZN8S20711C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C79S20711C16__A1__9S20711C14[] = {
  ABISELECT(-1408,-1040),
  ABISELECT(-1408,-1040),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C7[0]),
  (VTBL_ENTRY)&_ZN8S20711C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C7D0Ev,
};
static  VTT_ENTRY vtt_S20711C14[] = {
  {&(_ZTV9S20711C14[9]),  9,33},
  {&(_tg__ZTV9S20711C15__9S20711C14[7]),  7,7},
  {&(_tg__ZTV8S20711C4__9S20711C15__9S20711C14[5]),  5,5},
  {&(_tg__ZTV8S20711C8__9S20711C15__9S20711C14[3]),  3,3},
  {&(_ZTV9S20711C14[16]),  16,33},
  {&(_ZTV9S20711C14[23]),  23,33},
  {&(_ZTV9S20711C14[26]),  26,33},
  {&(_ZTV9S20711C14[31]),  31,33},
  {&(_tg__ZTV8S20711C7__9S20711C14[4]),  4,6},
  {&(_tg__ZTV8S20711C4__9S20711C14[5]),  5,5},
  {&(_tg__ZTV8S20711C8__9S20711C14[3]),  3,3},
  {&(_tg__ZTV9S20711C16__9S20711C14[4]),  4,6},
  {&(_tg__ZTV8S20711C79S20711C16__A1__9S20711C14[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20711C14[];
extern  VTBL_ENTRY _ZTV9S20711C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C14[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20711C14D0Ev,_ZTv0_n20_N9S20711C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N9S20711C14D0Ev,_ZThn1064_N9S20711C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20711C14D0Ev,_ZThn8_N9S20711C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20711C14D1Ev,_ZTv0_n20_N9S20711C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N9S20711C14D1Ev,_ZThn1064_N9S20711C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20711C14D1Ev,_ZThn8_N9S20711C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20711C14 = {  "S20711C14", // class name
  bases_S20711C14, 14,
  &(vtc_S20711C14[0]), // expected_vtbl_contents
  &(vtt_S20711C14[0]), // expected_vtt_contents
  ABISELECT(1488,1080), // object size
  NSPAIRA(_ZTI9S20711C14),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20711C14),33, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20711C14),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20711C1  : virtual S20711C2 , S20711C9 , virtual S20711C13 , virtual S20711C14 {
  virtual  ~S20711C1(); // _ZN8S20711C1D2Ev
  S20711C1(); // tgen
};
//SIG(1 S20711C1) C1{ VBC2{ VBC3{ m} BC4{ VBC5{ m FD} VBC6{ m FC5[7]} VBC3 FC6[10]} BC7{ BC5 VBC3 VBC6 vd} BC8{ BC5 BC6 VBC3}} BC9{ BC4 BC10{ VBC5 BC6 vd Fi[4]} BC11{ VBC8 VBC7 BC12{ m} VBC2 vd} BC2 vd} VBC13{ VBC3 VBC7 VBC8 BC5} VBC14{ VBC7 VBC4 BC15{ VBC6 VBC4 VBC8 BC3 FC3} VBC16{ BC7 vd} vd} vd}


 S20711C1 ::~S20711C1(){ note_dtor("S20711C1", this);}
S20711C1 ::S20711C1(){ note_ctor("S20711C1", this);} // tgen

static void Test_S20711C1()
{
  extern Class_Descriptor cd_S20711C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(341,993)];
    init_test(&cd_S20711C1, buf);
    S20711C1 *dp, &lv = *(dp=new (buf) S20711C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5440,3968), "sizeof(S20711C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20711C1)");
    /*is_ambiguous_... S20711C1::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C2*), 0, "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C4*)(S20711C2*), 0, "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C7*)(S20711C2*), 0, "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C8*)(S20711C2*), 0, "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C4 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C4*)(S20711C9*), 0, "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C8 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C8*), 0, "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C7 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C7*), 0, "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C2*)(S20711C9*), 0, "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C4*)(S20711C2*)(S20711C9*), 0, "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C7*)(S20711C2*)(S20711C9*), 0, "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C8*)(S20711C2*)(S20711C9*), 0, "S20711C1");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C13*), 0, "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C4 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C4*), 0, "S20711C1");
    check_base_class_offset(lv, (S5408C7_nt*)(S20711C7*)(S20711C16*), 0, "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C4*)(S20711C2*), ABISELECT(3920,2872), "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C4 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C4*)(S20711C9*), ABISELECT(3920,2872), "S20711C1");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C10*)(S20711C9*), ABISELECT(3920,2872), "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C4*)(S20711C2*)(S20711C9*), ABISELECT(3920,2872), "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C4 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C4*), ABISELECT(3920,2872), "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C4*)(S20711C2*), ABISELECT(3936,2884), "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C7*)(S20711C2*), ABISELECT(3936,2884), "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C4 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C4*)(S20711C9*), ABISELECT(3936,2884), "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C7 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C7*), ABISELECT(3936,2884), "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C4*)(S20711C2*)(S20711C9*), ABISELECT(3936,2884), "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C7*)(S20711C2*)(S20711C9*), ABISELECT(3936,2884), "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C4 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C4*), ABISELECT(3936,2884), "S20711C1");
    /*is_ambiguous_... S20711C15::S5643C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C15*)(S20711C14*), ABISELECT(3936,2884), "S20711C1");
    check_base_class_offset(lv, (S5643C2*)(S20711C7*)(S20711C16*), ABISELECT(3936,2884), "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C2 */ AMB_check_base_class_offset(lv, (S20711C4*)(S20711C2*), ABISELECT(2608,1912), "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C7*)(S20711C2*), ABISELECT(3760,2760), "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C2 */ AMB_check_base_class_offset(lv, (S20711C7*)(S20711C2*), ABISELECT(3744,2756), "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C8*)(S20711C2*), ABISELECT(3792,2776), "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C8*)(S20711C2*), ABISELECT(3808,2788), "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C2 */ AMB_check_base_class_offset(lv, (S20711C8*)(S20711C2*), ABISELECT(3776,2772), "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C2 */ AMB_check_base_class_offset(lv, (S20711C2*), ABISELECT(2608,1912), "S20711C1");
    check_base_class_offset(lv, (S20711C2*)(S20711C11*)(S20711C9*), ABISELECT(2608,1912), "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C4 */ AMB_check_base_class_offset(lv, (S20711C4*)(S20711C9*), 0, "S20711C1");
    check_base_class_offset(lv, (S5643C2*)(S20711C10*)(S20711C9*), ABISELECT(1152,848), "S20711C1");
    check_base_class_offset(lv, (S20711C10*)(S20711C9*), ABISELECT(1136,844), "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C8 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C8*), ABISELECT(4064,2972), "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C8 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C8*), ABISELECT(4080,2984), "S20711C1");
    /*is_ambiguous_... S20711C11::S20711C8 */ AMB_check_base_class_offset(lv, (S20711C8*)(S20711C11*)(S20711C9*), ABISELECT(4048,2968), "S20711C1");
    check_base_class_offset(lv, (S20711C8*)(S20711C13*), ABISELECT(4048,2968), "S20711C1");
    check_base_class_offset(lv, (S20711C8*)(S20711C15*)(S20711C14*), ABISELECT(4048,2968), "S20711C1");
    /*is_ambiguous_... S20711C1::S20711C7 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C7*), ABISELECT(4208,3072), "S20711C1");
    /*is_ambiguous_... S20711C11::S20711C7 */ AMB_check_base_class_offset(lv, (S20711C7*)(S20711C11*)(S20711C9*), ABISELECT(4192,3068), "S20711C1");
    check_base_class_offset(lv, (S20711C7*)(S20711C13*), ABISELECT(4192,3068), "S20711C1");
    /*is_ambiguous_... S20711C14::S20711C7 */ AMB_check_base_class_offset(lv, (S20711C7*)(S20711C14*), ABISELECT(4192,3068), "S20711C1");
    check_base_class_offset(lv, (S239C12_nt*)(S20711C11*)(S20711C9*), ABISELECT(1280,948), "S20711C1");
    check_base_class_offset(lv, (S20711C11*)(S20711C9*), ABISELECT(1280,948), "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S20711C4*)(S20711C2*)(S20711C9*), ABISELECT(1296,952), "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C7*)(S20711C2*)(S20711C9*), ABISELECT(2448,1800), "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S20711C7*)(S20711C2*)(S20711C9*), ABISELECT(2432,1796), "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C8*)(S20711C2*)(S20711C9*), ABISELECT(2480,1816), "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S20711C8*)(S20711C2*)(S20711C9*), ABISELECT(2496,1828), "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S20711C8*)(S20711C2*)(S20711C9*), ABISELECT(2464,1812), "S20711C1");
    /*is_ambiguous_... S20711C9::S20711C2 */ AMB_check_base_class_offset(lv, (S20711C2*)(S20711C9*), ABISELECT(1296,952), "S20711C1");
    check_base_class_offset(lv, (S20711C9*), 0, "S20711C1");
    /*is_ambiguous_... S20711C13::S5643C3_nt */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S20711C13*), ABISELECT(4240,3088), "S20711C1");
    check_base_class_offset(lv, (S20711C13*), ABISELECT(4224,3084), "S20711C1");
    check_base_class_offset(lv, (S20711C4*)(S20711C14*), ABISELECT(4272,3108), "S20711C1");
    check_base_class_offset(lv, (S20711C4*)(S20711C15*)(S20711C14*), ABISELECT(4272,3108), "S20711C1");
    /*is_ambiguous_... S20711C15::S5408C7_nt */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S20711C15*)(S20711C14*), ABISELECT(4256,3100), "S20711C1");
    check_base_class_offset(lv, (S20711C15*)(S20711C14*), ABISELECT(4256,3100), "S20711C1");
    check_base_class_offset(lv, (S5643C3_nt*)(S20711C7*)(S20711C16*), ABISELECT(5424,3956), "S20711C1");
    check_base_class_offset(lv, (S20711C7*)(S20711C16*), ABISELECT(5408,3952), "S20711C1");
    check_base_class_offset(lv, (S20711C16*)(S20711C14*), ABISELECT(5408,3952), "S20711C1");
    check_base_class_offset(lv, (S20711C14*), ABISELECT(4256,3100), "S20711C1");
    test_class_info(&lv, &cd_S20711C1);
    dp->~S20711C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20711C1(Test_S20711C1, "S20711C1", ABISELECT(5440,3968));

#else // __cplusplus

extern void _ZN8S20711C1C1Ev();
extern void _ZN8S20711C1D2Ev();
Name_Map name_map_S20711C1[] = {
  NSPAIR(_ZN8S20711C1C1Ev),
  NSPAIR(_ZN8S20711C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C4;
extern VTBL_ENTRY _ZTI8S20711C4[];
extern  VTBL_ENTRY _ZTV8S20711C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S20711C7;
extern VTBL_ENTRY _ZTI8S20711C7[];
extern  VTBL_ENTRY _ZTV8S20711C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C7[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C8;
extern VTBL_ENTRY _ZTI8S20711C8[];
extern  VTBL_ENTRY _ZTV8S20711C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C8[];
extern Class_Descriptor cd_S20711C2;
extern VTBL_ENTRY _ZTI8S20711C2[];
extern  VTBL_ENTRY _ZTV8S20711C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C2[];
extern Class_Descriptor cd_S20711C4;
extern VTBL_ENTRY _ZTI8S20711C4[];
extern  VTBL_ENTRY _ZTV8S20711C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C4[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C10;
extern VTBL_ENTRY _ZTI9S20711C10[];
extern  VTBL_ENTRY _ZTV9S20711C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C10[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C8;
extern VTBL_ENTRY _ZTI8S20711C8[];
extern  VTBL_ENTRY _ZTV8S20711C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S20711C7;
extern VTBL_ENTRY _ZTI8S20711C7[];
extern  VTBL_ENTRY _ZTV8S20711C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C7[];
extern Class_Descriptor cd_S239C12_nt;
extern VTBL_ENTRY _ZTI10S239C12_nt[];
extern Class_Descriptor cd_S20711C11;
extern VTBL_ENTRY _ZTI9S20711C11[];
extern  VTBL_ENTRY _ZTV9S20711C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C11[];
extern Class_Descriptor cd_S20711C4;
extern VTBL_ENTRY _ZTI8S20711C4[];
extern  VTBL_ENTRY _ZTV8S20711C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S20711C7;
extern VTBL_ENTRY _ZTI8S20711C7[];
extern  VTBL_ENTRY _ZTV8S20711C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C7[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S20711C8;
extern VTBL_ENTRY _ZTI8S20711C8[];
extern  VTBL_ENTRY _ZTV8S20711C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C8[];
extern Class_Descriptor cd_S20711C2;
extern VTBL_ENTRY _ZTI8S20711C2[];
extern  VTBL_ENTRY _ZTV8S20711C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C2[];
extern Class_Descriptor cd_S20711C9;
extern VTBL_ENTRY _ZTI8S20711C9[];
extern  VTBL_ENTRY _ZTV8S20711C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C9[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S20711C13;
extern VTBL_ENTRY _ZTI9S20711C13[];
extern  VTBL_ENTRY _ZTV9S20711C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C13[];
extern Class_Descriptor cd_S20711C4;
extern VTBL_ENTRY _ZTI8S20711C4[];
extern  VTBL_ENTRY _ZTV8S20711C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C4[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S20711C15;
extern VTBL_ENTRY _ZTI9S20711C15[];
extern  VTBL_ENTRY _ZTV9S20711C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C15[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S20711C7;
extern VTBL_ENTRY _ZTI8S20711C7[];
extern  VTBL_ENTRY _ZTV8S20711C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C7[];
extern Class_Descriptor cd_S20711C16;
extern VTBL_ENTRY _ZTI9S20711C16[];
extern  VTBL_ENTRY _ZTV9S20711C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C16[];
extern Class_Descriptor cd_S20711C14;
extern VTBL_ENTRY _ZTI9S20711C14[];
extern  VTBL_ENTRY _ZTV9S20711C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20711C14[];
static Base_Class bases_S20711C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C3_nt,    ABISELECT(3920,2872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(3936,2884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C4,    ABISELECT(2608,1912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(3760,2760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C7,    ABISELECT(3744,2756), //bcp->offset
    53, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(3792,2776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(3808,2788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C8,    ABISELECT(3776,2772), //bcp->offset
    59, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20711C2,    ABISELECT(2608,1912), //bcp->offset
    45, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20711C4,    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
    13, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(1152,848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C10,    ABISELECT(1136,844), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(4064,2972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(4080,2984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C8,    ABISELECT(4048,2968), //bcp->offset
    62, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S5643C3_nt,    ABISELECT(4208,3072), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C7,    ABISELECT(4192,3068), //bcp->offset
    65, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S239C12_nt,    ABISELECT(1280,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
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20711C11,    ABISELECT(1280,948), //bcp->offset
    19, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20711C4,    ABISELECT(1296,952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(2448,1800), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C7,    ABISELECT(2432,1796), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(2480,1816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(2496,1828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C8,    ABISELECT(2464,1812), //bcp->offset
    42, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20711C2,    ABISELECT(1296,952), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20711C9,    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
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C3_nt,    ABISELECT(4240,3088), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C13,    ABISELECT(4224,3084), //bcp->offset
    72, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20711C4,    ABISELECT(4272,3108), //bcp->offset
    93, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S5408C7_nt,    ABISELECT(4256,3100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C15,    ABISELECT(4256,3100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(5424,3956), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20711C7,    ABISELECT(5408,3952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20711C16,    ABISELECT(5408,3952), //bcp->offset
    98, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S20711C14,    ABISELECT(4256,3100), //bcp->offset
    81, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20711C1[];
extern void _ZN8S20711C1D1Ev();
extern void _ZN8S20711C1D0Ev();
extern void ABISELECT(_ZThn1136_N8S20711C1D1Ev,_ZThn844_N8S20711C1D1Ev)();
extern void ABISELECT(_ZThn1136_N8S20711C1D0Ev,_ZThn844_N8S20711C1D0Ev)();
extern void ABISELECT(_ZThn1280_N8S20711C1D1Ev,_ZThn948_N8S20711C1D1Ev)();
extern void ABISELECT(_ZThn1280_N8S20711C1D0Ev,_ZThn948_N8S20711C1D0Ev)();
extern void ABISELECT(_ZThn1296_N8S20711C1D1Ev,_ZThn952_N8S20711C1D1Ev)();
extern void ABISELECT(_ZThn1296_N8S20711C1D0Ev,_ZThn952_N8S20711C1D0Ev)();
extern void ABISELECT(_ZThn2432_N8S20711C1D1Ev,_ZThn1796_N8S20711C1D1Ev)();
extern void ABISELECT(_ZThn2432_N8S20711C1D0Ev,_ZThn1796_N8S20711C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20711C1D1Ev,_ZTv0_n24_N8S20711C1D1Ev)();
extern void ABISELECT(_ZThn2608_N8S20711C1D1Ev,_ZThn1912_N8S20711C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20711C1D0Ev,_ZTv0_n24_N8S20711C1D0Ev)();
extern void ABISELECT(_ZThn2608_N8S20711C1D0Ev,_ZThn1912_N8S20711C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n48_N8S20711C1D1Ev,_ZTvn844_n24_N8S20711C1D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S20711C1D0Ev,_ZTvn844_n24_N8S20711C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20711C1D1Ev,_ZTv0_n20_N8S20711C1D1Ev)();
extern void ABISELECT(_ZThn4192_N8S20711C1D1Ev,_ZThn3068_N8S20711C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20711C1D0Ev,_ZTv0_n20_N8S20711C1D0Ev)();
extern void ABISELECT(_ZThn4192_N8S20711C1D0Ev,_ZThn3068_N8S20711C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20711C1D1Ev,_ZTv0_n28_N8S20711C1D1Ev)();
extern void ABISELECT(_ZThn4224_N8S20711C1D1Ev,_ZThn3084_N8S20711C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20711C1D0Ev,_ZTv0_n28_N8S20711C1D0Ev)();
extern void ABISELECT(_ZThn4224_N8S20711C1D0Ev,_ZThn3084_N8S20711C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20711C1D1Ev,_ZTv0_n40_N8S20711C1D1Ev)();
extern void ABISELECT(_ZThn4256_N8S20711C1D1Ev,_ZThn3100_N8S20711C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20711C1D0Ev,_ZTv0_n40_N8S20711C1D0Ev)();
extern void ABISELECT(_ZThn4256_N8S20711C1D0Ev,_ZThn3100_N8S20711C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20711C1D1Ev,_ZTv0_n20_N8S20711C1D1Ev)();
extern void ABISELECT(_ZThn5408_N8S20711C1D1Ev,_ZThn3952_N8S20711C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20711C1D0Ev,_ZTv0_n20_N8S20711C1D0Ev)();
extern void ABISELECT(_ZThn5408_N8S20711C1D0Ev,_ZThn3952_N8S20711C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20711C1[] = {
  ABISELECT(5408,3952),
  ABISELECT(4272,3108),
  ABISELECT(4256,3100),
  ABISELECT(4224,3084),
  ABISELECT(2608,1912),
  ABISELECT(4192,3068),
  ABISELECT(4048,2968),
  0,
  ABISELECT(3936,2884),
  ABISELECT(3920,2872),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C1[0]),
  (VTBL_ENTRY)&_ZN8S20711C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C1D0Ev,
  ABISELECT(2784,2028),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S20711C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C1D1Ev,_ZThn844_N8S20711C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C1D0Ev,_ZThn844_N8S20711C1D0Ev),
  ABISELECT(2640,1924),
  ABISELECT(1328,964),
  ABISELECT(2656,1936),
  ABISELECT(2912,2120),
  ABISELECT(-1280,-948),
  ABISELECT(2768,2020),
  ABISELECT(-1280,-948),
  (VTBL_ENTRY)&(_ZTI8S20711C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S20711C1D1Ev,_ZThn948_N8S20711C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S20711C1D0Ev,_ZThn948_N8S20711C1D0Ev),
  ABISELECT(-1296,-952),
  ABISELECT(2640,1932),
  ABISELECT(2624,1920),
  ABISELECT(-1296,-952),
  (VTBL_ENTRY)&(_ZTI8S20711C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S20711C1D1Ev,_ZThn952_N8S20711C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S20711C1D0Ev,_ZThn952_N8S20711C1D0Ev),
  ABISELECT(1504,1088),
  ABISELECT(-2432,-1796),
  ABISELECT(-2432,-1796),
  (VTBL_ENTRY)&(_ZTI8S20711C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2432_N8S20711C1D1Ev,_ZThn1796_N8S20711C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2432_N8S20711C1D0Ev,_ZThn1796_N8S20711C1D0Ev),
  ABISELECT(-2464,-1812),
  ABISELECT(-2464,-1812),
  (VTBL_ENTRY)&(_ZTI8S20711C1[0]),
  ABISELECT(-2608,-1912),
  ABISELECT(-2608,-1912),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  ABISELECT(-2608,-1912),
  (VTBL_ENTRY)&(_ZTI8S20711C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20711C1D1Ev,_ZTv0_n24_N8S20711C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20711C1D0Ev,_ZTv0_n24_N8S20711C1D0Ev),
  ABISELECT(192,128),
  ABISELECT(-3744,-2756),
  ABISELECT(-3744,-2756),
  (VTBL_ENTRY)&(_ZTI8S20711C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S20711C1D1Ev,_ZTvn844_n24_N8S20711C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S20711C1D0Ev,_ZTvn844_n24_N8S20711C1D0Ev),
  ABISELECT(-3776,-2772),
  ABISELECT(-3776,-2772),
  (VTBL_ENTRY)&(_ZTI8S20711C1[0]),
  ABISELECT(-4048,-2968),
  ABISELECT(-4048,-2968),
  (VTBL_ENTRY)&(_ZTI8S20711C1[0]),
  ABISELECT(-4192,-3068),
  ABISELECT(-256,-184),
  ABISELECT(-4192,-3068),
  ABISELECT(-4192,-3068),
  (VTBL_ENTRY)&(_ZTI8S20711C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20711C1D1Ev,_ZTv0_n20_N8S20711C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20711C1D0Ev,_ZTv0_n20_N8S20711C1D0Ev),
  ABISELECT(-4224,-3084),
  ABISELECT(-176,-116),
  ABISELECT(-288,-200),
  ABISELECT(-32,-16),
  ABISELECT(-4224,-3084),
  ABISELECT(-4224,-3084),
  (VTBL_ENTRY)&(_ZTI8S20711C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20711C1D1Ev,_ZTv0_n28_N8S20711C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20711C1D0Ev,_ZTv0_n28_N8S20711C1D0Ev),
  ABISELECT(-4256,-3100),
  ABISELECT(1152,852),
  ABISELECT(-64,-32),
  ABISELECT(-208,-132),
  ABISELECT(-4256,-3100),
  ABISELECT(-336,-228),
  ABISELECT(16,8),
  ABISELECT(-320,-216),
  ABISELECT(-4256,-3100),
  (VTBL_ENTRY)&(_ZTI8S20711C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20711C1D1Ev,_ZTv0_n40_N8S20711C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20711C1D0Ev,_ZTv0_n40_N8S20711C1D0Ev),
  ABISELECT(-4272,-3108),
  ABISELECT(-336,-224),
  ABISELECT(-352,-236),
  ABISELECT(-4272,-3108),
  (VTBL_ENTRY)&(_ZTI8S20711C1[0]),
  ABISELECT(-5408,-3952),
  ABISELECT(-1472,-1068),
  ABISELECT(-5408,-3952),
  ABISELECT(-5408,-3952),
  (VTBL_ENTRY)&(_ZTI8S20711C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20711C1D1Ev,_ZTv0_n20_N8S20711C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20711C1D0Ev,_ZTv0_n20_N8S20711C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20711C1[];
extern void _ZN8S20711C9D1Ev();
extern void _ZN8S20711C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C9__8S20711C1[] = {
  ABISELECT(2608,1912),
  ABISELECT(4192,3068),
  ABISELECT(4048,2968),
  0,
  ABISELECT(3936,2884),
  ABISELECT(3920,2872),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&_ZN8S20711C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C48S20711C9__A1__8S20711C1[] = {
  0,
  ABISELECT(3936,2884),
  ABISELECT(3920,2872),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C4[0]),
};
extern void _ZN9S20711C10D1Ev();
extern void _ZN9S20711C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20711C108S20711C9__8S20711C1[] = {
  ABISELECT(2784,2028),
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C10[0]),
  (VTBL_ENTRY)&_ZN9S20711C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20711C10D0Ev,
};
extern void _ZN9S20711C11D1Ev();
extern void _ZN9S20711C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20711C118S20711C9__8S20711C1[] = {
  ABISELECT(2640,1924),
  ABISELECT(1328,964),
  ABISELECT(2656,1936),
  ABISELECT(2912,2120),
  ABISELECT(-1280,-948),
  ABISELECT(2768,2020),
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
  (VTBL_ENTRY)&_ZN9S20711C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20711C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__9S20711C118S20711C9__8S20711C1[] = {
  ABISELECT(-4048,-2968),
  ABISELECT(-2768,-2020),
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S20711C11D1Ev,_ZTv0_n20_N9S20711C11D1Ev)();
extern void ABISELECT(_ZThn2912_N9S20711C11D1Ev,_ZThn2120_N9S20711C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20711C11D0Ev,_ZTv0_n20_N9S20711C11D0Ev)();
extern void ABISELECT(_ZThn2912_N9S20711C11D0Ev,_ZThn2120_N9S20711C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20711C7__9S20711C118S20711C9__8S20711C1[] = {
  ABISELECT(-2912,-2120),
  ABISELECT(-256,-184),
  ABISELECT(-4192,-3068),
  ABISELECT(-2912,-2120),
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C11D1Ev,_ZTv0_n20_N9S20711C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C11D0Ev,_ZTv0_n20_N9S20711C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20711C11D1Ev,_ZTv0_n24_N9S20711C11D1Ev)();
extern void ABISELECT(_ZThn1328_N9S20711C11D1Ev,_ZThn964_N9S20711C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20711C11D0Ev,_ZTv0_n24_N9S20711C11D0Ev)();
extern void ABISELECT(_ZThn1328_N9S20711C11D0Ev,_ZThn964_N9S20711C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20711C2__9S20711C118S20711C9__8S20711C1[] = {
  ABISELECT(-1328,-964),
  ABISELECT(-2608,-1912),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  ABISELECT(-1328,-964),
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20711C11D1Ev,_ZTv0_n24_N9S20711C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20711C11D0Ev,_ZTv0_n24_N9S20711C11D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N9S20711C11D1Ev,_ZTvn844_n24_N9S20711C11D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N9S20711C11D0Ev,_ZTvn844_n24_N9S20711C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20711C78S20711C2__A1__9S20711C118S20711C9__8S20711C1[] = {
  ABISELECT(192,128),
  ABISELECT(-3744,-2756),
  ABISELECT(-2464,-1808),
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N9S20711C11D1Ev,_ZTvn844_n24_N9S20711C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N9S20711C11D0Ev,_ZTvn844_n24_N9S20711C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20711C88S20711C2__A1__9S20711C118S20711C9__8S20711C1[] = {
  ABISELECT(-3776,-2772),
  ABISELECT(-2496,-1824),
  (VTBL_ENTRY)&(_ZTI9S20711C11[0]),
};
extern void _ZN8S20711C2D1Ev();
extern void _ZN8S20711C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C28S20711C9__A1__8S20711C1[] = {
  ABISELECT(-1296,-952),
  ABISELECT(2640,1932),
  ABISELECT(2624,1920),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
  (VTBL_ENTRY)&_ZN8S20711C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C48S20711C28S20711C9__A2__8S20711C1[] = {
  ABISELECT(-1296,-952),
  ABISELECT(2640,1932),
  ABISELECT(2624,1920),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C4[0]),
};
extern void _ZN8S20711C7D1Ev();
extern void _ZN8S20711C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C78S20711C28S20711C9__A2__8S20711C1[] = {
  ABISELECT(1504,1088),
  ABISELECT(-2432,-1796),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C7[0]),
  (VTBL_ENTRY)&_ZN8S20711C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C88S20711C28S20711C9__A2__8S20711C1[] = {
  ABISELECT(-2464,-1812),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C8[0]),
};
extern void ABISELECT(_ZThn1136_N8S20711C2D1Ev,_ZThn844_N8S20711C2D1Ev)();
extern void ABISELECT(_ZThn1136_N8S20711C2D0Ev,_ZThn844_N8S20711C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20711C7__8S20711C28S20711C9__A1__8S20711C1[] = {
  ABISELECT(1504,1088),
  ABISELECT(-2432,-1796),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C2D1Ev,_ZThn844_N8S20711C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C2D0Ev,_ZThn844_N8S20711C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__8S20711C28S20711C9__A1__8S20711C1[] = {
  ABISELECT(-2464,-1812),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
};
extern void ABISELECT(_ZThn1136_N8S20711C9D1Ev,_ZThn844_N8S20711C9D1Ev)();
extern void ABISELECT(_ZThn1136_N8S20711C9D0Ev,_ZThn844_N8S20711C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20711C10__8S20711C9__8S20711C1[] = {
  ABISELECT(2784,2028),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C9D1Ev,_ZThn844_N8S20711C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C9D0Ev,_ZThn844_N8S20711C9D0Ev),
};
extern void ABISELECT(_ZThn1280_N8S20711C9D1Ev,_ZThn948_N8S20711C9D1Ev)();
extern void ABISELECT(_ZThn1280_N8S20711C9D0Ev,_ZThn948_N8S20711C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20711C11__8S20711C9__8S20711C1[] = {
  ABISELECT(2640,1924),
  ABISELECT(1328,964),
  ABISELECT(2656,1936),
  ABISELECT(2912,2120),
  ABISELECT(-1280,-948),
  ABISELECT(2768,2020),
  ABISELECT(-1280,-948),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S20711C9D1Ev,_ZThn948_N8S20711C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S20711C9D0Ev,_ZThn948_N8S20711C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__8S20711C9__8S20711C1[] = {
  ABISELECT(-4048,-2968),
  ABISELECT(-4048,-2968),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S20711C9D1Ev,_ZTv0_n20_N8S20711C9D1Ev)();
extern void ABISELECT(_ZThn4192_N8S20711C9D1Ev,_ZThn3068_N8S20711C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20711C9D0Ev,_ZTv0_n20_N8S20711C9D0Ev)();
extern void ABISELECT(_ZThn4192_N8S20711C9D0Ev,_ZThn3068_N8S20711C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20711C7__8S20711C9__8S20711C1[] = {
  ABISELECT(-4192,-3068),
  ABISELECT(-256,-184),
  ABISELECT(-4192,-3068),
  ABISELECT(-4192,-3068),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20711C9D1Ev,_ZTv0_n20_N8S20711C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20711C9D0Ev,_ZTv0_n20_N8S20711C9D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20711C9D1Ev,_ZTv0_n24_N8S20711C9D1Ev)();
extern void ABISELECT(_ZThn2608_N8S20711C9D1Ev,_ZThn1912_N8S20711C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20711C9D0Ev,_ZTv0_n24_N8S20711C9D0Ev)();
extern void ABISELECT(_ZThn2608_N8S20711C9D0Ev,_ZThn1912_N8S20711C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20711C2__8S20711C9__8S20711C1[] = {
  ABISELECT(-2608,-1912),
  ABISELECT(-2608,-1912),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  ABISELECT(-2608,-1912),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20711C9D1Ev,_ZTv0_n24_N8S20711C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20711C9D0Ev,_ZTv0_n24_N8S20711C9D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N8S20711C9D1Ev,_ZTvn844_n24_N8S20711C9D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S20711C9D0Ev,_ZTvn844_n24_N8S20711C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20711C78S20711C2__A1__8S20711C9__8S20711C1[] = {
  ABISELECT(192,128),
  ABISELECT(-3744,-2756),
  ABISELECT(-3744,-2756),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S20711C9D1Ev,_ZTvn844_n24_N8S20711C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S20711C9D0Ev,_ZTvn844_n24_N8S20711C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20711C88S20711C2__A1__8S20711C9__8S20711C1[] = {
  ABISELECT(-3776,-2772),
  ABISELECT(-3776,-2772),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
};
extern void ABISELECT(_ZThn1296_N8S20711C9D1Ev,_ZThn952_N8S20711C9D1Ev)();
extern void ABISELECT(_ZThn1296_N8S20711C9D0Ev,_ZThn952_N8S20711C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20711C2__A__8S20711C9__8S20711C1[] = {
  ABISELECT(-1296,-952),
  ABISELECT(2640,1932),
  ABISELECT(2624,1920),
  ABISELECT(-1296,-952),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S20711C9D1Ev,_ZThn952_N8S20711C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S20711C9D0Ev,_ZThn952_N8S20711C9D0Ev),
};
extern void ABISELECT(_ZThn2432_N8S20711C9D1Ev,_ZThn1796_N8S20711C9D1Ev)();
extern void ABISELECT(_ZThn2432_N8S20711C9D0Ev,_ZThn1796_N8S20711C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20711C78S20711C2__A2__8S20711C9__8S20711C1[] = {
  ABISELECT(1504,1088),
  ABISELECT(-2432,-1796),
  ABISELECT(-2432,-1796),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2432_N8S20711C9D1Ev,_ZThn1796_N8S20711C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2432_N8S20711C9D0Ev,_ZThn1796_N8S20711C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20711C88S20711C2__A2__8S20711C9__8S20711C1[] = {
  ABISELECT(-2464,-1812),
  ABISELECT(-2464,-1812),
  (VTBL_ENTRY)&(_ZTI8S20711C9[0]),
};
extern void _ZN8S20711C2D1Ev();
extern void _ZN8S20711C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C2__8S20711C1[] = {
  ABISELECT(-2608,-1912),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
  (VTBL_ENTRY)&_ZN8S20711C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C48S20711C2__8S20711C1[] = {
  ABISELECT(-2608,-1912),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C4[0]),
};
extern void _ZN8S20711C7D1Ev();
extern void _ZN8S20711C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C78S20711C2__8S20711C1[] = {
  ABISELECT(192,128),
  ABISELECT(-3744,-2756),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C7[0]),
  (VTBL_ENTRY)&_ZN8S20711C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20711C88S20711C2__8S20711C1[] = {
  ABISELECT(-3776,-2772),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C8[0]),
};
extern void ABISELECT(_ZThn1136_N8S20711C2D1Ev,_ZThn844_N8S20711C2D1Ev)();
extern void ABISELECT(_ZThn1136_N8S20711C2D0Ev,_ZThn844_N8S20711C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20711C7__8S20711C2__8S20711C1[] = {
  ABISELECT(192,128),
  ABISELECT(-3744,-2756),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C2D1Ev,_ZThn844_N8S20711C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S20711C2D0Ev,_ZThn844_N8S20711C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__8S20711C2__8S20711C1[] = {
  ABISELECT(-3776,-2772),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S20711C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__A1__8S20711C1[] = {
  ABISELECT(-4048,-2968),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C8[0]),
};
extern void _ZN8S20711C7D1Ev();
extern void _ZN8S20711C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C7__A1__8S20711C1[] = {
  ABISELECT(-256,-184),
  ABISELECT(-4192,-3068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C7[0]),
  (VTBL_ENTRY)&_ZN8S20711C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C7D0Ev,
};
extern void _ZN9S20711C13D1Ev();
extern void _ZN9S20711C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20711C13__8S20711C1[] = {
  ABISELECT(-176,-116),
  ABISELECT(-288,-200),
  ABISELECT(-32,-16),
  ABISELECT(-4224,-3084),
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C13[0]),
  (VTBL_ENTRY)&_ZN9S20711C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20711C13D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20711C13D1Ev,_ZTv0_n20_N9S20711C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20711C13D0Ev,_ZTv0_n20_N9S20711C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20711C7__9S20711C13__8S20711C1[] = {
  ABISELECT(32,16),
  ABISELECT(-256,-184),
  ABISELECT(-4192,-3068),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S20711C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C13D1Ev,_ZTv0_n20_N9S20711C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C13D0Ev,_ZTv0_n20_N9S20711C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__9S20711C13__8S20711C1[] = {
  ABISELECT(-4048,-2968),
  ABISELECT(176,116),
  (VTBL_ENTRY)&(_ZTI9S20711C13[0]),
};
extern void _ZN9S20711C14D1Ev();
extern void _ZN9S20711C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20711C14__8S20711C1[] = {
  ABISELECT(1152,852),
  ABISELECT(-64,-32),
  ABISELECT(-208,-132),
  ABISELECT(-4256,-3100),
  ABISELECT(-336,-228),
  ABISELECT(16,8),
  ABISELECT(-320,-216),
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C14[0]),
  (VTBL_ENTRY)&_ZN9S20711C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20711C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20711C159S20711C14__8S20711C1[] = {
  ABISELECT(-208,-132),
  ABISELECT(-4256,-3100),
  ABISELECT(-336,-228),
  ABISELECT(16,8),
  ABISELECT(-320,-216),
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20711C4__9S20711C159S20711C14__8S20711C1[] = {
  ABISELECT(-4272,-3108),
  ABISELECT(-336,-224),
  ABISELECT(-352,-236),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20711C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__9S20711C159S20711C14__8S20711C1[] = {
  ABISELECT(-4048,-2968),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI9S20711C15[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S20711C14D1Ev,_ZTv0_n20_N9S20711C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20711C14D0Ev,_ZTv0_n20_N9S20711C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20711C7__9S20711C14__8S20711C1[] = {
  ABISELECT(64,32),
  ABISELECT(-256,-184),
  ABISELECT(-4192,-3068),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S20711C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C14D1Ev,_ZTv0_n20_N9S20711C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C14D0Ev,_ZTv0_n20_N9S20711C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20711C4__9S20711C14__8S20711C1[] = {
  ABISELECT(-4272,-3108),
  ABISELECT(-336,-224),
  ABISELECT(-352,-236),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20711C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20711C8__9S20711C14__8S20711C1[] = {
  ABISELECT(-4048,-2968),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI9S20711C14[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S20711C14D1Ev,_ZTv0_n20_N9S20711C14D1Ev)();
extern void ABISELECT(_ZThn1152_N9S20711C14D1Ev,_ZThn852_N9S20711C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20711C14D0Ev,_ZTv0_n20_N9S20711C14D0Ev)();
extern void ABISELECT(_ZThn1152_N9S20711C14D0Ev,_ZThn852_N9S20711C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20711C16__9S20711C14__8S20711C1[] = {
  ABISELECT(-1152,-852),
  ABISELECT(-1472,-1068),
  ABISELECT(-5408,-3952),
  ABISELECT(-1152,-852),
  (VTBL_ENTRY)&(_ZTI9S20711C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C14D1Ev,_ZTv0_n20_N9S20711C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20711C14D0Ev,_ZTv0_n20_N9S20711C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20711C4__A3__8S20711C1[] = {
  ABISELECT(-4272,-3108),
  ABISELECT(-336,-224),
  ABISELECT(-352,-236),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C4[0]),
};
extern void _ZN9S20711C16D1Ev();
extern void _ZN9S20711C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20711C16__8S20711C1[] = {
  ABISELECT(-1472,-1068),
  ABISELECT(-5408,-3952),
  0,
  (VTBL_ENTRY)&(_ZTI9S20711C16[0]),
  (VTBL_ENTRY)&_ZN9S20711C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20711C16D0Ev,
};
extern void _ZN8S20711C7D1Ev();
extern void _ZN8S20711C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20711C79S20711C16__A3__8S20711C1[] = {
  ABISELECT(-1472,-1068),
  ABISELECT(-5408,-3952),
  0,
  (VTBL_ENTRY)&(_ZTI8S20711C7[0]),
  (VTBL_ENTRY)&_ZN8S20711C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20711C7D0Ev,
};
static  VTT_ENTRY vtt_S20711C1[] = {
  {&(_ZTV8S20711C1[12]),  12,105},
  {&(_tg__ZTV8S20711C9__8S20711C1[8]),  8,10},
  {&(_tg__ZTV8S20711C48S20711C9__A1__8S20711C1[5]),  5,5},
  {&(_tg__ZTV9S20711C108S20711C9__8S20711C1[3]),  3,5},
  {&(_tg__ZTV9S20711C118S20711C9__8S20711C1[8]),  8,10},
  {&(_tg__ZTV8S20711C8__9S20711C118S20711C9__8S20711C1[3]),  3,3},
  {&(_tg__ZTV8S20711C7__9S20711C118S20711C9__8S20711C1[5]),  5,7},
  {&(_tg__ZTV8S20711C2__9S20711C118S20711C9__8S20711C1[6]),  6,8},
  {&(_tg__ZTV8S20711C78S20711C2__A1__9S20711C118S20711C9__8S20711C1[4]),  4,6},
  {&(_tg__ZTV8S20711C88S20711C2__A1__9S20711C118S20711C9__8S20711C1[3]),  3,3},
  {&(_tg__ZTV8S20711C28S20711C9__A1__8S20711C1[5]),  5,7},
  {&(_tg__ZTV8S20711C48S20711C28S20711C9__A2__8S20711C1[5]),  5,5},
  {&(_tg__ZTV8S20711C78S20711C28S20711C9__A2__8S20711C1[4]),  4,6},
  {&(_tg__ZTV8S20711C88S20711C28S20711C9__A2__8S20711C1[3]),  3,3},
  {&(_tg__ZTV8S20711C7__8S20711C28S20711C9__A1__8S20711C1[4]),  4,6},
  {&(_tg__ZTV8S20711C8__8S20711C28S20711C9__A1__8S20711C1[3]),  3,3},
  {&(_tg__ZTV9S20711C10__8S20711C9__8S20711C1[3]),  3,5},
  {&(_tg__ZTV9S20711C11__8S20711C9__8S20711C1[8]),  8,10},
  {&(_tg__ZTV8S20711C8__8S20711C9__8S20711C1[3]),  3,3},
  {&(_tg__ZTV8S20711C7__8S20711C9__8S20711C1[5]),  5,7},
  {&(_tg__ZTV8S20711C2__8S20711C9__8S20711C1[6]),  6,8},
  {&(_tg__ZTV8S20711C78S20711C2__A1__8S20711C9__8S20711C1[4]),  4,6},
  {&(_tg__ZTV8S20711C88S20711C2__A1__8S20711C9__8S20711C1[3]),  3,3},
  {&(_tg__ZTV8S20711C2__A__8S20711C9__8S20711C1[5]),  5,7},
  {&(_tg__ZTV8S20711C78S20711C2__A2__8S20711C9__8S20711C1[4]),  4,6},
  {&(_tg__ZTV8S20711C88S20711C2__A2__8S20711C9__8S20711C1[3]),  3,3},
  {&(_ZTV8S20711C1[51]),  51,105},
  {&(_ZTV8S20711C1[57]),  57,105},
  {&(_ZTV8S20711C1[62]),  62,105},
  {&(_ZTV8S20711C1[17]),  17,105},
  {&(_ZTV8S20711C1[27]),  27,105},
  {&(_ZTV8S20711C1[65]),  65,105},
  {&(_ZTV8S20711C1[70]),  70,105},
  {&(_ZTV8S20711C1[34]),  34,105},
  {&(_ZTV8S20711C1[40]),  40,105},
  {&(_ZTV8S20711C1[45]),  45,105},
  {&(_ZTV8S20711C1[79]),  79,105},
  {&(_ZTV8S20711C1[91]),  91,105},
  {&(_ZTV8S20711C1[98]),  98,105},
  {&(_ZTV8S20711C1[103]),  103,105},
  {&(_tg__ZTV8S20711C2__8S20711C1[5]),  5,7},
  {&(_tg__ZTV8S20711C48S20711C2__8S20711C1[5]),  5,5},
  {&(_tg__ZTV8S20711C78S20711C2__8S20711C1[4]),  4,6},
  {&(_tg__ZTV8S20711C88S20711C2__8S20711C1[3]),  3,3},
  {&(_tg__ZTV8S20711C7__8S20711C2__8S20711C1[4]),  4,6},
  {&(_tg__ZTV8S20711C8__8S20711C2__8S20711C1[3]),  3,3},
  {&(_tg__ZTV8S20711C8__A1__8S20711C1[3]),  3,3},
  {&(_tg__ZTV8S20711C7__A1__8S20711C1[4]),  4,6},
  {&(_tg__ZTV9S20711C13__8S20711C1[6]),  6,8},
  {&(_tg__ZTV8S20711C7__9S20711C13__8S20711C1[5]),  5,7},
  {&(_tg__ZTV8S20711C8__9S20711C13__8S20711C1[3]),  3,3},
  {&(_tg__ZTV9S20711C14__8S20711C1[9]),  9,11},
  {&(_tg__ZTV9S20711C159S20711C14__8S20711C1[7]),  7,7},
  {&(_tg__ZTV8S20711C4__9S20711C159S20711C14__8S20711C1[5]),  5,5},
  {&(_tg__ZTV8S20711C8__9S20711C159S20711C14__8S20711C1[3]),  3,3},
  {&(_tg__ZTV8S20711C7__9S20711C14__8S20711C1[5]),  5,7},
  {&(_tg__ZTV8S20711C4__9S20711C14__8S20711C1[5]),  5,5},
  {&(_tg__ZTV8S20711C8__9S20711C14__8S20711C1[3]),  3,3},
  {&(_tg__ZTV9S20711C16__9S20711C14__8S20711C1[5]),  5,7},
  {&(_tg__ZTV8S20711C4__A3__8S20711C1[5]),  5,5},
  {&(_tg__ZTV9S20711C16__8S20711C1[4]),  4,6},
  {&(_tg__ZTV8S20711C79S20711C16__A3__8S20711C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20711C1[];
extern  VTBL_ENTRY _ZTV8S20711C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20711C1[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20711C14D0Ev,_ZTv0_n20_N9S20711C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1152_N9S20711C14D0Ev,_ZThn852_N9S20711C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20711C14D1Ev,_ZTv0_n20_N9S20711C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1152_N9S20711C14D1Ev,_ZThn852_N9S20711C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20711C9D0Ev,_ZTv0_n24_N8S20711C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S20711C9D0Ev,_ZThn1912_N8S20711C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20711C9D1Ev,_ZTv0_n24_N8S20711C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S20711C9D1Ev,_ZThn1912_N8S20711C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20711C9D0Ev,_ZTv0_n20_N8S20711C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4192_N8S20711C9D0Ev,_ZThn3068_N8S20711C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20711C9D1Ev,_ZTv0_n20_N8S20711C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4192_N8S20711C9D1Ev,_ZThn3068_N8S20711C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20711C11D0Ev,_ZTv0_n24_N9S20711C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1328_N9S20711C11D0Ev,_ZThn964_N9S20711C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20711C11D1Ev,_ZTv0_n24_N9S20711C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1328_N9S20711C11D1Ev,_ZThn964_N9S20711C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20711C11D0Ev,_ZTv0_n20_N9S20711C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2912_N9S20711C11D0Ev,_ZThn2120_N9S20711C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20711C11D1Ev,_ZTv0_n20_N9S20711C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2912_N9S20711C11D1Ev,_ZThn2120_N9S20711C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20711C1D0Ev,_ZTv0_n40_N8S20711C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4256_N8S20711C1D0Ev,_ZThn3100_N8S20711C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20711C1D1Ev,_ZTv0_n40_N8S20711C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4256_N8S20711C1D1Ev,_ZThn3100_N8S20711C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20711C1D0Ev,_ZTv0_n28_N8S20711C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4224_N8S20711C1D0Ev,_ZThn3084_N8S20711C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20711C1D1Ev,_ZTv0_n28_N8S20711C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4224_N8S20711C1D1Ev,_ZThn3084_N8S20711C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20711C1D0Ev,_ZTv0_n20_N8S20711C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S20711C1D0Ev,_ZThn3952_N8S20711C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4192_N8S20711C1D0Ev,_ZThn3068_N8S20711C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20711C1D1Ev,_ZTv0_n20_N8S20711C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S20711C1D1Ev,_ZThn3952_N8S20711C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4192_N8S20711C1D1Ev,_ZThn3068_N8S20711C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20711C1D0Ev,_ZTv0_n24_N8S20711C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S20711C1D0Ev,_ZThn1912_N8S20711C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20711C1D1Ev,_ZTv0_n24_N8S20711C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S20711C1D1Ev,_ZThn1912_N8S20711C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20711C1 = {  "S20711C1", // class name
  bases_S20711C1, 37,
  &(vtc_S20711C1[0]), // expected_vtbl_contents
  &(vtt_S20711C1[0]), // expected_vtt_contents
  ABISELECT(5440,3968), // object size
  NSPAIRA(_ZTI8S20711C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20711C1),105, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20711C1),62, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16130C2_nt  {
  __tsi64 s16130c2f0[4];
  void  mf16130c2(); // _ZN11S16130C2_nt9mf16130c2Ev
};
//SIG(-1 S16130C2_nt) C1{ m FL[4]}


void  S16130C2_nt ::mf16130c2(){}

//skip512 S16130C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S16130C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S5408C15_nt;
static Base_Class bases_S16130C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5408C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S16130C3  {
  int s16130c3f0[2];
  ::S16130C2_nt s16130c3f1;
  void *s16130c3f2[2];
  ::S16130C5_nt s16130c3f3;
  void  mf16130c3(); // _ZN8S16130C39mf16130c3Ev
};
//SIG(-1 S16130C3) C1{ m Fi[2] FC2{ m FL[4]} Fp[2] FC3{ BC4{ m Fp Fi[2] FC5{ m}}}}


void  S16130C3 ::mf16130c3(){}

static void Test_S16130C3()
{
  {
    init_simple_test("S16130C3");
    S16130C3 lv;
    check2(sizeof(lv), ABISELECT(80,64), "sizeof(S16130C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16130C3)");
    check_field_offset(lv, s16130c3f0, 0, "S16130C3.s16130c3f0");
    check_field_offset(lv, s16130c3f1, 8, "S16130C3.s16130c3f1");
    check_field_offset(lv, s16130c3f2, 40, "S16130C3.s16130c3f2");
    check_field_offset(lv, s16130c3f3, ABISELECT(56,48), "S16130C3.s16130c3f3");
  }
}
static Arrange_To_Call_Me vS16130C3(Test_S16130C3, "S16130C3", ABISELECT(80,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16130C9_nt  {
  void *s16130c9f0;
  int s16130c9f1;
  ::S5408C7_nt s16130c9f2;
  void  mf16130c9(); // _ZN11S16130C9_nt9mf16130c9Ev
};
//SIG(-1 S16130C9_nt) C1{ m Fp Fi FC2{ m}}


void  S16130C9_nt ::mf16130c9(){}

//skip512 S16130C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16130C12_nt  {
  int s16130c12f0:4;
  int s16130c12f1:6;
  int s16130c12f2:22;
};
//SIG(1 S16130C12_nt) C1{ Fi:4 Fi:6 Fi:22}



//skip512 S16130C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S16130C11_nt  {
  int s16130c11f0;
  ::S16130C12_nt s16130c11f1;
  void  mf16130c11(); // _ZN12S16130C11_nt10mf16130c11Ev
};
//SIG(1 S16130C11_nt) U1{ m Fi FC2{ Fi:4 Fi:6 Fi:22}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S16130C8  {
  int s16130c8f0[2];
  ::S16130C2_nt s16130c8f1;
  ::S16130C2_nt s16130c8f2;
  ::S16130C2_nt s16130c8f3;
  ::S16130C9_nt s16130c8f4;
  int s16130c8f5;
  __tsi64 s16130c8f6[2];
  ::S16130C11_nt s16130c8f7[16];
  void  mf16130c8(); // _ZN8S16130C89mf16130c8Ev
};
//SIG(-1 S16130C8) C1{ m Fi[2] FC2{ m FL[4]} FC2 FC2 FC3{ m Fp Fi FC4{ m}} Fi FL[2] FU5{ m Fi FC6{ Fi:4 Fi:6 Fi:22}}[16]}


void  S16130C8 ::mf16130c8(){}

static void Test_S16130C8()
{
  {
    init_simple_test("S16130C8");
    S16130C8 lv;
    check2(sizeof(lv), ABISELECT(208,200), "sizeof(S16130C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16130C8)");
    check_field_offset(lv, s16130c8f0, 0, "S16130C8.s16130c8f0");
    check_field_offset(lv, s16130c8f1, 8, "S16130C8.s16130c8f1");
    check_field_offset(lv, s16130c8f2, 40, "S16130C8.s16130c8f2");
    check_field_offset(lv, s16130c8f3, 72, "S16130C8.s16130c8f3");
    check_field_offset(lv, s16130c8f4, 104, "S16130C8.s16130c8f4");
    check_field_offset(lv, s16130c8f5, ABISELECT(120,116), "S16130C8.s16130c8f5");
    check_field_offset(lv, s16130c8f6, ABISELECT(128,120), "S16130C8.s16130c8f6");
    check_field_offset(lv, s16130c8f7, ABISELECT(144,136), "S16130C8.s16130c8f7");
  }
}
static Arrange_To_Call_Me vS16130C8(Test_S16130C8, "S16130C8", ABISELECT(208,200));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16130C17_nt  {
  void  mf16130c17(); // _ZN12S16130C17_nt10mf16130c17Ev
};
//SIG(-1 S16130C17_nt) C1{ m}


void  S16130C17_nt ::mf16130c17(){}

//skip512 S16130C17_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI12S16130C17_nt[];
VTBL_ENTRY *P__ZTI12S16130C17_nt = _ZTI12S16130C17_nt; 
Class_Descriptor cd_S16130C17_nt = {  "S16130C17_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI12S16130C17_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  S16130C16_nt  {
  void *s16130c16f0;
  int s16130c16f1;
  int s16130c16f2;
  ::S16130C17_nt s16130c16f3;
  void  mf16130c16(); // _ZN12S16130C16_nt10mf16130c16Ev
};
//SIG(-1 S16130C16_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S16130C16_nt ::mf16130c16(){}

//skip512 S16130C16_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

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



//skip512 S16130C15_nt

#else // __cplusplus

extern Class_Descriptor cd_S16130C16_nt;
static Base_Class bases_S16130C15_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16130C16_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S16130C13_nt  : S239C12_nt {
  int s16130c13f0;
  int s16130c13f1;
  ::S16130C15_nt s16130c13f2;
  void *s16130c13f3;
};
//SIG(-1 S16130C13_nt) C1{ BC2{ m} Fi[2] FC3{ BC4{ m Fp Fi[2] FC5{ m}}} Fp}



//skip512 S16130C13_nt

#else // __cplusplus

extern Class_Descriptor cd_S239C12_nt;
extern VTBL_ENTRY _ZTI10S239C12_nt[];
static Base_Class bases_S16130C13_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S239C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S16130C1  {
  ::S16130C2_nt s16130c1f0;
  ::S16130C2_nt s16130c1f1;
  ::S16130C3 s16130c1f2;
  ::S16130C8 s16130c1f3;
  void *s16130c1f4;
  ::S16130C2_nt s16130c1f5;
  ::S16130C13_nt s16130c1f6;
  ::S16130C2_nt s16130c1f7;
  ::S16130C13_nt s16130c1f8;
  int s16130c1f9;
  int s16130c1f10;
  void  mf16130c1(); // _ZN8S16130C19mf16130c1Ev
};
//SIG(1 S16130C1) C1{ m FC2{ m FL[4]} FC2 FC3{ m Fi[2] FC2 Fp[2] FC4{ BC5{ m Fp Fi[2] FC6{ m}}}} FC7{ m Fi[2] FC2 FC2 FC2 FC8{ m Fp Fi FC6} Fi FL[2] FU9{ m Fi FC10{ Fi:4 Fi:6 Fi:22}}[16]} Fp FC2 FC11{ BC12{ m} Fi Fi FC13{ BC14{ m Fp Fi Fi FC15{ m}}} Fp} FC2 FC11 Fi Fi}


void  S16130C1 ::mf16130c1(){}

static void Test_S16130C1()
{
  {
    init_simple_test("S16130C1");
    S16130C1 lv;
    check2(sizeof(lv), ABISELECT(512,460), "sizeof(S16130C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16130C1)");
    check_field_offset(lv, s16130c1f0, 0, "S16130C1.s16130c1f0");
    check_field_offset(lv, s16130c1f1, 32, "S16130C1.s16130c1f1");
    check_field_offset(lv, s16130c1f2, 64, "S16130C1.s16130c1f2");
    check_field_offset(lv, s16130c1f3, ABISELECT(144,128), "S16130C1.s16130c1f3");
    check_field_offset(lv, s16130c1f4, ABISELECT(352,328), "S16130C1.s16130c1f4");
    check_field_offset(lv, s16130c1f5, ABISELECT(360,332), "S16130C1.s16130c1f5");
    check_field_offset(lv, s16130c1f6, ABISELECT(392,364), "S16130C1.s16130c1f6");
    check_field_offset(lv, s16130c1f7, ABISELECT(432,392), "S16130C1.s16130c1f7");
    check_field_offset(lv, s16130c1f8, ABISELECT(464,424), "S16130C1.s16130c1f8");
    check_field_offset(lv, s16130c1f9, ABISELECT(504,452), "S16130C1.s16130c1f9");
    check_field_offset(lv, s16130c1f10, ABISELECT(508,456), "S16130C1.s16130c1f10");
  }
}
static Arrange_To_Call_Me vS16130C1(Test_S16130C1, "S16130C1", ABISELECT(512,460));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S392C4  : S3221C8_nt {
};
//SIG(-1 S392C4) C1{ BC2{ m Fi}}



static void Test_S392C4()
{
  extern Class_Descriptor cd_S392C4;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S392C4, buf);
    S392C4 &lv = *(new (buf) S392C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S392C4)");
    check2(__alignof__(lv), 4, "__alignof__(S392C4)");
    check_base_class_offset(lv, (S3221C8_nt*), 0, "S392C4");
    test_class_info(&lv, &cd_S392C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS392C4(Test_S392C4, "S392C4", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S392C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S392C4[];
Class_Descriptor cd_S392C4 = {  "S392C4", // class name
  bases_S392C4, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI6S392C4),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  S392C3  : S392C4 {
  ::S1098C5_nt s392c3f0;
  ::S1093C6_nt s392c3f1;
  ::S1093C6_nt s392c3f2;
  ::S1098C7_nt s392c3f3;
  char s392c3f4;
  ::S1098C10_nt s392c3f5;
  ::S1093C13 s392c3f6;
  void *s392c3f7;
  ::S1093C13 s392c3f8;
  ::S1093C13 s392c3f9;
  char s392c3f10[5];
  virtual  ~S392C3(); // _ZN6S392C3D1Ev
  virtual void  v3(); // _ZN6S392C32v3Ev
  virtual void  v4(); // _ZN6S392C32v4Ev
  virtual void  v5(); // _ZN6S392C32v5Ev
  virtual void  v6(); // _ZN6S392C32v6Ev
  virtual void  v7(); // _ZN6S392C32v7Ev
  virtual void  v8(); // _ZN6S392C32v8Ev
  virtual void  v9(); // _ZN6S392C32v9Ev
  S392C3(); // tgen
};
//SIG(-1 S392C3) C1{ BC2{ BC3{ m Fi}} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp} FC5{ m Fp} FC5 FC6{ m Fi FC7{ BC8{ m Fp Fi}}} Fc FC9{ m FC10{ m Fi[2]} FC11{ m Fi[2]}} FC12{ m FC10 FC11} Fp FC12 FC12 Fc[5]}


 S392C3 ::~S392C3(){ note_dtor("S392C3", this);}
void  S392C3 ::v3(){vfunc_called(this, "_ZN6S392C32v3Ev");}
void  S392C3 ::v4(){vfunc_called(this, "_ZN6S392C32v4Ev");}
void  S392C3 ::v5(){vfunc_called(this, "_ZN6S392C32v5Ev");}
void  S392C3 ::v6(){vfunc_called(this, "_ZN6S392C32v6Ev");}
void  S392C3 ::v7(){vfunc_called(this, "_ZN6S392C32v7Ev");}
void  S392C3 ::v8(){vfunc_called(this, "_ZN6S392C32v8Ev");}
void  S392C3 ::v9(){vfunc_called(this, "_ZN6S392C32v9Ev");}
S392C3 ::S392C3(){ note_ctor("S392C3", this);} // tgen

static void Test_S392C3()
{
  extern Class_Descriptor cd_S392C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S392C3, buf);
    S392C3 *dp, &lv = *(dp=new (buf) S392C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S392C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S392C3)");
    check_base_class_offset(lv, (S3221C8_nt*)(S392C4*), ABISELECT(8,4), "S392C3");
    check_base_class_offset(lv, (S392C4*), ABISELECT(8,4), "S392C3");
    check_field_offset(lv, s392c3f0, ABISELECT(16,8), "S392C3.s392c3f0");
    check_field_offset(lv, s392c3f1, ABISELECT(24,12), "S392C3.s392c3f1");
    check_field_offset(lv, s392c3f2, ABISELECT(32,16), "S392C3.s392c3f2");
    check_field_offset(lv, s392c3f3, ABISELECT(40,20), "S392C3.s392c3f3");
    check_field_offset(lv, s392c3f4, ABISELECT(64,32), "S392C3.s392c3f4");
    check_field_offset(lv, s392c3f5, ABISELECT(68,36), "S392C3.s392c3f5");
    check_field_offset(lv, s392c3f6, ABISELECT(84,52), "S392C3.s392c3f6");
    check_field_offset(lv, s392c3f7, ABISELECT(104,68), "S392C3.s392c3f7");
    check_field_offset(lv, s392c3f8, ABISELECT(112,72), "S392C3.s392c3f8");
    check_field_offset(lv, s392c3f9, ABISELECT(128,88), "S392C3.s392c3f9");
    check_field_offset(lv, s392c3f10, ABISELECT(144,104), "S392C3.s392c3f10");
    test_class_info(&lv, &cd_S392C3);
    dp->~S392C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS392C3(Test_S392C3, "S392C3", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN6S392C3C1Ev();
extern void _ZN6S392C3D1Ev();
Name_Map name_map_S392C3[] = {
  NSPAIR(_ZN6S392C3C1Ev),
  NSPAIR(_ZN6S392C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S392C4;
extern VTBL_ENTRY _ZTI6S392C4[];
static Base_Class bases_S392C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S392C4,    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 _ZTI6S392C3[];
extern void _ZN6S392C3D1Ev();
extern void _ZN6S392C3D0Ev();
extern void _ZN6S392C32v3Ev();
extern void _ZN6S392C32v4Ev();
extern void _ZN6S392C32v5Ev();
extern void _ZN6S392C32v6Ev();
extern void _ZN6S392C32v7Ev();
extern void _ZN6S392C32v8Ev();
extern void _ZN6S392C32v9Ev();
static  VTBL_ENTRY vtc_S392C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S392C3[0]),
  (VTBL_ENTRY)&_ZN6S392C3D1Ev,
  (VTBL_ENTRY)&_ZN6S392C3D0Ev,
  (VTBL_ENTRY)&_ZN6S392C32v3Ev,
  (VTBL_ENTRY)&_ZN6S392C32v4Ev,
  (VTBL_ENTRY)&_ZN6S392C32v5Ev,
  (VTBL_ENTRY)&_ZN6S392C32v6Ev,
  (VTBL_ENTRY)&_ZN6S392C32v7Ev,
  (VTBL_ENTRY)&_ZN6S392C32v8Ev,
  (VTBL_ENTRY)&_ZN6S392C32v9Ev,
};
extern VTBL_ENTRY _ZTI6S392C3[];
extern  VTBL_ENTRY _ZTV6S392C3[];
Class_Descriptor cd_S392C3 = {  "S392C3", // class name
  bases_S392C3, 2,
  &(vtc_S392C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI6S392C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV6S392C3),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  S392C17_nt  {
  void *s392c17f0;
  void  mf392c17(); // _ZN10S392C17_nt8mf392c17Ev
};
//SIG(-1 S392C17_nt) C1{ m Fp}


void  S392C17_nt ::mf392c17(){}

//skip512 S392C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S392C18_nt  {
  int s392c18f0;
  char s392c18f1;
  void  mf392c18(); // _ZN10S392C18_nt8mf392c18Ev
};
//SIG(-1 S392C18_nt) C1{ m Fi Fc}


void  S392C18_nt ::mf392c18(){}

//skip512 S392C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S392C2  : S392C3 {
  int s392c2f0;
  ::S392C17_nt s392c2f1;
  ::S392C18_nt s392c2f2;
  int s392c2f3[6];
  virtual void  v10(); // _ZN6S392C23v10Ev
  virtual void  v11(); // _ZN6S392C23v11Ev
  ~S392C2(); // tgen
  S392C2(); // tgen
};
//SIG(-1 S392C2) C1{ BC2{ BC3{ BC4{ m Fi}} vd v3 v4 v5 v6 v7 v8 v9 FC5{ m Fp} FC6{ m Fp} FC6 FC7{ m Fi FC8{ BC9{ m Fp Fi}}} Fc FC10{ m FC11{ m Fi[2]} FC12{ m Fi[2]}} FC13{ m FC11 FC12} Fp FC13 FC13 Fc[5]} v1 v2 Fi FC14{ m Fp} FC15{ m Fi Fc} Fi[6]}


void  S392C2 ::v10(){vfunc_called(this, "_ZN6S392C23v10Ev");}
void  S392C2 ::v11(){vfunc_called(this, "_ZN6S392C23v11Ev");}
S392C2 ::~S392C2(){ note_dtor("S392C2", this);} // tgen
S392C2 ::S392C2(){ note_ctor("S392C2", this);} // tgen

static void Test_S392C2()
{
  extern Class_Descriptor cd_S392C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,39)];
    init_test(&cd_S392C2, buf);
    S392C2 *dp, &lv = *(dp=new (buf) S392C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,152), "sizeof(S392C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S392C2)");
    check_base_class_offset(lv, (S3221C8_nt*)(S392C4*)(S392C3*), ABISELECT(8,4), "S392C2");
    check_base_class_offset(lv, (S392C4*)(S392C3*), ABISELECT(8,4), "S392C2");
    check_base_class_offset(lv, (S392C3*), 0, "S392C2");
    check_field_offset(lv, s392c2f0, ABISELECT(152,112), "S392C2.s392c2f0");
    check_field_offset(lv, s392c2f1, ABISELECT(160,116), "S392C2.s392c2f1");
    check_field_offset(lv, s392c2f2, ABISELECT(168,120), "S392C2.s392c2f2");
    check_field_offset(lv, s392c2f3, ABISELECT(176,128), "S392C2.s392c2f3");
    test_class_info(&lv, &cd_S392C2);
    dp->~S392C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS392C2(Test_S392C2, "S392C2", ABISELECT(200,152));

#else // __cplusplus

extern void _ZN6S392C2C1Ev();
extern void _ZN6S392C2D1Ev();
Name_Map name_map_S392C2[] = {
  NSPAIR(_ZN6S392C2C1Ev),
  NSPAIR(_ZN6S392C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S392C4;
extern VTBL_ENTRY _ZTI6S392C4[];
extern Class_Descriptor cd_S392C3;
extern VTBL_ENTRY _ZTI6S392C3[];
extern  VTBL_ENTRY _ZTV6S392C3[];
static Base_Class bases_S392C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S392C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S392C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S392C2[];
extern void _ZN6S392C2D1Ev();
extern void _ZN6S392C2D0Ev();
extern void _ZN6S392C32v3Ev();
extern void _ZN6S392C32v4Ev();
extern void _ZN6S392C32v5Ev();
extern void _ZN6S392C32v6Ev();
extern void _ZN6S392C32v7Ev();
extern void _ZN6S392C32v8Ev();
extern void _ZN6S392C32v9Ev();
extern void _ZN6S392C23v10Ev();
extern void _ZN6S392C23v11Ev();
static  VTBL_ENTRY vtc_S392C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S392C2[0]),
  (VTBL_ENTRY)&_ZN6S392C2D1Ev,
  (VTBL_ENTRY)&_ZN6S392C2D0Ev,
  (VTBL_ENTRY)&_ZN6S392C32v3Ev,
  (VTBL_ENTRY)&_ZN6S392C32v4Ev,
  (VTBL_ENTRY)&_ZN6S392C32v5Ev,
  (VTBL_ENTRY)&_ZN6S392C32v6Ev,
  (VTBL_ENTRY)&_ZN6S392C32v7Ev,
  (VTBL_ENTRY)&_ZN6S392C32v8Ev,
  (VTBL_ENTRY)&_ZN6S392C32v9Ev,
  (VTBL_ENTRY)&_ZN6S392C23v10Ev,
  (VTBL_ENTRY)&_ZN6S392C23v11Ev,
};
extern VTBL_ENTRY _ZTI6S392C2[];
extern  VTBL_ENTRY _ZTV6S392C2[];
Class_Descriptor cd_S392C2 = {  "S392C2", // class name
  bases_S392C2, 3,
  &(vtc_S392C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,152), // object size
  NSPAIRA(_ZTI6S392C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S392C2),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  S392C1  : S392C2 {
  virtual  ~S392C1(); // _ZN6S392C1D1Ev
  virtual void  v1(); // _ZN6S392C12v1Ev
  virtual void  v2(); // _ZN6S392C12v2Ev
  S392C1(); // tgen
};
//SIG(1 S392C1) C1{ BC2{ BC3{ BC4{ BC5{ m Fi}} vd v3 v4 v5 v6 v7 v8 v9 FC6{ m Fp} FC7{ m Fp} FC7 FC8{ m Fi FC9{ BC10{ m Fp Fi}}} Fc FC11{ m FC12{ m Fi[2]} FC13{ m Fi[2]}} FC14{ m FC12 FC13} Fp FC14 FC14 Fc[5]} v10 v11 Fi FC15{ m Fp} FC16{ m Fi Fc} Fi[6]} vd v1 v2}


 S392C1 ::~S392C1(){ note_dtor("S392C1", this);}
void  S392C1 ::v1(){vfunc_called(this, "_ZN6S392C12v1Ev");}
void  S392C1 ::v2(){vfunc_called(this, "_ZN6S392C12v2Ev");}
S392C1 ::S392C1(){ note_ctor("S392C1", this);} // tgen

static void Test_S392C1()
{
  extern Class_Descriptor cd_S392C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,39)];
    init_test(&cd_S392C1, buf);
    S392C1 *dp, &lv = *(dp=new (buf) S392C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,152), "sizeof(S392C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S392C1)");
    check_base_class_offset(lv, (S3221C8_nt*)(S392C4*)(S392C3*)(S392C2*), ABISELECT(8,4), "S392C1");
    check_base_class_offset(lv, (S392C4*)(S392C3*)(S392C2*), ABISELECT(8,4), "S392C1");
    check_base_class_offset(lv, (S392C3*)(S392C2*), 0, "S392C1");
    check_base_class_offset(lv, (S392C2*), 0, "S392C1");
    test_class_info(&lv, &cd_S392C1);
    dp->~S392C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS392C1(Test_S392C1, "S392C1", ABISELECT(200,152));

#else // __cplusplus

extern void _ZN6S392C1C1Ev();
extern void _ZN6S392C1D1Ev();
Name_Map name_map_S392C1[] = {
  NSPAIR(_ZN6S392C1C1Ev),
  NSPAIR(_ZN6S392C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S392C4;
extern VTBL_ENTRY _ZTI6S392C4[];
extern Class_Descriptor cd_S392C3;
extern VTBL_ENTRY _ZTI6S392C3[];
extern  VTBL_ENTRY _ZTV6S392C3[];
extern Class_Descriptor cd_S392C2;
extern VTBL_ENTRY _ZTI6S392C2[];
extern  VTBL_ENTRY _ZTV6S392C2[];
static Base_Class bases_S392C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S392C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S392C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S392C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S392C1[];
extern void _ZN6S392C1D1Ev();
extern void _ZN6S392C1D0Ev();
extern void _ZN6S392C32v3Ev();
extern void _ZN6S392C32v4Ev();
extern void _ZN6S392C32v5Ev();
extern void _ZN6S392C32v6Ev();
extern void _ZN6S392C32v7Ev();
extern void _ZN6S392C32v8Ev();
extern void _ZN6S392C32v9Ev();
extern void _ZN6S392C23v10Ev();
extern void _ZN6S392C23v11Ev();
extern void _ZN6S392C12v1Ev();
extern void _ZN6S392C12v2Ev();
static  VTBL_ENTRY vtc_S392C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S392C1[0]),
  (VTBL_ENTRY)&_ZN6S392C1D1Ev,
  (VTBL_ENTRY)&_ZN6S392C1D0Ev,
  (VTBL_ENTRY)&_ZN6S392C32v3Ev,
  (VTBL_ENTRY)&_ZN6S392C32v4Ev,
  (VTBL_ENTRY)&_ZN6S392C32v5Ev,
  (VTBL_ENTRY)&_ZN6S392C32v6Ev,
  (VTBL_ENTRY)&_ZN6S392C32v7Ev,
  (VTBL_ENTRY)&_ZN6S392C32v8Ev,
  (VTBL_ENTRY)&_ZN6S392C32v9Ev,
  (VTBL_ENTRY)&_ZN6S392C23v10Ev,
  (VTBL_ENTRY)&_ZN6S392C23v11Ev,
  (VTBL_ENTRY)&_ZN6S392C12v1Ev,
  (VTBL_ENTRY)&_ZN6S392C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S392C1[];
extern  VTBL_ENTRY _ZTV6S392C1[];
Class_Descriptor cd_S392C1 = {  "S392C1", // class name
  bases_S392C1, 4,
  &(vtc_S392C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,152), // object size
  NSPAIRA(_ZTI6S392C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S392C1),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  S2632C2  : S3221C8_nt {
};
//SIG(-1 S2632C2) C1{ BC2{ m Fi}}



static void Test_S2632C2()
{
  extern Class_Descriptor cd_S2632C2;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S2632C2, buf);
    S2632C2 &lv = *(new (buf) S2632C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S2632C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2632C2)");
    check_base_class_offset(lv, (S3221C8_nt*), 0, "S2632C2");
    test_class_info(&lv, &cd_S2632C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2632C2(Test_S2632C2, "S2632C2", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S2632C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2632C2 = {  "S2632C2", // class name
  bases_S2632C2, 1,
  0, // no vftv
  0, //no vtt
  4, // 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  S2632C4_nt  {
  ::S1098C5_nt s2632c4f0;
  void  mf2632c4(); // _ZN10S2632C4_nt8mf2632c4Ev
};
//SIG(-1 S2632C4_nt) C1{ m FC2{ m Fp}}


void  S2632C4_nt ::mf2632c4(){}

//skip512 S2632C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2632C13  {
  int s2632c13f0;
  ::S1098C8_nt s2632c13f1;
  void  mf2632c13(); // _ZN8S2632C139mf2632c13Ev
};
//SIG(-1 S2632C13) C1{ m Fi FC2{ BC3{ m Fp Fi}}}


void  S2632C13 ::mf2632c13(){}

static void Test_S2632C13()
{
  {
    init_simple_test("S2632C13");
    S2632C13 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S2632C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2632C13)");
    check_field_offset(lv, s2632c13f0, 0, "S2632C13.s2632c13f0");
    check_field_offset(lv, s2632c13f1, ABISELECT(8,4), "S2632C13.s2632c13f1");
  }
}
static Arrange_To_Call_Me vS2632C13(Test_S2632C13, "S2632C13", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2632C18_nt  {
  void *s2632c18f0;
  void  mf2632c18(); // _ZN11S2632C18_nt9mf2632c18Ev
};
//SIG(-1 S2632C18_nt) C1{ m Fp}


void  S2632C18_nt ::mf2632c18(){}

//skip512 S2632C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2632C1  : S2632C2 {
  ::S2632C4_nt s2632c1f0;
  ::S2632C4_nt s2632c1f1;
  ::S2632C4_nt s2632c1f2;
  ::S2632C4_nt s2632c1f3;
  ::S2632C4_nt s2632c1f4;
  ::S2632C4_nt s2632c1f5;
  ::S2632C4_nt s2632c1f6;
  __tsi64 s2632c1f7;
  char s2632c1f8;
  ::S3221C4_nt s2632c1f9;
  int s2632c1f10;
  ::S1098C7_nt s2632c1f11;
  ::S1093C17 s2632c1f12;
  char s2632c1f13[2];
  int s2632c1f14;
  ::S2632C13 s2632c1f15;
  ::S2632C13 s2632c1f16;
  ::S1093C6_nt s2632c1f17;
  __tsi64 s2632c1f18[2];
  ::S392C17_nt s2632c1f19;
  ::S2632C18_nt s2632c1f20;
  ::S2632C4_nt s2632c1f21;
  void *s2632c1f22[2];
  ::S2632C18_nt s2632c1f23;
};
//SIG(1 S2632C1) C1{ BC2{ BC3{ m Fi}} FC4{ m FC5{ m Fp}} FC4 FC4 FC4 FC4 FC4 FC4 FL Fc FC6{ m Fi[2]} Fi FC7{ m Fi FC8{ BC9{ m Fp Fi}}} FC10{ m Fi FC8} Fc[2] Fi FC11{ m Fi FC8} FC11 FC12{ m Fp} FL[2] FC13{ m Fp} FC14{ m Fp} FC4 Fp[2] FC14}



static void Test_S2632C1()
{
  extern Class_Descriptor cd_S2632C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,40)];
    init_test(&cd_S2632C1, buf);
    S2632C1 &lv = *(new (buf) S2632C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,156), "sizeof(S2632C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2632C1)");
    check_base_class_offset(lv, (S3221C8_nt*)(S2632C2*), 0, "S2632C1");
    check_base_class_offset(lv, (S2632C2*), 0, "S2632C1");
    check_field_offset(lv, s2632c1f0, ABISELECT(8,4), "S2632C1.s2632c1f0");
    check_field_offset(lv, s2632c1f1, ABISELECT(16,8), "S2632C1.s2632c1f1");
    check_field_offset(lv, s2632c1f2, ABISELECT(24,12), "S2632C1.s2632c1f2");
    check_field_offset(lv, s2632c1f3, ABISELECT(32,16), "S2632C1.s2632c1f3");
    check_field_offset(lv, s2632c1f4, ABISELECT(40,20), "S2632C1.s2632c1f4");
    check_field_offset(lv, s2632c1f5, ABISELECT(48,24), "S2632C1.s2632c1f5");
    check_field_offset(lv, s2632c1f6, ABISELECT(56,28), "S2632C1.s2632c1f6");
    check_field_offset(lv, s2632c1f7, ABISELECT(64,32), "S2632C1.s2632c1f7");
    check_field_offset(lv, s2632c1f8, ABISELECT(72,40), "S2632C1.s2632c1f8");
    check_field_offset(lv, s2632c1f9, ABISELECT(76,44), "S2632C1.s2632c1f9");
    check_field_offset(lv, s2632c1f10, ABISELECT(84,52), "S2632C1.s2632c1f10");
    check_field_offset(lv, s2632c1f11, ABISELECT(88,56), "S2632C1.s2632c1f11");
    check_field_offset(lv, s2632c1f12, ABISELECT(112,68), "S2632C1.s2632c1f12");
    check_field_offset(lv, s2632c1f13, ABISELECT(136,80), "S2632C1.s2632c1f13");
    check_field_offset(lv, s2632c1f14, ABISELECT(140,84), "S2632C1.s2632c1f14");
    check_field_offset(lv, s2632c1f15, ABISELECT(144,88), "S2632C1.s2632c1f15");
    check_field_offset(lv, s2632c1f16, ABISELECT(168,100), "S2632C1.s2632c1f16");
    check_field_offset(lv, s2632c1f17, ABISELECT(192,112), "S2632C1.s2632c1f17");
    check_field_offset(lv, s2632c1f18, ABISELECT(200,116), "S2632C1.s2632c1f18");
    check_field_offset(lv, s2632c1f19, ABISELECT(216,132), "S2632C1.s2632c1f19");
    check_field_offset(lv, s2632c1f20, ABISELECT(224,136), "S2632C1.s2632c1f20");
    check_field_offset(lv, s2632c1f21, ABISELECT(232,140), "S2632C1.s2632c1f21");
    check_field_offset(lv, s2632c1f22, ABISELECT(240,144), "S2632C1.s2632c1f22");
    check_field_offset(lv, s2632c1f23, ABISELECT(256,152), "S2632C1.s2632c1f23");
    test_class_info(&lv, &cd_S2632C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2632C1(Test_S2632C1, "S2632C1", ABISELECT(264,156));

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S2632C2;
static Base_Class bases_S2632C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2632C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2632C1 = {  "S2632C1", // class name
  bases_S2632C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(264,156), // 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  S6262C6  : S5643C3_nt , virtual S5408C7_nt , virtual S5643C2 {
  virtual  ~S6262C6(); // _ZN7S6262C6D2Ev
  S6262C6(); // tgen
};
//SIG(-1 S6262C6) C1{ BC2{ m FD} VBC3{ m} VBC4{ m FC2[7]} vd}


 S6262C6 ::~S6262C6(){ note_dtor("S6262C6", this);}
S6262C6 ::S6262C6(){ note_ctor("S6262C6", this);} // tgen

static void Test_S6262C6()
{
  extern Class_Descriptor cd_S6262C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,26)];
    init_test(&cd_S6262C6, buf);
    S6262C6 *dp, &lv = *(dp=new (buf) S6262C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S6262C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6262C6)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(16,4), "S6262C6");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S6262C6");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(32,16), "S6262C6");
    test_class_info(&lv, &cd_S6262C6);
    dp->~S6262C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6262C6(Test_S6262C6, "S6262C6", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN7S6262C6C1Ev();
extern void _ZN7S6262C6D2Ev();
Name_Map name_map_S6262C6[] = {
  NSPAIR(_ZN7S6262C6C1Ev),
  NSPAIR(_ZN7S6262C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
static Base_Class bases_S6262C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    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_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5643C2,    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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6262C6[];
extern void _ZN7S6262C6D1Ev();
extern void _ZN7S6262C6D0Ev();
static  VTBL_ENTRY vtc_S6262C6[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C6[0]),
  (VTBL_ENTRY)&_ZN7S6262C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C6D0Ev,
};
extern VTBL_ENTRY _ZTV7S6262C6[];
static  VTT_ENTRY vtt_S6262C6[] = {
  {&(_ZTV7S6262C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S6262C6[];
extern  VTBL_ENTRY _ZTV7S6262C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C6[];
Class_Descriptor cd_S6262C6 = {  "S6262C6", // class name
  bases_S6262C6, 3,
  &(vtc_S6262C6[0]), // expected_vtbl_contents
  &(vtt_S6262C6[0]), // expected_vtt_contents
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI7S6262C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6262C6),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6262C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6262C9  : S5643C3_nt , S5643C2 , virtual S5408C7_nt {
  ~S6262C9(); // tgen
  S6262C9(); // tgen
};
//SIG(-1 S6262C9) C1{ BC2{ m FD} BC3{ m FC2[7]} VBC4{ m}}


S6262C9 ::~S6262C9(){ note_dtor("S6262C9", this);} // tgen
S6262C9 ::S6262C9(){ note_ctor("S6262C9", this);} // tgen

static void Test_S6262C9()
{
  extern Class_Descriptor cd_S6262C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,26)];
    init_test(&cd_S6262C9, buf);
    S6262C9 *dp, &lv = *(dp=new (buf) S6262C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S6262C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6262C9)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(16,4), "S6262C9");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(32,16), "S6262C9");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S6262C9");
    test_class_info(&lv, &cd_S6262C9);
    dp->~S6262C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6262C9(Test_S6262C9, "S6262C9", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN7S6262C9C1Ev();
extern void _ZN7S6262C9D1Ev();
Name_Map name_map_S6262C9[] = {
  NSPAIR(_ZN7S6262C9C1Ev),
  NSPAIR(_ZN7S6262C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
static Base_Class bases_S6262C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    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_S5643C2,    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_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S6262C9[];
static  VTBL_ENTRY vtc_S6262C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C9[0]),
};
extern VTBL_ENTRY _ZTV7S6262C9[];
static  VTT_ENTRY vtt_S6262C9[] = {
  {&(_ZTV7S6262C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6262C9[];
extern  VTBL_ENTRY _ZTV7S6262C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C9[];
Class_Descriptor cd_S6262C9 = {  "S6262C9", // class name
  bases_S6262C9, 3,
  &(vtc_S6262C9[0]), // expected_vtbl_contents
  &(vtt_S6262C9[0]), // expected_vtt_contents
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI7S6262C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6262C9),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6262C9),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6262C4  : virtual S5408C7_nt , virtual S6262C6 , virtual S6262C9 , S5643C3_nt {
  ~S6262C4(); // tgen
  S6262C4(); // tgen
};
//SIG(-1 S6262C4) C1{ VBC2{ m} VBC3{ BC4{ m FD} VBC2 VBC5{ m FC4[7]} vd} VBC6{ BC4 BC5 VBC2} BC4}


S6262C4 ::~S6262C4(){ note_dtor("S6262C4", this);} // tgen
S6262C4 ::S6262C4(){ note_ctor("S6262C4", this);} // tgen

static void Test_S6262C4()
{
  extern Class_Descriptor cd_S6262C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,55)];
    init_test(&cd_S6262C4, buf);
    S6262C4 *dp, &lv = *(dp=new (buf) S6262C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,216), "sizeof(S6262C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6262C4)");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S6262C4");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C6*), 0, "S6262C4");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C9*), 0, "S6262C4");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C6*), ABISELECT(48,20), "S6262C4");
    check_base_class_offset(lv, (S5643C2*)(S6262C6*), ABISELECT(64,32), "S6262C4");
    check_base_class_offset(lv, (S6262C6*), ABISELECT(32,16), "S6262C4");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C9*), ABISELECT(192,120), "S6262C4");
    check_base_class_offset(lv, (S5643C2*)(S6262C9*), ABISELECT(208,132), "S6262C4");
    check_base_class_offset(lv, (S6262C9*), ABISELECT(176,116), "S6262C4");
    /*is_ambiguous_... S6262C4::S5643C3_nt */ AMB_check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(16,4), "S6262C4");
    test_class_info(&lv, &cd_S6262C4);
    dp->~S6262C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6262C4(Test_S6262C4, "S6262C4", ABISELECT(320,216));

#else // __cplusplus

extern void _ZN7S6262C4C1Ev();
extern void _ZN7S6262C4D1Ev();
Name_Map name_map_S6262C4[] = {
  NSPAIR(_ZN7S6262C4C1Ev),
  NSPAIR(_ZN7S6262C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C6;
extern VTBL_ENTRY _ZTI7S6262C6[];
extern  VTBL_ENTRY _ZTV7S6262C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C9;
extern VTBL_ENTRY _ZTI7S6262C9[];
extern  VTBL_ENTRY _ZTV7S6262C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C9[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
static Base_Class bases_S6262C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5643C3_nt,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5643C2,    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_S6262C6,    ABISELECT(32,16), //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(192,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
    6, //immediately_derived
  0, 0},
  {&cd_S5643C2,    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
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6262C9,    ABISELECT(176,116), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    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 _ZTI7S6262C4[];
extern void _ZN7S6262C4D1Ev();
extern void _ZN7S6262C4D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S6262C4D1Ev,_ZTv0_n20_N7S6262C4D1Ev)();
extern void ABISELECT(_ZThn32_N7S6262C4D1Ev,_ZThn16_N7S6262C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6262C4D0Ev,_ZTv0_n20_N7S6262C4D0Ev)();
extern void ABISELECT(_ZThn32_N7S6262C4D0Ev,_ZThn16_N7S6262C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6262C4[] = {
  ABISELECT(176,116),
  ABISELECT(64,32),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C4[0]),
  (VTBL_ENTRY)&_ZN7S6262C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C4D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6262C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6262C4D1Ev,_ZTv0_n20_N7S6262C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6262C4D0Ev,_ZTv0_n20_N7S6262C4D0Ev),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI7S6262C4[0]),
};
extern VTBL_ENTRY _ZTV7S6262C4[];
extern void _ZN7S6262C6D1Ev();
extern void _ZN7S6262C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6262C6__7S6262C4[] = {
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C6[0]),
  (VTBL_ENTRY)&_ZN7S6262C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__7S6262C4[] = {
  ABISELECT(-176,-116),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C9[0]),
};
static  VTT_ENTRY vtt_S6262C4[] = {
  {&(_ZTV7S6262C4[6]),  6,18},
  {&(_ZTV7S6262C4[13]),  13,18},
  {&(_ZTV7S6262C4[18]),  18,18},
  {&(_tg__ZTV7S6262C6__7S6262C4[4]),  4,6},
  {&(_tg__ZTV7S6262C9__7S6262C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6262C4[];
extern  VTBL_ENTRY _ZTV7S6262C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C4[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6262C4D0Ev,_ZTv0_n20_N7S6262C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6262C4D0Ev,_ZThn16_N7S6262C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6262C4D1Ev,_ZTv0_n20_N7S6262C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6262C4D1Ev,_ZThn16_N7S6262C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6262C4 = {  "S6262C4", // class name
  bases_S6262C4, 8,
  &(vtc_S6262C4[0]), // expected_vtbl_contents
  &(vtt_S6262C4[0]), // expected_vtt_contents
  ABISELECT(320,216), // object size
  NSPAIRA(_ZTI7S6262C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6262C4),18, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6262C4),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6262C11  : virtual S5643C3_nt , virtual S5643C2 , virtual S5408C7_nt {
  ::S5643C2 s6262c11f0[10];
  ~S6262C11(); // tgen
  S6262C11(); // tgen
};
//SIG(-1 S6262C11) C1{ VBC2{ m FD} VBC3{ m FC2[7]} VBC4{ m} FC3[10]}


S6262C11 ::~S6262C11(){ note_dtor("S6262C11", this);} // tgen
S6262C11 ::S6262C11(){ note_ctor("S6262C11", this);} // tgen

static void Test_S6262C11()
{
  extern Class_Descriptor cd_S6262C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(80,236)];
    init_test(&cd_S6262C11, buf);
    S6262C11 *dp, &lv = *(dp=new (buf) S6262C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1264,940), "sizeof(S6262C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6262C11)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(1136,844), "S6262C11");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(1152,856), "S6262C11");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S6262C11");
    check_field_offset(lv, s6262c11f0, ABISELECT(16,4), "S6262C11.s6262c11f0");
    test_class_info(&lv, &cd_S6262C11);
    dp->~S6262C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6262C11(Test_S6262C11, "S6262C11", ABISELECT(1264,940));

#else // __cplusplus

extern void _ZN8S6262C11C1Ev();
extern void _ZN8S6262C11D1Ev();
Name_Map name_map_S6262C11[] = {
  NSPAIR(_ZN8S6262C11C1Ev),
  NSPAIR(_ZN8S6262C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
static Base_Class bases_S6262C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(1136,844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5643C2,    ABISELECT(1152,856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S6262C11[];
static  VTBL_ENTRY vtc_S6262C11[] = {
  0,
  ABISELECT(1152,856),
  ABISELECT(1136,844),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C11[0]),
};
extern VTBL_ENTRY _ZTV8S6262C11[];
static  VTT_ENTRY vtt_S6262C11[] = {
  {&(_ZTV8S6262C11[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S6262C11[];
extern  VTBL_ENTRY _ZTV8S6262C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C11[];
Class_Descriptor cd_S6262C11 = {  "S6262C11", // class name
  bases_S6262C11, 3,
  &(vtc_S6262C11[0]), // expected_vtbl_contents
  &(vtt_S6262C11[0]), // expected_vtt_contents
  ABISELECT(1264,940), // object size
  NSPAIRA(_ZTI8S6262C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6262C11),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6262C11),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6262C10  : virtual S5408C7_nt , S6262C11 , S6262C6 , S6262C9 {
  ~S6262C10(); // tgen
  S6262C10(); // tgen
};
//SIG(-1 S6262C10) C1{ VBC2{ m} BC3{ VBC4{ m FD} VBC5{ m FC4[7]} VBC2 FC5[10]} BC6{ BC4 VBC2 VBC5 vd} BC7{ BC4 BC5 VBC2}}


S6262C10 ::~S6262C10(){ note_dtor("S6262C10", this);} // tgen
S6262C10 ::S6262C10(){ note_ctor("S6262C10", this);} // tgen

static void Test_S6262C10()
{
  extern Class_Descriptor cd_S6262C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(91,265)];
    init_test(&cd_S6262C10, buf);
    S6262C10 *dp, &lv = *(dp=new (buf) S6262C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1440,1056), "sizeof(S6262C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6262C10)");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S6262C10");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C11*), 0, "S6262C10");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C6*), 0, "S6262C10");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C9*), 0, "S6262C10");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C11*), ABISELECT(1312,960), "S6262C10");
    check_base_class_offset(lv, (S5643C2*)(S6262C11*), ABISELECT(1328,972), "S6262C10");
    check_base_class_offset(lv, (S5643C2*)(S6262C6*), ABISELECT(1328,972), "S6262C10");
    check_base_class_offset(lv, (S6262C11*), 0, "S6262C10");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C6*), ABISELECT(1152,848), "S6262C10");
    check_base_class_offset(lv, (S6262C6*), ABISELECT(1136,844), "S6262C10");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C9*), ABISELECT(1184,864), "S6262C10");
    check_base_class_offset(lv, (S5643C2*)(S6262C9*), ABISELECT(1200,876), "S6262C10");
    check_base_class_offset(lv, (S6262C9*), ABISELECT(1168,860), "S6262C10");
    test_class_info(&lv, &cd_S6262C10);
    dp->~S6262C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6262C10(Test_S6262C10, "S6262C10", ABISELECT(1440,1056));

#else // __cplusplus

extern void _ZN8S6262C10C1Ev();
extern void _ZN8S6262C10D1Ev();
Name_Map name_map_S6262C10[] = {
  NSPAIR(_ZN8S6262C10C1Ev),
  NSPAIR(_ZN8S6262C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C11;
extern VTBL_ENTRY _ZTI8S6262C11[];
extern  VTBL_ENTRY _ZTV8S6262C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C11[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S6262C6;
extern VTBL_ENTRY _ZTI7S6262C6[];
extern  VTBL_ENTRY _ZTV7S6262C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C9;
extern VTBL_ENTRY _ZTI7S6262C9[];
extern  VTBL_ENTRY _ZTV7S6262C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C9[];
static Base_Class bases_S6262C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5643C3_nt,    ABISELECT(1312,960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1328,972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C11,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C3_nt,    ABISELECT(1152,848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C6,    ABISELECT(1136,844), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C3_nt,    ABISELECT(1184,864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1200,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C9,    ABISELECT(1168,860), //bcp->offset
    13, //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 _ZTI8S6262C10[];
extern void _ZN8S6262C10D1Ev();
extern void _ZN8S6262C10D0Ev();
extern void ABISELECT(_ZThn1136_N8S6262C10D1Ev,_ZThn844_N8S6262C10D1Ev)();
extern void ABISELECT(_ZThn1136_N8S6262C10D0Ev,_ZThn844_N8S6262C10D0Ev)();
static  VTBL_ENTRY vtc_S6262C10[] = {
  0,
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C10[0]),
  (VTBL_ENTRY)&_ZN8S6262C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6262C10D0Ev,
  ABISELECT(192,128),
  ABISELECT(-1136,-844),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S6262C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S6262C10D1Ev,_ZThn844_N8S6262C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S6262C10D0Ev,_ZThn844_N8S6262C10D0Ev),
  ABISELECT(-1168,-860),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S6262C10[0]),
};
extern VTBL_ENTRY _ZTV8S6262C10[];
static  VTBL_ENTRY _tg__ZTV8S6262C11__8S6262C10[] = {
  0,
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C11[0]),
};
extern void _ZN7S6262C6D1Ev();
extern void _ZN7S6262C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6262C6__8S6262C10[] = {
  ABISELECT(192,128),
  ABISELECT(-1136,-844),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C6[0]),
  (VTBL_ENTRY)&_ZN7S6262C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__8S6262C10[] = {
  ABISELECT(-1168,-860),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C9[0]),
};
static  VTT_ENTRY vtt_S6262C10[] = {
  {&(_ZTV8S6262C10[5]),  5,16},
  {&(_tg__ZTV8S6262C11__8S6262C10[5]),  5,5},
  {&(_tg__ZTV7S6262C6__8S6262C10[4]),  4,6},
  {&(_tg__ZTV7S6262C9__8S6262C10[3]),  3,3},
  {&(_ZTV8S6262C10[11]),  11,16},
  {&(_ZTV8S6262C10[16]),  16,16},
};
extern VTBL_ENTRY _ZTI8S6262C10[];
extern  VTBL_ENTRY _ZTV8S6262C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C10[];
Class_Descriptor cd_S6262C10 = {  "S6262C10", // class name
  bases_S6262C10, 9,
  &(vtc_S6262C10[0]), // expected_vtbl_contents
  &(vtt_S6262C10[0]), // expected_vtt_contents
  ABISELECT(1440,1056), // object size
  NSPAIRA(_ZTI8S6262C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6262C10),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6262C10),6, //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  S6262C3  : S6262C4 , virtual S6262C10 , S239C12_nt {
  virtual  ~S6262C3(); // _ZN7S6262C3D2Ev
  virtual void  v1(); // _ZN7S6262C32v1Ev
  S6262C3(); // tgen
};
//SIG(-1 S6262C3) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m FD} VBC3 VBC6{ m FC5[7]} vd} VBC7{ BC5 BC6 VBC3} BC5} VBC8{ VBC3 BC9{ VBC5 VBC6 VBC3 FC6[10]} BC4 BC7} BC10{ m} vd v1}


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

static void Test_S6262C3()
{
  extern Class_Descriptor cd_S6262C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(104,298)];
    init_test(&cd_S6262C3, buf);
    S6262C3 *dp, &lv = *(dp=new (buf) S6262C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1648,1188), "sizeof(S6262C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6262C3)");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C4*), 0, "S6262C3");
    /*is_ambiguous_... S6262C3::S6262C6 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S6262C6*), 0, "S6262C3");
    /*is_ambiguous_... S6262C3::S6262C9 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S6262C9*), 0, "S6262C3");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C10*), 0, "S6262C3");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C11*)(S6262C10*), 0, "S6262C3");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C6*)(S6262C10*), 0, "S6262C3");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C9*)(S6262C10*), 0, "S6262C3");
    /*is_ambiguous_... S6262C3::S6262C6 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S6262C6*), ABISELECT(48,20), "S6262C3");
    /*is_ambiguous_... S6262C3::S6262C6 */ AMB_check_base_class_offset(lv, (S5643C2*)(S6262C6*), ABISELECT(64,32), "S6262C3");
    check_base_class_offset(lv, (S5643C2*)(S6262C11*)(S6262C10*), ABISELECT(64,32), "S6262C3");
    check_base_class_offset(lv, (S5643C2*)(S6262C6*)(S6262C10*), ABISELECT(64,32), "S6262C3");
    check_base_class_offset(lv, (S6262C6*)(S6262C4*), ABISELECT(32,16), "S6262C3");
    /*is_ambiguous_... S6262C3::S6262C9 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S6262C9*), ABISELECT(192,120), "S6262C3");
    /*is_ambiguous_... S6262C3::S6262C9 */ AMB_check_base_class_offset(lv, (S5643C2*)(S6262C9*), ABISELECT(208,132), "S6262C3");
    check_base_class_offset(lv, (S6262C9*)(S6262C4*), ABISELECT(176,116), "S6262C3");
    /*is_ambiguous_... S6262C4::S5643C3_nt */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S6262C4*), ABISELECT(16,4), "S6262C3");
    check_base_class_offset(lv, (S6262C4*), 0, "S6262C3");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C11*)(S6262C10*), ABISELECT(1632,1176), "S6262C3");
    check_base_class_offset(lv, (S6262C11*)(S6262C10*), ABISELECT(320,216), "S6262C3");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C6*)(S6262C10*), ABISELECT(1472,1064), "S6262C3");
    check_base_class_offset(lv, (S6262C6*)(S6262C10*), ABISELECT(1456,1060), "S6262C3");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C9*)(S6262C10*), ABISELECT(1504,1080), "S6262C3");
    check_base_class_offset(lv, (S5643C2*)(S6262C9*)(S6262C10*), ABISELECT(1520,1092), "S6262C3");
    check_base_class_offset(lv, (S6262C9*)(S6262C10*), ABISELECT(1488,1076), "S6262C3");
    check_base_class_offset(lv, (S6262C10*), ABISELECT(320,216), "S6262C3");
    check_base_class_offset(lv, (S239C12_nt*), 0, "S6262C3");
    test_class_info(&lv, &cd_S6262C3);
    dp->~S6262C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6262C3(Test_S6262C3, "S6262C3", ABISELECT(1648,1188));

#else // __cplusplus

extern void _ZN7S6262C3C1Ev();
extern void _ZN7S6262C3D2Ev();
Name_Map name_map_S6262C3[] = {
  NSPAIR(_ZN7S6262C3C1Ev),
  NSPAIR(_ZN7S6262C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C6;
extern VTBL_ENTRY _ZTI7S6262C6[];
extern  VTBL_ENTRY _ZTV7S6262C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C9;
extern VTBL_ENTRY _ZTI7S6262C9[];
extern  VTBL_ENTRY _ZTV7S6262C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C9[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S6262C4;
extern VTBL_ENTRY _ZTI7S6262C4[];
extern  VTBL_ENTRY _ZTV7S6262C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S6262C11;
extern VTBL_ENTRY _ZTI8S6262C11[];
extern  VTBL_ENTRY _ZTV8S6262C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C11[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S6262C6;
extern VTBL_ENTRY _ZTI7S6262C6[];
extern  VTBL_ENTRY _ZTV7S6262C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C9;
extern VTBL_ENTRY _ZTI7S6262C9[];
extern  VTBL_ENTRY _ZTV7S6262C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C9[];
extern Class_Descriptor cd_S6262C10;
extern VTBL_ENTRY _ZTI8S6262C10[];
extern  VTBL_ENTRY _ZTV8S6262C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C10[];
extern Class_Descriptor cd_S239C12_nt;
extern VTBL_ENTRY _ZTI10S239C12_nt[];
static Base_Class bases_S6262C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C3_nt,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5643C2,    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_S6262C6,    ABISELECT(32,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S5643C3_nt,    ABISELECT(192,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
    6, //immediately_derived
  0, 0},
  {&cd_S5643C2,    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
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6262C9,    ABISELECT(176,116), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S5643C3_nt,    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
    8, //immediately_derived
  0, 0},
  {&cd_S6262C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C3_nt,    ABISELECT(1632,1176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C11,    ABISELECT(320,216), //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
    3, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1472,1064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C6,    ABISELECT(1456,1060), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1504,1080), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1520,1092), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C9,    ABISELECT(1488,1076), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6262C10,    ABISELECT(320,216), //bcp->offset
    21, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S239C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6262C3[];
extern void _ZN7S6262C3D1Ev();
extern void _ZN7S6262C3D0Ev();
extern void _ZN7S6262C32v1Ev();
extern void ABISELECT(_ZTv0_n40_N7S6262C3D1Ev,_ZTv0_n20_N7S6262C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S6262C3D1Ev,_ZThn16_N7S6262C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6262C3D0Ev,_ZTv0_n20_N7S6262C3D0Ev)();
extern void ABISELECT(_ZThn32_N7S6262C3D0Ev,_ZThn16_N7S6262C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6262C3D1Ev,_ZTv0_n24_N7S6262C3D1Ev)();
extern void ABISELECT(_ZThn320_N7S6262C3D1Ev,_ZThn216_N7S6262C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6262C3D0Ev,_ZTv0_n24_N7S6262C3D0Ev)();
extern void ABISELECT(_ZThn320_N7S6262C3D0Ev,_ZThn216_N7S6262C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n48_N7S6262C3D1Ev,_ZTvn844_n24_N7S6262C3D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N7S6262C3D0Ev,_ZTvn844_n24_N7S6262C3D0Ev)();
static  VTBL_ENTRY vtc_S6262C3[] = {
  ABISELECT(1632,1176),
  ABISELECT(320,216),
  ABISELECT(176,116),
  ABISELECT(64,32),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C3[0]),
  (VTBL_ENTRY)&_ZN7S6262C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6262C32v1Ev,
  ABISELECT(-32,-16),
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6262C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6262C3D1Ev,_ZTv0_n20_N7S6262C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6262C3D0Ev,_ZTv0_n20_N7S6262C3D0Ev),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI7S6262C3[0]),
  ABISELECT(-320,-216),
  ABISELECT(-320,-216),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  ABISELECT(-320,-216),
  (VTBL_ENTRY)&(_ZTI7S6262C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6262C3D1Ev,_ZTv0_n24_N7S6262C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6262C3D0Ev,_ZTv0_n24_N7S6262C3D0Ev),
  ABISELECT(-1392,-1028),
  ABISELECT(-1456,-1060),
  ABISELECT(-1456,-1060),
  (VTBL_ENTRY)&(_ZTI7S6262C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N7S6262C3D1Ev,_ZTvn844_n24_N7S6262C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N7S6262C3D0Ev,_ZTvn844_n24_N7S6262C3D0Ev),
  ABISELECT(-1488,-1076),
  ABISELECT(-1488,-1076),
  (VTBL_ENTRY)&(_ZTI7S6262C3[0]),
};
extern VTBL_ENTRY _ZTV7S6262C3[];
extern void _ZN7S6262C4D1Ev();
extern void _ZN7S6262C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6262C4__7S6262C3[] = {
  ABISELECT(176,116),
  ABISELECT(64,32),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C4[0]),
  (VTBL_ENTRY)&_ZN7S6262C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C4D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S6262C4D1Ev,_ZTv0_n20_N7S6262C4D1Ev)();
extern void ABISELECT(_ZThn32_N7S6262C4D1Ev,_ZThn16_N7S6262C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6262C4D0Ev,_ZTv0_n20_N7S6262C4D0Ev)();
extern void ABISELECT(_ZThn32_N7S6262C4D0Ev,_ZThn16_N7S6262C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6262C6__7S6262C4__7S6262C3[] = {
  ABISELECT(-32,-16),
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6262C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6262C4D1Ev,_ZTv0_n20_N7S6262C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6262C4D0Ev,_ZTv0_n20_N7S6262C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__7S6262C4__7S6262C3[] = {
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI7S6262C4[0]),
};
extern void _ZN7S6262C6D1Ev();
extern void _ZN7S6262C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6262C6__7S6262C3[] = {
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C6[0]),
  (VTBL_ENTRY)&_ZN7S6262C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__7S6262C3[] = {
  ABISELECT(-176,-116),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C9[0]),
};
extern void _ZN8S6262C10D1Ev();
extern void _ZN8S6262C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6262C10__7S6262C3[] = {
  ABISELECT(-320,-216),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C10[0]),
  (VTBL_ENTRY)&_ZN8S6262C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6262C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6262C118S6262C10__7S6262C3[] = {
  ABISELECT(-320,-216),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C11[0]),
};
extern void _ZN7S6262C6D1Ev();
extern void _ZN7S6262C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6262C68S6262C10__A1__7S6262C3[] = {
  ABISELECT(-1392,-1028),
  ABISELECT(-1456,-1060),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C6[0]),
  (VTBL_ENTRY)&_ZN7S6262C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6262C98S6262C10__A1__7S6262C3[] = {
  ABISELECT(-1488,-1076),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C9[0]),
};
extern void ABISELECT(_ZThn1136_N8S6262C10D1Ev,_ZThn844_N8S6262C10D1Ev)();
extern void ABISELECT(_ZThn1136_N8S6262C10D0Ev,_ZThn844_N8S6262C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6262C6__8S6262C10__7S6262C3[] = {
  ABISELECT(-1392,-1028),
  ABISELECT(-1456,-1060),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S6262C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S6262C10D1Ev,_ZThn844_N8S6262C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S6262C10D0Ev,_ZThn844_N8S6262C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__8S6262C10__7S6262C3[] = {
  ABISELECT(-1488,-1076),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S6262C10[0]),
};
static  VTT_ENTRY vtt_S6262C3[] = {
  {&(_ZTV7S6262C3[8]),  8,38},
  {&(_tg__ZTV7S6262C4__7S6262C3[6]),  6,8},
  {&(_tg__ZTV7S6262C6__7S6262C4__7S6262C3[5]),  5,7},
  {&(_tg__ZTV7S6262C9__7S6262C4__7S6262C3[3]),  3,3},
  {&(_ZTV7S6262C3[16]),  16,38},
  {&(_ZTV7S6262C3[21]),  21,38},
  {&(_ZTV7S6262C3[27]),  27,38},
  {&(_ZTV7S6262C3[33]),  33,38},
  {&(_ZTV7S6262C3[38]),  38,38},
  {&(_tg__ZTV7S6262C6__7S6262C3[4]),  4,6},
  {&(_tg__ZTV7S6262C9__7S6262C3[3]),  3,3},
  {&(_tg__ZTV8S6262C10__7S6262C3[5]),  5,7},
  {&(_tg__ZTV8S6262C118S6262C10__7S6262C3[5]),  5,5},
  {&(_tg__ZTV7S6262C68S6262C10__A1__7S6262C3[4]),  4,6},
  {&(_tg__ZTV7S6262C98S6262C10__A1__7S6262C3[3]),  3,3},
  {&(_tg__ZTV7S6262C6__8S6262C10__7S6262C3[4]),  4,6},
  {&(_tg__ZTV7S6262C9__8S6262C10__7S6262C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6262C3[];
extern  VTBL_ENTRY _ZTV7S6262C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C3[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6262C4D0Ev,_ZTv0_n20_N7S6262C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6262C4D0Ev,_ZThn16_N7S6262C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6262C4D1Ev,_ZTv0_n20_N7S6262C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6262C4D1Ev,_ZThn16_N7S6262C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6262C3D0Ev,_ZTv0_n24_N7S6262C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S6262C3D0Ev,_ZThn216_N7S6262C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6262C3D1Ev,_ZTv0_n24_N7S6262C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S6262C3D1Ev,_ZThn216_N7S6262C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6262C3D0Ev,_ZTv0_n20_N7S6262C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6262C3D0Ev,_ZThn16_N7S6262C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6262C3D1Ev,_ZTv0_n20_N7S6262C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6262C3D1Ev,_ZThn16_N7S6262C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6262C3 = {  "S6262C3", // class name
  bases_S6262C3, 18,
  &(vtc_S6262C3[0]), // expected_vtbl_contents
  &(vtt_S6262C3[0]), // expected_vtt_contents
  ABISELECT(1648,1188), // object size
  NSPAIRA(_ZTI7S6262C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6262C3),38, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6262C3),17, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6262C14  : virtual S6262C9 , virtual S6262C6 , S16130C17_nt , virtual S6262C10 {
  virtual  ~S6262C14(); // _ZN8S6262C14D2Ev
  S6262C14(); // tgen
};
//SIG(-1 S6262C14) C1{ VBC2{ BC3{ m FD} BC4{ m FC3[7]} VBC5{ m}} VBC6{ BC3 VBC5 VBC4 vd} BC7{ m} VBC8{ VBC5 BC9{ VBC3 VBC4 VBC5 FC4[10]} BC6 BC2} vd}


 S6262C14 ::~S6262C14(){ note_dtor("S6262C14", this);}
S6262C14 ::S6262C14(){ note_ctor("S6262C14", this);} // tgen

static void Test_S6262C14()
{
  extern Class_Descriptor cd_S6262C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,295)];
    init_test(&cd_S6262C14, buf);
    S6262C14 *dp, &lv = *(dp=new (buf) S6262C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,1176), "sizeof(S6262C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6262C14)");
    /*is_ambiguous_... S6262C14::S6262C9 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S6262C9*), ABISELECT(32,8), "S6262C14");
    /*is_ambiguous_... S6262C14::S6262C9 */ AMB_check_base_class_offset(lv, (S5643C2*)(S6262C9*), ABISELECT(48,20), "S6262C14");
    /*is_ambiguous_... S6262C14::S6262C9 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S6262C9*), 0, "S6262C14");
    /*is_ambiguous_... S6262C14::S6262C6 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S6262C6*), 0, "S6262C14");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C10*), 0, "S6262C14");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C11*)(S6262C10*), 0, "S6262C14");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C6*)(S6262C10*), 0, "S6262C14");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C9*)(S6262C10*), 0, "S6262C14");
    /*is_ambiguous_... S6262C14::S6262C9 */ AMB_check_base_class_offset(lv, (S6262C9*), ABISELECT(16,4), "S6262C14");
    /*is_ambiguous_... S6262C14::S6262C6 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S6262C6*), ABISELECT(176,108), "S6262C14");
    /*is_ambiguous_... S6262C14::S6262C6 */ AMB_check_base_class_offset(lv, (S5643C2*)(S6262C6*), ABISELECT(192,120), "S6262C14");
    check_base_class_offset(lv, (S5643C2*)(S6262C11*)(S6262C10*), ABISELECT(192,120), "S6262C14");
    check_base_class_offset(lv, (S5643C2*)(S6262C6*)(S6262C10*), ABISELECT(192,120), "S6262C14");
    /*is_ambiguous_... S6262C14::S6262C6 */ AMB_check_base_class_offset(lv, (S6262C6*), ABISELECT(160,104), "S6262C14");
    check_base_class_offset(lv, (S16130C17_nt*), 0, "S6262C14");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C11*)(S6262C10*), ABISELECT(1616,1164), "S6262C14");
    check_base_class_offset(lv, (S6262C11*)(S6262C10*), ABISELECT(304,204), "S6262C14");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C6*)(S6262C10*), ABISELECT(1456,1052), "S6262C14");
    check_base_class_offset(lv, (S6262C6*)(S6262C10*), ABISELECT(1440,1048), "S6262C14");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C9*)(S6262C10*), ABISELECT(1488,1068), "S6262C14");
    check_base_class_offset(lv, (S5643C2*)(S6262C9*)(S6262C10*), ABISELECT(1504,1080), "S6262C14");
    check_base_class_offset(lv, (S6262C9*)(S6262C10*), ABISELECT(1472,1064), "S6262C14");
    check_base_class_offset(lv, (S6262C10*), ABISELECT(304,204), "S6262C14");
    test_class_info(&lv, &cd_S6262C14);
    dp->~S6262C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6262C14(Test_S6262C14, "S6262C14", ABISELECT(1632,1176));

#else // __cplusplus

extern void _ZN8S6262C14C1Ev();
extern void _ZN8S6262C14D2Ev();
Name_Map name_map_S6262C14[] = {
  NSPAIR(_ZN8S6262C14C1Ev),
  NSPAIR(_ZN8S6262C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S6262C9;
extern VTBL_ENTRY _ZTI7S6262C9[];
extern  VTBL_ENTRY _ZTV7S6262C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C9[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C6;
extern VTBL_ENTRY _ZTI7S6262C6[];
extern  VTBL_ENTRY _ZTV7S6262C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C6[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S6262C11;
extern VTBL_ENTRY _ZTI8S6262C11[];
extern  VTBL_ENTRY _ZTV8S6262C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C11[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S6262C6;
extern VTBL_ENTRY _ZTI7S6262C6[];
extern  VTBL_ENTRY _ZTV7S6262C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C9;
extern VTBL_ENTRY _ZTI7S6262C9[];
extern  VTBL_ENTRY _ZTV7S6262C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C9[];
extern Class_Descriptor cd_S6262C10;
extern VTBL_ENTRY _ZTI8S6262C10[];
extern  VTBL_ENTRY _ZTV8S6262C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C10[];
static Base_Class bases_S6262C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(32,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_S5643C2,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C9,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(176,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
    6, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(192,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
    6, //immediately_derived
  0, 1},
  {&cd_S6262C6,    ABISELECT(160,104), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5643C3_nt,    ABISELECT(1616,1164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C11,    ABISELECT(304,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    15, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1456,1052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C6,    ABISELECT(1440,1048), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1488,1068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1504,1080), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C9,    ABISELECT(1472,1064), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6262C10,    ABISELECT(304,204), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6262C14[];
extern void _ZN8S6262C14D1Ev();
extern void _ZN8S6262C14D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S6262C14D1Ev,_ZTv0_n20_N8S6262C14D1Ev)();
extern void ABISELECT(_ZThn160_N8S6262C14D1Ev,_ZThn104_N8S6262C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6262C14D0Ev,_ZTv0_n20_N8S6262C14D0Ev)();
extern void ABISELECT(_ZThn160_N8S6262C14D0Ev,_ZThn104_N8S6262C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S6262C14D1Ev,_ZTv0_n24_N8S6262C14D1Ev)();
extern void ABISELECT(_ZThn304_N8S6262C14D1Ev,_ZThn204_N8S6262C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S6262C14D0Ev,_ZTv0_n24_N8S6262C14D0Ev)();
extern void ABISELECT(_ZThn304_N8S6262C14D0Ev,_ZThn204_N8S6262C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n48_N8S6262C14D1Ev,_ZTvn844_n24_N8S6262C14D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S6262C14D0Ev,_ZTvn844_n24_N8S6262C14D0Ev)();
static  VTBL_ENTRY vtc_S6262C14[] = {
  ABISELECT(1616,1164),
  ABISELECT(304,204),
  ABISELECT(192,120),
  ABISELECT(160,104),
  0,
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
  (VTBL_ENTRY)&_ZN8S6262C14D1Ev,
  (VTBL_ENTRY)&_ZN8S6262C14D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
  ABISELECT(-160,-104),
  ABISELECT(32,16),
  ABISELECT(-160,-104),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6262C14D1Ev,_ZTv0_n20_N8S6262C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6262C14D0Ev,_ZTv0_n20_N8S6262C14D0Ev),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1312,960),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6262C14D1Ev,_ZTv0_n24_N8S6262C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6262C14D0Ev,_ZTv0_n24_N8S6262C14D0Ev),
  ABISELECT(-1248,-928),
  ABISELECT(-1440,-1048),
  ABISELECT(-1440,-1048),
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S6262C14D1Ev,_ZTvn844_n24_N8S6262C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S6262C14D0Ev,_ZTvn844_n24_N8S6262C14D0Ev),
  ABISELECT(-1472,-1064),
  ABISELECT(-1472,-1064),
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
};
extern VTBL_ENTRY _ZTV8S6262C14[];
static  VTBL_ENTRY _tg__ZTV7S6262C9__8S6262C14[] = {
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C9[0]),
};
extern void _ZN7S6262C6D1Ev();
extern void _ZN7S6262C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6262C6__8S6262C14[] = {
  ABISELECT(32,16),
  ABISELECT(-160,-104),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C6[0]),
  (VTBL_ENTRY)&_ZN7S6262C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C6D0Ev,
};
extern void _ZN8S6262C10D1Ev();
extern void _ZN8S6262C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6262C10__8S6262C14[] = {
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C10[0]),
  (VTBL_ENTRY)&_ZN8S6262C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6262C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6262C118S6262C10__8S6262C14[] = {
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C11[0]),
};
extern void _ZN7S6262C6D1Ev();
extern void _ZN7S6262C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6262C68S6262C10__A1__8S6262C14[] = {
  ABISELECT(-1248,-928),
  ABISELECT(-1440,-1048),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C6[0]),
  (VTBL_ENTRY)&_ZN7S6262C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6262C98S6262C10__A1__8S6262C14[] = {
  ABISELECT(-1472,-1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C9[0]),
};
extern void ABISELECT(_ZThn1136_N8S6262C10D1Ev,_ZThn844_N8S6262C10D1Ev)();
extern void ABISELECT(_ZThn1136_N8S6262C10D0Ev,_ZThn844_N8S6262C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6262C6__8S6262C10__8S6262C14[] = {
  ABISELECT(-1248,-928),
  ABISELECT(-1440,-1048),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S6262C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S6262C10D1Ev,_ZThn844_N8S6262C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S6262C10D0Ev,_ZThn844_N8S6262C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__8S6262C10__8S6262C14[] = {
  ABISELECT(-1472,-1064),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S6262C10[0]),
};
static  VTT_ENTRY vtt_S6262C14[] = {
  {&(_ZTV8S6262C14[8]),  8,37},
  {&(_ZTV8S6262C14[13]),  13,37},
  {&(_ZTV8S6262C14[18]),  18,37},
  {&(_ZTV8S6262C14[26]),  26,37},
  {&(_ZTV8S6262C14[32]),  32,37},
  {&(_ZTV8S6262C14[37]),  37,37},
  {&(_tg__ZTV7S6262C9__8S6262C14[3]),  3,3},
  {&(_tg__ZTV7S6262C6__8S6262C14[4]),  4,6},
  {&(_tg__ZTV8S6262C10__8S6262C14[5]),  5,7},
  {&(_tg__ZTV8S6262C118S6262C10__8S6262C14[5]),  5,5},
  {&(_tg__ZTV7S6262C68S6262C10__A1__8S6262C14[4]),  4,6},
  {&(_tg__ZTV7S6262C98S6262C10__A1__8S6262C14[3]),  3,3},
  {&(_tg__ZTV7S6262C6__8S6262C10__8S6262C14[4]),  4,6},
  {&(_tg__ZTV7S6262C9__8S6262C10__8S6262C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6262C14[];
extern  VTBL_ENTRY _ZTV8S6262C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C14[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S6262C14D0Ev,_ZTv0_n24_N8S6262C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S6262C14D0Ev,_ZThn204_N8S6262C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S6262C14D1Ev,_ZTv0_n24_N8S6262C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S6262C14D1Ev,_ZThn204_N8S6262C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6262C14D0Ev,_ZTv0_n20_N8S6262C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S6262C14D0Ev,_ZThn104_N8S6262C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6262C14D1Ev,_ZTv0_n20_N8S6262C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S6262C14D1Ev,_ZThn104_N8S6262C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6262C14 = {  "S6262C14", // class name
  bases_S6262C14, 16,
  &(vtc_S6262C14[0]), // expected_vtbl_contents
  &(vtt_S6262C14[0]), // expected_vtt_contents
  ABISELECT(1632,1176), // object size
  NSPAIRA(_ZTI8S6262C14),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6262C14),37, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6262C14),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6262C15  : virtual S5643C2 , virtual S6262C11 , virtual S6262C9 , S5408C7_nt {
  ::S5408C7_nt s6262c15f0;
  ~S6262C15(); // tgen
  S6262C15(); // tgen
};
//SIG(-1 S6262C15) C1{ VBC2{ m FC3{ m FD}[7]} VBC4{ VBC3 VBC2 VBC5{ m} FC2[10]} VBC6{ BC3 BC2 VBC5} BC5 FC5}


S6262C15 ::~S6262C15(){ note_dtor("S6262C15", this);} // tgen
S6262C15 ::S6262C15(){ note_ctor("S6262C15", this);} // tgen

static void Test_S6262C15()
{
  extern Class_Descriptor cd_S6262C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,263)];
    init_test(&cd_S6262C15, buf);
    S6262C15 *dp, &lv = *(dp=new (buf) S6262C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1048), "sizeof(S6262C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6262C15)");
    /*is_ambiguous_... S6262C15::S5643C2 */ AMB_check_base_class_offset(lv, (S5643C2*), ABISELECT(16,8), "S6262C15");
    check_base_class_offset(lv, (S5643C2*)(S6262C11*), ABISELECT(16,8), "S6262C15");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C11*), ABISELECT(1264,936), "S6262C15");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C11*), ABISELECT(1280,948), "S6262C15");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C9*), ABISELECT(1280,948), "S6262C15");
    check_base_class_offset(lv, (S6262C11*), ABISELECT(128,92), "S6262C15");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C9*), ABISELECT(1296,952), "S6262C15");
    check_base_class_offset(lv, (S5643C2*)(S6262C9*), ABISELECT(1312,964), "S6262C15");
    check_base_class_offset(lv, (S6262C9*), ABISELECT(1280,948), "S6262C15");
    /*is_ambiguous_... S6262C15::S5408C7_nt */ AMB_check_base_class_offset(lv, (S5408C7_nt*), 0, "S6262C15");
    check_field_offset(lv, s6262c15f0, ABISELECT(8,4), "S6262C15.s6262c15f0");
    test_class_info(&lv, &cd_S6262C15);
    dp->~S6262C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6262C15(Test_S6262C15, "S6262C15", ABISELECT(1424,1048));

#else // __cplusplus

extern void _ZN8S6262C15C1Ev();
extern void _ZN8S6262C15D1Ev();
Name_Map name_map_S6262C15[] = {
  NSPAIR(_ZN8S6262C15C1Ev),
  NSPAIR(_ZN8S6262C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S6262C11;
extern VTBL_ENTRY _ZTI8S6262C11[];
extern  VTBL_ENTRY _ZTV8S6262C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C11[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C9;
extern VTBL_ENTRY _ZTI7S6262C9[];
extern  VTBL_ENTRY _ZTV7S6262C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C9[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
static Base_Class bases_S6262C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C2,    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, 1},
  {&cd_S5643C3_nt,    ABISELECT(1264,936), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5408C7_nt,    ABISELECT(1280,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
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6262C11,    ABISELECT(128,92), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(1296,952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1312,964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C9,    ABISELECT(1280,948), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6262C15[];
static  VTBL_ENTRY vtc_S6262C15[] = {
  ABISELECT(1280,948),
  ABISELECT(1280,948),
  ABISELECT(1264,936),
  ABISELECT(128,92),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C15[0]),
  ABISELECT(1152,856),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI8S6262C15[0]),
  0,
  ABISELECT(-1280,-948),
  (VTBL_ENTRY)&(_ZTI8S6262C15[0]),
};
extern VTBL_ENTRY _ZTV8S6262C15[];
static  VTBL_ENTRY _tg__ZTV8S6262C11__8S6262C15[] = {
  ABISELECT(1152,856),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__8S6262C15[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C9[0]),
};
static  VTT_ENTRY vtt_S6262C15[] = {
  {&(_ZTV8S6262C15[7]),  7,15},
  {&(_ZTV8S6262C15[12]),  12,15},
  {&(_ZTV8S6262C15[15]),  15,15},
  {&(_tg__ZTV8S6262C11__8S6262C15[5]),  5,5},
  {&(_tg__ZTV7S6262C9__8S6262C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6262C15[];
extern  VTBL_ENTRY _ZTV8S6262C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C15[];
Class_Descriptor cd_S6262C15 = {  "S6262C15", // class name
  bases_S6262C15, 8,
  &(vtc_S6262C15[0]), // expected_vtbl_contents
  &(vtt_S6262C15[0]), // expected_vtt_contents
  ABISELECT(1424,1048), // object size
  NSPAIRA(_ZTI8S6262C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6262C15),15, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6262C15),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  S6262C13  : virtual S6262C6 , virtual S6262C14 , virtual S6262C15 , S5408C7_nt {
  virtual  ~S6262C13(); // _ZN8S6262C13D2Ev
  S6262C13(); // tgen
};
//SIG(-1 S6262C13) C1{ VBC2{ BC3{ m FD} VBC4{ m} VBC5{ m FC3[7]} vd} VBC6{ VBC7{ BC3 BC5 VBC4} VBC2 BC8{ m} VBC9{ VBC4 BC10{ VBC3 VBC5 VBC4 FC5[10]} BC2 BC7} vd} VBC11{ VBC5 VBC10 VBC7 BC4 FC4} BC4 vd}


 S6262C13 ::~S6262C13(){ note_dtor("S6262C13", this);}
S6262C13 ::S6262C13(){ note_ctor("S6262C13", this);} // tgen

static void Test_S6262C13()
{
  extern Class_Descriptor cd_S6262C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(175,508)];
    init_test(&cd_S6262C13, buf);
    S6262C13 *dp, &lv = *(dp=new (buf) S6262C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2784,2028), "sizeof(S6262C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6262C13)");
    /*is_ambiguous_... S6262C13::S6262C6 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S6262C6*), ABISELECT(32,8), "S6262C13");
    /*is_ambiguous_... S6262C13::S6262C6 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S6262C6*), ABISELECT(48,20), "S6262C13");
    /*is_ambiguous_... S6262C13::S6262C9 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S6262C9*), ABISELECT(48,20), "S6262C13");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C10*), ABISELECT(48,20), "S6262C13");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C11*)(S6262C10*), ABISELECT(48,20), "S6262C13");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C6*)(S6262C10*), ABISELECT(48,20), "S6262C13");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C9*)(S6262C10*), ABISELECT(48,20), "S6262C13");
    /*is_ambiguous_... S6262C13::S6262C11 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S6262C11*), ABISELECT(48,20), "S6262C13");
    /*is_ambiguous_... S6262C13::S6262C6 */ AMB_check_base_class_offset(lv, (S5643C2*)(S6262C6*), ABISELECT(48,20), "S6262C13");
    check_base_class_offset(lv, (S5643C2*)(S6262C11*)(S6262C10*), ABISELECT(48,20), "S6262C13");
    check_base_class_offset(lv, (S5643C2*)(S6262C6*)(S6262C10*), ABISELECT(48,20), "S6262C13");
    /*is_ambiguous_... S6262C15::S5643C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S6262C15*), ABISELECT(48,20), "S6262C13");
    /*is_ambiguous_... S6262C13::S6262C11 */ AMB_check_base_class_offset(lv, (S5643C2*)(S6262C11*), ABISELECT(48,20), "S6262C13");
    /*is_ambiguous_... S6262C13::S6262C6 */ AMB_check_base_class_offset(lv, (S6262C6*), ABISELECT(16,4), "S6262C13");
    /*is_ambiguous_... S6262C14::S6262C6 */ AMB_check_base_class_offset(lv, (S6262C6*)(S6262C14*), ABISELECT(16,4), "S6262C13");
    /*is_ambiguous_... S6262C13::S6262C9 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S6262C9*), ABISELECT(176,108), "S6262C13");
    /*is_ambiguous_... S6262C13::S6262C9 */ AMB_check_base_class_offset(lv, (S5643C2*)(S6262C9*), ABISELECT(192,120), "S6262C13");
    /*is_ambiguous_... S6262C14::S6262C9 */ AMB_check_base_class_offset(lv, (S6262C9*)(S6262C14*), ABISELECT(160,104), "S6262C13");
    check_base_class_offset(lv, (S6262C9*)(S6262C15*), ABISELECT(160,104), "S6262C13");
    check_base_class_offset(lv, (S16130C17_nt*)(S6262C14*), 0, "S6262C13");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C11*)(S6262C10*), ABISELECT(1616,1164), "S6262C13");
    /*is_ambiguous_... S6262C13::S6262C11 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S6262C11*), ABISELECT(1616,1164), "S6262C13");
    check_base_class_offset(lv, (S6262C11*)(S6262C10*), ABISELECT(304,204), "S6262C13");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C6*)(S6262C10*), ABISELECT(1456,1052), "S6262C13");
    check_base_class_offset(lv, (S6262C6*)(S6262C10*), ABISELECT(1440,1048), "S6262C13");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C9*)(S6262C10*), ABISELECT(1488,1068), "S6262C13");
    check_base_class_offset(lv, (S5643C2*)(S6262C9*)(S6262C10*), ABISELECT(1504,1080), "S6262C13");
    check_base_class_offset(lv, (S6262C9*)(S6262C10*), ABISELECT(1472,1064), "S6262C13");
    check_base_class_offset(lv, (S6262C10*)(S6262C14*), ABISELECT(304,204), "S6262C13");
    check_base_class_offset(lv, (S6262C14*), 0, "S6262C13");
    check_base_class_offset(lv, (S6262C11*)(S6262C15*), ABISELECT(1648,1184), "S6262C13");
    /*is_ambiguous_... S6262C15::S5408C7_nt */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S6262C15*), ABISELECT(1632,1176), "S6262C13");
    check_base_class_offset(lv, (S6262C15*), ABISELECT(1632,1176), "S6262C13");
    /*is_ambiguous_... S6262C13::S5408C7_nt */ AMB_check_base_class_offset(lv, (S5408C7_nt*), 0, "S6262C13");
    test_class_info(&lv, &cd_S6262C13);
    dp->~S6262C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6262C13(Test_S6262C13, "S6262C13", ABISELECT(2784,2028));

#else // __cplusplus

extern void _ZN8S6262C13C1Ev();
extern void _ZN8S6262C13D2Ev();
Name_Map name_map_S6262C13[] = {
  NSPAIR(_ZN8S6262C13C1Ev),
  NSPAIR(_ZN8S6262C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C6;
extern VTBL_ENTRY _ZTI7S6262C6[];
extern  VTBL_ENTRY _ZTV7S6262C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C9;
extern VTBL_ENTRY _ZTI7S6262C9[];
extern  VTBL_ENTRY _ZTV7S6262C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C9[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S6262C11;
extern VTBL_ENTRY _ZTI8S6262C11[];
extern  VTBL_ENTRY _ZTV8S6262C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C11[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S6262C6;
extern VTBL_ENTRY _ZTI7S6262C6[];
extern  VTBL_ENTRY _ZTV7S6262C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C9;
extern VTBL_ENTRY _ZTI7S6262C9[];
extern  VTBL_ENTRY _ZTV7S6262C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C9[];
extern Class_Descriptor cd_S6262C10;
extern VTBL_ENTRY _ZTI8S6262C10[];
extern  VTBL_ENTRY _ZTV8S6262C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C10[];
extern Class_Descriptor cd_S6262C14;
extern VTBL_ENTRY _ZTI8S6262C14[];
extern  VTBL_ENTRY _ZTV8S6262C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C14[];
extern Class_Descriptor cd_S6262C11;
extern VTBL_ENTRY _ZTI8S6262C11[];
extern  VTBL_ENTRY _ZTV8S6262C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C11[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S6262C15;
extern VTBL_ENTRY _ZTI8S6262C15[];
extern  VTBL_ENTRY _ZTV8S6262C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C15[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
static Base_Class bases_S6262C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(32,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_S5408C7_nt,    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
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5643C2,    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
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6262C6,    ABISELECT(16,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(176,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
    6, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(192,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
    6, //immediately_derived
  0, 0},
  {&cd_S6262C9,    ABISELECT(160,104), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C3_nt,    ABISELECT(1616,1164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C11,    ABISELECT(304,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1456,1052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C6,    ABISELECT(1440,1048), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1488,1068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1504,1080), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C9,    ABISELECT(1472,1064), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6262C10,    ABISELECT(304,204), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S6262C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6262C11,    ABISELECT(1648,1184), //bcp->offset
    48, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S5408C7_nt,    ABISELECT(1632,1176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C15,    ABISELECT(1632,1176), //bcp->offset
    41, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6262C13[];
extern void _ZN8S6262C13D1Ev();
extern void _ZN8S6262C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S6262C13D1Ev,_ZTv0_n20_N8S6262C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S6262C13D1Ev,_ZThn4_N8S6262C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6262C13D0Ev,_ZTv0_n20_N8S6262C13D0Ev)();
extern void ABISELECT(_ZThn16_N8S6262C13D0Ev,_ZThn4_N8S6262C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S6262C13D1Ev,_ZTv0_n24_N8S6262C13D1Ev)();
extern void ABISELECT(_ZThn304_N8S6262C13D1Ev,_ZThn204_N8S6262C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S6262C13D0Ev,_ZTv0_n24_N8S6262C13D0Ev)();
extern void ABISELECT(_ZThn304_N8S6262C13D0Ev,_ZThn204_N8S6262C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n48_N8S6262C13D1Ev,_ZTvn844_n24_N8S6262C13D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S6262C13D0Ev,_ZTvn844_n24_N8S6262C13D0Ev)();
static  VTBL_ENTRY vtc_S6262C13[] = {
  ABISELECT(1648,1184),
  ABISELECT(1632,1176),
  0,
  0,
  ABISELECT(1616,1164),
  ABISELECT(304,204),
  ABISELECT(48,20),
  ABISELECT(16,4),
  ABISELECT(48,20),
  ABISELECT(160,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
  (VTBL_ENTRY)&_ZN8S6262C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6262C13D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6262C13D1Ev,_ZTv0_n20_N8S6262C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6262C13D0Ev,_ZTv0_n20_N8S6262C13D0Ev),
  ABISELECT(-112,-84),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
  ABISELECT(-304,-204),
  ABISELECT(-256,-184),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6262C13D1Ev,_ZTv0_n24_N8S6262C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6262C13D0Ev,_ZTv0_n24_N8S6262C13D0Ev),
  ABISELECT(-1392,-1028),
  ABISELECT(-1392,-1028),
  ABISELECT(-1440,-1048),
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S6262C13D1Ev,_ZTvn844_n24_N8S6262C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S6262C13D0Ev,_ZTvn844_n24_N8S6262C13D0Ev),
  ABISELECT(-1424,-1044),
  ABISELECT(-1472,-1064),
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
  ABISELECT(-1472,-1072),
  ABISELECT(-1584,-1156),
  ABISELECT(-16,-12),
  ABISELECT(16,8),
  ABISELECT(-1584,-1156),
  ABISELECT(-1632,-1176),
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
  ABISELECT(-1600,-1164),
  ABISELECT(-1600,-1164),
  ABISELECT(-32,-20),
  ABISELECT(-1648,-1184),
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
};
extern VTBL_ENTRY _ZTV8S6262C13[];
extern void _ZN7S6262C6D1Ev();
extern void _ZN7S6262C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6262C6__8S6262C13[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C6[0]),
  (VTBL_ENTRY)&_ZN7S6262C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C6D0Ev,
};
extern void _ZN8S6262C14D1Ev();
extern void _ZN8S6262C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6262C14__8S6262C13[] = {
  ABISELECT(1616,1164),
  ABISELECT(304,204),
  ABISELECT(48,20),
  ABISELECT(16,4),
  ABISELECT(48,20),
  ABISELECT(160,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
  (VTBL_ENTRY)&_ZN8S6262C14D1Ev,
  (VTBL_ENTRY)&_ZN8S6262C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__8S6262C14__8S6262C13[] = {
  ABISELECT(-112,-84),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S6262C14D1Ev,_ZTv0_n20_N8S6262C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S6262C14D1Ev,_ZThn4_N8S6262C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6262C14D0Ev,_ZTv0_n20_N8S6262C14D0Ev)();
extern void ABISELECT(_ZThn16_N8S6262C14D0Ev,_ZThn4_N8S6262C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6262C6__8S6262C14__8S6262C13[] = {
  ABISELECT(-16,-4),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6262C14D1Ev,_ZTv0_n20_N8S6262C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6262C14D0Ev,_ZTv0_n20_N8S6262C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S6262C14D1Ev,_ZTv0_n24_N8S6262C14D1Ev)();
extern void ABISELECT(_ZThn304_N8S6262C14D1Ev,_ZThn204_N8S6262C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S6262C14D0Ev,_ZTv0_n24_N8S6262C14D0Ev)();
extern void ABISELECT(_ZThn304_N8S6262C14D0Ev,_ZThn204_N8S6262C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6262C10__8S6262C14__8S6262C13[] = {
  ABISELECT(-304,-204),
  ABISELECT(-256,-184),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6262C14D1Ev,_ZTv0_n24_N8S6262C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6262C14D0Ev,_ZTv0_n24_N8S6262C14D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N8S6262C14D1Ev,_ZTvn844_n24_N8S6262C14D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S6262C14D0Ev,_ZTvn844_n24_N8S6262C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6262C68S6262C10__A1__8S6262C14__8S6262C13[] = {
  ABISELECT(-1392,-1028),
  ABISELECT(-1392,-1028),
  ABISELECT(-1440,-1048),
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S6262C14D1Ev,_ZTvn844_n24_N8S6262C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S6262C14D0Ev,_ZTvn844_n24_N8S6262C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6262C98S6262C10__A1__8S6262C14__8S6262C13[] = {
  ABISELECT(-1424,-1044),
  ABISELECT(-1472,-1064),
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__8S6262C13[] = {
  ABISELECT(-112,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C9[0]),
};
extern void _ZN8S6262C10D1Ev();
extern void _ZN8S6262C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6262C10__8S6262C13[] = {
  ABISELECT(-256,-184),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C10[0]),
  (VTBL_ENTRY)&_ZN8S6262C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6262C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6262C118S6262C10__8S6262C13[] = {
  ABISELECT(-256,-184),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C11[0]),
};
extern void _ZN7S6262C6D1Ev();
extern void _ZN7S6262C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6262C68S6262C10__A1__8S6262C13[] = {
  ABISELECT(-1392,-1028),
  ABISELECT(-1392,-1028),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C6[0]),
  (VTBL_ENTRY)&_ZN7S6262C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6262C98S6262C10__A1__8S6262C13[] = {
  ABISELECT(-1424,-1044),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C9[0]),
};
extern void ABISELECT(_ZThn1136_N8S6262C10D1Ev,_ZThn844_N8S6262C10D1Ev)();
extern void ABISELECT(_ZThn1136_N8S6262C10D0Ev,_ZThn844_N8S6262C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6262C6__8S6262C10__8S6262C13[] = {
  ABISELECT(-1392,-1028),
  ABISELECT(-1392,-1028),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S6262C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S6262C10D1Ev,_ZThn844_N8S6262C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S6262C10D0Ev,_ZThn844_N8S6262C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__8S6262C10__8S6262C13[] = {
  ABISELECT(-1424,-1044),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S6262C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6262C15__8S6262C13[] = {
  ABISELECT(-1472,-1072),
  ABISELECT(-1584,-1156),
  ABISELECT(-16,-12),
  ABISELECT(16,8),
  ABISELECT(-1584,-1156),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6262C11__8S6262C15__8S6262C13[] = {
  ABISELECT(-1600,-1164),
  ABISELECT(-1600,-1164),
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6262C15[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__8S6262C15__8S6262C13[] = {
  ABISELECT(-112,-84),
  ABISELECT(1472,1072),
  (VTBL_ENTRY)&(_ZTI8S6262C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6262C11__A1__8S6262C13[] = {
  ABISELECT(-1600,-1164),
  ABISELECT(-1600,-1164),
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C11[0]),
};
static  VTT_ENTRY vtt_S6262C13[] = {
  {&(_ZTV8S6262C13[12]),  12,53},
  {&(_ZTV8S6262C13[19]),  19,53},
  {&(_ZTV8S6262C13[12]),  12,53},
  {&(_ZTV8S6262C13[24]),  24,53},
  {&(_ZTV8S6262C13[30]),  30,53},
  {&(_ZTV8S6262C13[36]),  36,53},
  {&(_ZTV8S6262C13[41]),  41,53},
  {&(_ZTV8S6262C13[48]),  48,53},
  {&(_ZTV8S6262C13[53]),  53,53},
  {&(_tg__ZTV7S6262C6__8S6262C13[4]),  4,6},
  {&(_tg__ZTV8S6262C14__8S6262C13[8]),  8,10},
  {&(_tg__ZTV7S6262C9__8S6262C14__8S6262C13[3]),  3,3},
  {&(_tg__ZTV7S6262C6__8S6262C14__8S6262C13[5]),  5,7},
  {&(_tg__ZTV8S6262C10__8S6262C14__8S6262C13[6]),  6,8},
  {&(_tg__ZTV7S6262C68S6262C10__A1__8S6262C14__8S6262C13[4]),  4,6},
  {&(_tg__ZTV7S6262C98S6262C10__A1__8S6262C14__8S6262C13[3]),  3,3},
  {&(_tg__ZTV7S6262C9__8S6262C13[3]),  3,3},
  {&(_tg__ZTV8S6262C10__8S6262C13[5]),  5,7},
  {&(_tg__ZTV8S6262C118S6262C10__8S6262C13[5]),  5,5},
  {&(_tg__ZTV7S6262C68S6262C10__A1__8S6262C13[4]),  4,6},
  {&(_tg__ZTV7S6262C98S6262C10__A1__8S6262C13[3]),  3,3},
  {&(_tg__ZTV7S6262C6__8S6262C10__8S6262C13[4]),  4,6},
  {&(_tg__ZTV7S6262C9__8S6262C10__8S6262C13[3]),  3,3},
  {&(_tg__ZTV8S6262C15__8S6262C13[7]),  7,7},
  {&(_tg__ZTV8S6262C11__8S6262C15__8S6262C13[5]),  5,5},
  {&(_tg__ZTV7S6262C9__8S6262C15__8S6262C13[3]),  3,3},
  {&(_tg__ZTV8S6262C11__A1__8S6262C13[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S6262C13[];
extern  VTBL_ENTRY _ZTV8S6262C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C13[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S6262C14D0Ev,_ZTv0_n24_N8S6262C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S6262C14D0Ev,_ZThn204_N8S6262C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S6262C14D1Ev,_ZTv0_n24_N8S6262C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S6262C14D1Ev,_ZThn204_N8S6262C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6262C14D0Ev,_ZTv0_n20_N8S6262C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6262C14D0Ev,_ZThn4_N8S6262C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6262C14D1Ev,_ZTv0_n20_N8S6262C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6262C14D1Ev,_ZThn4_N8S6262C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S6262C13D0Ev,_ZTv0_n24_N8S6262C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S6262C13D0Ev,_ZThn204_N8S6262C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S6262C13D1Ev,_ZTv0_n24_N8S6262C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S6262C13D1Ev,_ZThn204_N8S6262C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6262C13D0Ev,_ZTv0_n20_N8S6262C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6262C13D0Ev,_ZThn4_N8S6262C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6262C13D1Ev,_ZTv0_n20_N8S6262C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6262C13D1Ev,_ZThn4_N8S6262C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6262C13 = {  "S6262C13", // class name
  bases_S6262C13, 21,
  &(vtc_S6262C13[0]), // expected_vtbl_contents
  &(vtt_S6262C13[0]), // expected_vtt_contents
  ABISELECT(2784,2028), // object size
  NSPAIRA(_ZTI8S6262C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6262C13),53, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6262C13),27, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6262C16_nt  {
  short s6262c16f0;
  void  mf6262c16(); // _ZN11S6262C16_nt9mf6262c16Ev
  virtual  ~S6262C16_nt(); // _ZN11S6262C16_ntD1Ev
  S6262C16_nt(); // tgen
};
//SIG(-1 S6262C16_nt) C1{ vd m Fs}


void  S6262C16_nt ::mf6262c16(){}
 S6262C16_nt ::~S6262C16_nt(){ note_dtor("S6262C16_nt", this);}
S6262C16_nt ::S6262C16_nt(){ note_ctor("S6262C16_nt", this);} // tgen

//skip512 S6262C16_nt

#else // __cplusplus

extern void _ZN11S6262C16_ntC1Ev();
extern void _ZN11S6262C16_ntD1Ev();
Name_Map name_map_S6262C16_nt[] = {
  NSPAIR(_ZN11S6262C16_ntC1Ev),
  NSPAIR(_ZN11S6262C16_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S6262C16_nt[];
extern void _ZN11S6262C16_ntD1Ev();
extern void _ZN11S6262C16_ntD0Ev();
static  VTBL_ENTRY vtc_S6262C16_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S6262C16_nt[0]),
  (VTBL_ENTRY)&_ZN11S6262C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S6262C16_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S6262C16_nt[];
VTBL_ENTRY *P__ZTI11S6262C16_nt = _ZTI11S6262C16_nt; 
extern  VTBL_ENTRY _ZTV11S6262C16_nt[];
Class_Descriptor cd_S6262C16_nt = {  "S6262C16_nt", // class name
  0,0,//no base classes
  &(vtc_S6262C16_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S6262C16_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S6262C16_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  S6262C1  : S16130C17_nt , virtual S6262C3 , S6262C13 , S6262C16_nt {
  ~S6262C1(); // tgen
  S6262C1(); // tgen
};
//SIG(1 S6262C1) C1{ BC2{ m} VBC3{ BC4{ VBC5{ m} VBC6{ BC7{ m FD} VBC5 VBC8{ m FC7[7]} vd} VBC9{ BC7 BC8 VBC5} BC7} VBC10{ VBC5 BC11{ VBC7 VBC8 VBC5 FC8[10]} BC6 BC9} BC12{ m} vd v1} BC13{ VBC6 VBC14{ VBC9 VBC6 BC2 VBC10 vd} VBC15{ VBC8 VBC11 VBC9 BC5 FC5} BC5 vd} BC16{ vd m Fs}}


S6262C1 ::~S6262C1(){ note_dtor("S6262C1", this);} // tgen
S6262C1 ::S6262C1(){ note_ctor("S6262C1", this);} // tgen

static void Test_S6262C1()
{
  extern Class_Descriptor cd_S6262C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(178,514)];
    init_test(&cd_S6262C1, buf);
    S6262C1 *dp, &lv = *(dp=new (buf) S6262C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2832,2052), "sizeof(S6262C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6262C1)");
    /*is_ambiguous_... S6262C1::S16130C17_nt */ AMB_check_base_class_offset(lv, (S16130C17_nt*), ABISELECT(8,4), "S6262C1");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C4*)(S6262C3*), ABISELECT(64,28), "S6262C1");
    /*is_ambiguous_... S6262C1::S6262C6 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S6262C6*), ABISELECT(64,28), "S6262C1");
    /*is_ambiguous_... S6262C1::S6262C9 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S6262C9*), ABISELECT(64,28), "S6262C1");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C10*), ABISELECT(64,28), "S6262C1");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C11*)(S6262C10*), ABISELECT(64,28), "S6262C1");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C6*)(S6262C10*), ABISELECT(64,28), "S6262C1");
    check_base_class_offset(lv, (S5408C7_nt*)(S6262C9*)(S6262C10*), ABISELECT(64,28), "S6262C1");
    /*is_ambiguous_... S6262C1::S6262C11 */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S6262C11*), ABISELECT(64,28), "S6262C1");
    /*is_ambiguous_... S6262C1::S6262C6 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S6262C6*), ABISELECT(80,32), "S6262C1");
    /*is_ambiguous_... S6262C1::S6262C6 */ AMB_check_base_class_offset(lv, (S5643C2*)(S6262C6*), ABISELECT(96,44), "S6262C1");
    check_base_class_offset(lv, (S5643C2*)(S6262C11*)(S6262C10*), ABISELECT(96,44), "S6262C1");
    check_base_class_offset(lv, (S5643C2*)(S6262C6*)(S6262C10*), ABISELECT(96,44), "S6262C1");
    /*is_ambiguous_... S6262C15::S5643C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S6262C15*), ABISELECT(96,44), "S6262C1");
    /*is_ambiguous_... S6262C1::S6262C11 */ AMB_check_base_class_offset(lv, (S5643C2*)(S6262C11*), ABISELECT(96,44), "S6262C1");
    check_base_class_offset(lv, (S6262C6*)(S6262C4*)(S6262C3*), ABISELECT(64,28), "S6262C1");
    /*is_ambiguous_... S6262C13::S6262C6 */ AMB_check_base_class_offset(lv, (S6262C6*)(S6262C13*), ABISELECT(64,28), "S6262C1");
    /*is_ambiguous_... S6262C14::S6262C6 */ AMB_check_base_class_offset(lv, (S6262C6*)(S6262C14*), ABISELECT(64,28), "S6262C1");
    /*is_ambiguous_... S6262C1::S6262C9 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S6262C9*), ABISELECT(224,132), "S6262C1");
    /*is_ambiguous_... S6262C1::S6262C9 */ AMB_check_base_class_offset(lv, (S5643C2*)(S6262C9*), ABISELECT(240,144), "S6262C1");
    check_base_class_offset(lv, (S6262C9*)(S6262C4*)(S6262C3*), ABISELECT(208,128), "S6262C1");
    /*is_ambiguous_... S6262C14::S6262C9 */ AMB_check_base_class_offset(lv, (S6262C9*)(S6262C14*), ABISELECT(208,128), "S6262C1");
    check_base_class_offset(lv, (S6262C9*)(S6262C15*), ABISELECT(208,128), "S6262C1");
    /*is_ambiguous_... S6262C4::S5643C3_nt */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S6262C4*)(S6262C3*), ABISELECT(48,16), "S6262C1");
    check_base_class_offset(lv, (S6262C4*)(S6262C3*), ABISELECT(32,12), "S6262C1");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C11*)(S6262C10*), ABISELECT(1664,1188), "S6262C1");
    /*is_ambiguous_... S6262C1::S6262C11 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S6262C11*), ABISELECT(1664,1188), "S6262C1");
    check_base_class_offset(lv, (S6262C11*)(S6262C10*), ABISELECT(352,228), "S6262C1");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C6*)(S6262C10*), ABISELECT(1504,1076), "S6262C1");
    check_base_class_offset(lv, (S6262C6*)(S6262C10*), ABISELECT(1488,1072), "S6262C1");
    check_base_class_offset(lv, (S5643C3_nt*)(S6262C9*)(S6262C10*), ABISELECT(1536,1092), "S6262C1");
    check_base_class_offset(lv, (S5643C2*)(S6262C9*)(S6262C10*), ABISELECT(1552,1104), "S6262C1");
    check_base_class_offset(lv, (S6262C9*)(S6262C10*), ABISELECT(1520,1088), "S6262C1");
    check_base_class_offset(lv, (S6262C10*)(S6262C3*), ABISELECT(352,228), "S6262C1");
    check_base_class_offset(lv, (S6262C10*)(S6262C14*), ABISELECT(352,228), "S6262C1");
    check_base_class_offset(lv, (S239C12_nt*)(S6262C3*), ABISELECT(32,12), "S6262C1");
    check_base_class_offset(lv, (S6262C3*), ABISELECT(32,12), "S6262C1");
    check_base_class_offset(lv, (S16130C17_nt*)(S6262C14*), 0, "S6262C1");
    check_base_class_offset(lv, (S6262C14*)(S6262C13*), 0, "S6262C1");
    check_base_class_offset(lv, (S6262C11*)(S6262C15*), ABISELECT(1696,1208), "S6262C1");
    /*is_ambiguous_... S6262C15::S5408C7_nt */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S6262C15*), ABISELECT(1680,1200), "S6262C1");
    check_base_class_offset(lv, (S6262C15*)(S6262C13*), ABISELECT(1680,1200), "S6262C1");
    /*is_ambiguous_... S6262C13::S5408C7_nt */ AMB_check_base_class_offset(lv, (S5408C7_nt*)(S6262C13*), 0, "S6262C1");
    check_base_class_offset(lv, (S6262C13*), 0, "S6262C1");
    check_base_class_offset(lv, (S6262C16_nt*), ABISELECT(8,4), "S6262C1");
    test_class_info(&lv, &cd_S6262C1);
    dp->~S6262C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6262C1(Test_S6262C1, "S6262C1", ABISELECT(2832,2052));

#else // __cplusplus

extern void _ZN7S6262C1C1Ev();
extern void _ZN7S6262C1D1Ev();
Name_Map name_map_S6262C1[] = {
  NSPAIR(_ZN7S6262C1C1Ev),
  NSPAIR(_ZN7S6262C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C6;
extern VTBL_ENTRY _ZTI7S6262C6[];
extern  VTBL_ENTRY _ZTV7S6262C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C9;
extern VTBL_ENTRY _ZTI7S6262C9[];
extern  VTBL_ENTRY _ZTV7S6262C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C9[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S6262C4;
extern VTBL_ENTRY _ZTI7S6262C4[];
extern  VTBL_ENTRY _ZTV7S6262C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S6262C11;
extern VTBL_ENTRY _ZTI8S6262C11[];
extern  VTBL_ENTRY _ZTV8S6262C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C11[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S6262C6;
extern VTBL_ENTRY _ZTI7S6262C6[];
extern  VTBL_ENTRY _ZTV7S6262C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C6[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S6262C9;
extern VTBL_ENTRY _ZTI7S6262C9[];
extern  VTBL_ENTRY _ZTV7S6262C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C9[];
extern Class_Descriptor cd_S6262C10;
extern VTBL_ENTRY _ZTI8S6262C10[];
extern  VTBL_ENTRY _ZTV8S6262C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C10[];
extern Class_Descriptor cd_S239C12_nt;
extern VTBL_ENTRY _ZTI10S239C12_nt[];
extern Class_Descriptor cd_S6262C3;
extern VTBL_ENTRY _ZTI7S6262C3[];
extern  VTBL_ENTRY _ZTV7S6262C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C3[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
extern Class_Descriptor cd_S6262C14;
extern VTBL_ENTRY _ZTI8S6262C14[];
extern  VTBL_ENTRY _ZTV8S6262C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C14[];
extern Class_Descriptor cd_S6262C11;
extern VTBL_ENTRY _ZTI8S6262C11[];
extern  VTBL_ENTRY _ZTV8S6262C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C11[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S6262C15;
extern VTBL_ENTRY _ZTI8S6262C15[];
extern  VTBL_ENTRY _ZTV8S6262C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C15[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S6262C13;
extern VTBL_ENTRY _ZTI8S6262C13[];
extern  VTBL_ENTRY _ZTV8S6262C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6262C13[];
extern Class_Descriptor cd_S6262C16_nt;
extern VTBL_ENTRY _ZTI11S6262C16_nt[];
extern  VTBL_ENTRY _ZTV11S6262C16_nt[];
static Base_Class bases_S6262C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16130C17_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_S5408C7_nt,    ABISELECT(64,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S5643C3_nt,    ABISELECT(80,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6262C6,    ABISELECT(64,28), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5643C3_nt,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6262C9,    ABISELECT(208,128), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5643C3_nt,    ABISELECT(48,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_S6262C4,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1664,1188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6262C11,    ABISELECT(352,228), //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
    3, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1504,1076), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C6,    ABISELECT(1488,1072), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1536,1092), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1552,1104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C9,    ABISELECT(1520,1088), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6262C10,    ABISELECT(352,228), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S239C12_nt,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6262C3,    ABISELECT(32,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S6262C11,    ABISELECT(1696,1208), //bcp->offset
    66, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S5408C7_nt,    ABISELECT(1680,1200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C15,    ABISELECT(1680,1200), //bcp->offset
    59, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6262C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6262C16_nt,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6262C1[];
extern void _ZN7S6262C1D1Ev();
extern void _ZN7S6262C1D0Ev();
extern void ABISELECT(_ZThn8_N7S6262C1D1Ev,_ZThn4_N7S6262C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S6262C1D0Ev,_ZThn4_N7S6262C1D0Ev)();
extern void ABISELECT(_ZTv0_n72_N7S6262C1D1Ev,_ZTv0_n36_N7S6262C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S6262C1D1Ev,_ZThn12_N7S6262C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6262C1D0Ev,_ZTv0_n36_N7S6262C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S6262C1D0Ev,_ZThn12_N7S6262C1D0Ev)() __attribute__((weak));
extern void _ZN7S6262C32v1Ev();
extern void ABISELECT(_ZTv0_n40_N7S6262C1D1Ev,_ZTv0_n20_N7S6262C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S6262C1D1Ev,_ZThn28_N7S6262C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6262C1D0Ev,_ZTv0_n20_N7S6262C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S6262C1D0Ev,_ZThn28_N7S6262C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6262C1D1Ev,_ZTv0_n24_N7S6262C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S6262C1D1Ev,_ZThn228_N7S6262C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6262C1D0Ev,_ZTv0_n24_N7S6262C1D0Ev)();
extern void ABISELECT(_ZThn352_N7S6262C1D0Ev,_ZThn228_N7S6262C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n48_N7S6262C1D1Ev,_ZTvn844_n24_N7S6262C1D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N7S6262C1D0Ev,_ZTvn844_n24_N7S6262C1D0Ev)();
static  VTBL_ENTRY vtc_S6262C1[] = {
  ABISELECT(32,12),
  ABISELECT(1696,1208),
  ABISELECT(1680,1200),
  0,
  0,
  ABISELECT(1664,1188),
  ABISELECT(352,228),
  ABISELECT(96,44),
  ABISELECT(64,28),
  ABISELECT(64,28),
  ABISELECT(208,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C1[0]),
  (VTBL_ENTRY)&_ZN7S6262C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C1D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6262C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S6262C1D1Ev,_ZThn4_N7S6262C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S6262C1D0Ev,_ZThn4_N7S6262C1D0Ev),
  0,
  ABISELECT(-32,-12),
  ABISELECT(1632,1176),
  ABISELECT(320,216),
  ABISELECT(176,116),
  ABISELECT(64,32),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S6262C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6262C1D1Ev,_ZTv0_n36_N7S6262C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6262C1D0Ev,_ZTv0_n36_N7S6262C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6262C32v1Ev,
  ABISELECT(-64,-28),
  ABISELECT(32,16),
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI7S6262C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6262C1D1Ev,_ZTv0_n20_N7S6262C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6262C1D0Ev,_ZTv0_n20_N7S6262C1D0Ev),
  ABISELECT(-144,-100),
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI7S6262C1[0]),
  ABISELECT(-352,-228),
  ABISELECT(-288,-200),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  ABISELECT(-352,-228),
  (VTBL_ENTRY)&(_ZTI7S6262C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6262C1D1Ev,_ZTv0_n24_N7S6262C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6262C1D0Ev,_ZTv0_n24_N7S6262C1D0Ev),
  ABISELECT(-1392,-1028),
  ABISELECT(-1424,-1044),
  ABISELECT(-1488,-1072),
  (VTBL_ENTRY)&(_ZTI7S6262C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N7S6262C1D1Ev,_ZTvn844_n24_N7S6262C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N7S6262C1D0Ev,_ZTvn844_n24_N7S6262C1D0Ev),
  ABISELECT(-1456,-1060),
  ABISELECT(-1520,-1088),
  (VTBL_ENTRY)&(_ZTI7S6262C1[0]),
  ABISELECT(-1472,-1072),
  ABISELECT(-1616,-1172),
  ABISELECT(-16,-12),
  ABISELECT(16,8),
  ABISELECT(-1584,-1156),
  ABISELECT(-1680,-1200),
  (VTBL_ENTRY)&(_ZTI7S6262C1[0]),
  ABISELECT(-1632,-1180),
  ABISELECT(-1600,-1164),
  ABISELECT(-32,-20),
  ABISELECT(-1696,-1208),
  (VTBL_ENTRY)&(_ZTI7S6262C1[0]),
};
extern VTBL_ENTRY _ZTV7S6262C1[];
extern void _ZN8S6262C13D1Ev();
extern void _ZN8S6262C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6262C13__7S6262C1[] = {
  ABISELECT(1696,1208),
  ABISELECT(1680,1200),
  0,
  0,
  ABISELECT(1664,1188),
  ABISELECT(352,228),
  ABISELECT(96,44),
  ABISELECT(64,28),
  ABISELECT(64,28),
  ABISELECT(208,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
  (VTBL_ENTRY)&_ZN8S6262C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6262C13D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S6262C13D1Ev,_ZTv0_n20_N8S6262C13D1Ev)();
extern void ABISELECT(_ZThn64_N8S6262C13D1Ev,_ZThn28_N8S6262C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6262C13D0Ev,_ZTv0_n20_N8S6262C13D0Ev)();
extern void ABISELECT(_ZThn64_N8S6262C13D0Ev,_ZThn28_N8S6262C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6262C6__8S6262C13__7S6262C1[] = {
  ABISELECT(-64,-28),
  ABISELECT(32,16),
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6262C13D1Ev,_ZTv0_n20_N8S6262C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6262C13D0Ev,_ZTv0_n20_N8S6262C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__8S6262C13__7S6262C1[] = {
  ABISELECT(-144,-100),
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S6262C13D1Ev,_ZTv0_n24_N8S6262C13D1Ev)();
extern void ABISELECT(_ZThn352_N8S6262C13D1Ev,_ZThn228_N8S6262C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S6262C13D0Ev,_ZTv0_n24_N8S6262C13D0Ev)();
extern void ABISELECT(_ZThn352_N8S6262C13D0Ev,_ZThn228_N8S6262C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6262C10__8S6262C13__7S6262C1[] = {
  ABISELECT(-352,-228),
  ABISELECT(-288,-200),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  ABISELECT(-352,-228),
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6262C13D1Ev,_ZTv0_n24_N8S6262C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6262C13D0Ev,_ZTv0_n24_N8S6262C13D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N8S6262C13D1Ev,_ZTvn844_n24_N8S6262C13D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S6262C13D0Ev,_ZTvn844_n24_N8S6262C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6262C68S6262C10__A1__8S6262C13__7S6262C1[] = {
  ABISELECT(-1392,-1028),
  ABISELECT(-1424,-1044),
  ABISELECT(-1488,-1072),
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S6262C13D1Ev,_ZTvn844_n24_N8S6262C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S6262C13D0Ev,_ZTvn844_n24_N8S6262C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6262C98S6262C10__A1__8S6262C13__7S6262C1[] = {
  ABISELECT(-1456,-1060),
  ABISELECT(-1520,-1088),
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6262C15__8S6262C13__7S6262C1[] = {
  ABISELECT(-1472,-1072),
  ABISELECT(-1616,-1172),
  ABISELECT(-16,-12),
  ABISELECT(16,8),
  ABISELECT(-1584,-1156),
  ABISELECT(-1680,-1200),
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6262C11__A1__8S6262C13__7S6262C1[] = {
  ABISELECT(-1632,-1180),
  ABISELECT(-1600,-1164),
  ABISELECT(-32,-20),
  ABISELECT(-1696,-1208),
  (VTBL_ENTRY)&(_ZTI8S6262C13[0]),
};
extern void _ZN7S6262C3D1Ev();
extern void _ZN7S6262C3D0Ev();
extern void _ZN7S6262C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6262C3__7S6262C1[] = {
  ABISELECT(1632,1176),
  ABISELECT(320,216),
  ABISELECT(176,116),
  ABISELECT(64,32),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C3[0]),
  (VTBL_ENTRY)&_ZN7S6262C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6262C32v1Ev,
};
extern void _ZN7S6262C4D1Ev();
extern void _ZN7S6262C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6262C47S6262C3__7S6262C1[] = {
  ABISELECT(176,116),
  ABISELECT(64,32),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C4[0]),
  (VTBL_ENTRY)&_ZN7S6262C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C4D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S6262C4D1Ev,_ZTv0_n20_N7S6262C4D1Ev)();
extern void ABISELECT(_ZThn32_N7S6262C4D1Ev,_ZThn16_N7S6262C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6262C4D0Ev,_ZTv0_n20_N7S6262C4D0Ev)();
extern void ABISELECT(_ZThn32_N7S6262C4D0Ev,_ZThn16_N7S6262C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6262C6__7S6262C47S6262C3__7S6262C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(32,16),
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6262C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6262C4D1Ev,_ZTv0_n20_N7S6262C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6262C4D0Ev,_ZTv0_n20_N7S6262C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__7S6262C47S6262C3__7S6262C1[] = {
  ABISELECT(-144,-100),
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI7S6262C4[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S6262C3D1Ev,_ZTv0_n20_N7S6262C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S6262C3D1Ev,_ZThn16_N7S6262C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6262C3D0Ev,_ZTv0_n20_N7S6262C3D0Ev)();
extern void ABISELECT(_ZThn32_N7S6262C3D0Ev,_ZThn16_N7S6262C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6262C6__7S6262C3__7S6262C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(32,16),
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6262C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6262C3D1Ev,_ZTv0_n20_N7S6262C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6262C3D0Ev,_ZTv0_n20_N7S6262C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__7S6262C3__7S6262C1[] = {
  ABISELECT(-144,-100),
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI7S6262C3[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S6262C3D1Ev,_ZTv0_n24_N7S6262C3D1Ev)();
extern void ABISELECT(_ZThn320_N7S6262C3D1Ev,_ZThn216_N7S6262C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6262C3D0Ev,_ZTv0_n24_N7S6262C3D0Ev)();
extern void ABISELECT(_ZThn320_N7S6262C3D0Ev,_ZThn216_N7S6262C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6262C10__7S6262C3__7S6262C1[] = {
  ABISELECT(-320,-216),
  ABISELECT(-288,-200),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  ABISELECT(-320,-216),
  (VTBL_ENTRY)&(_ZTI7S6262C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6262C3D1Ev,_ZTv0_n24_N7S6262C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6262C3D0Ev,_ZTv0_n24_N7S6262C3D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N7S6262C3D1Ev,_ZTvn844_n24_N7S6262C3D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N7S6262C3D0Ev,_ZTvn844_n24_N7S6262C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6262C68S6262C10__A1__7S6262C3__7S6262C1[] = {
  ABISELECT(-1392,-1028),
  ABISELECT(-1424,-1044),
  ABISELECT(-1456,-1060),
  (VTBL_ENTRY)&(_ZTI7S6262C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N7S6262C3D1Ev,_ZTvn844_n24_N7S6262C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N7S6262C3D0Ev,_ZTvn844_n24_N7S6262C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6262C98S6262C10__A1__7S6262C3__7S6262C1[] = {
  ABISELECT(-1456,-1060),
  ABISELECT(-1488,-1076),
  (VTBL_ENTRY)&(_ZTI7S6262C3[0]),
};
extern void _ZN7S6262C6D1Ev();
extern void _ZN7S6262C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6262C6__7S6262C1[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C6[0]),
  (VTBL_ENTRY)&_ZN7S6262C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__7S6262C1[] = {
  ABISELECT(-144,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C9[0]),
};
extern void _ZN8S6262C10D1Ev();
extern void _ZN8S6262C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6262C10__7S6262C1[] = {
  ABISELECT(-288,-200),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C10[0]),
  (VTBL_ENTRY)&_ZN8S6262C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6262C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6262C118S6262C10__7S6262C1[] = {
  ABISELECT(-288,-200),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C11[0]),
};
extern void _ZN7S6262C6D1Ev();
extern void _ZN7S6262C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6262C68S6262C10__A1__7S6262C1[] = {
  ABISELECT(-1392,-1028),
  ABISELECT(-1424,-1044),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C6[0]),
  (VTBL_ENTRY)&_ZN7S6262C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6262C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6262C98S6262C10__A1__7S6262C1[] = {
  ABISELECT(-1456,-1060),
  0,
  (VTBL_ENTRY)&(_ZTI7S6262C9[0]),
};
extern void ABISELECT(_ZThn1136_N8S6262C10D1Ev,_ZThn844_N8S6262C10D1Ev)();
extern void ABISELECT(_ZThn1136_N8S6262C10D0Ev,_ZThn844_N8S6262C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6262C6__8S6262C10__7S6262C1[] = {
  ABISELECT(-1392,-1028),
  ABISELECT(-1424,-1044),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S6262C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S6262C10D1Ev,_ZThn844_N8S6262C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S6262C10D0Ev,_ZThn844_N8S6262C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__8S6262C10__7S6262C1[] = {
  ABISELECT(-1456,-1060),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S6262C10[0]),
};
extern void _ZN8S6262C14D1Ev();
extern void _ZN8S6262C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6262C14__7S6262C1[] = {
  ABISELECT(1664,1188),
  ABISELECT(352,228),
  ABISELECT(96,44),
  ABISELECT(64,28),
  ABISELECT(64,28),
  ABISELECT(208,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
  (VTBL_ENTRY)&_ZN8S6262C14D1Ev,
  (VTBL_ENTRY)&_ZN8S6262C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__8S6262C14__7S6262C1[] = {
  ABISELECT(-144,-100),
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S6262C14D1Ev,_ZTv0_n20_N8S6262C14D1Ev)();
extern void ABISELECT(_ZThn64_N8S6262C14D1Ev,_ZThn28_N8S6262C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6262C14D0Ev,_ZTv0_n20_N8S6262C14D0Ev)();
extern void ABISELECT(_ZThn64_N8S6262C14D0Ev,_ZThn28_N8S6262C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6262C6__8S6262C14__7S6262C1[] = {
  ABISELECT(-64,-28),
  ABISELECT(32,16),
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6262C14D1Ev,_ZTv0_n20_N8S6262C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6262C14D0Ev,_ZTv0_n20_N8S6262C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S6262C14D1Ev,_ZTv0_n24_N8S6262C14D1Ev)();
extern void ABISELECT(_ZThn352_N8S6262C14D1Ev,_ZThn228_N8S6262C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S6262C14D0Ev,_ZTv0_n24_N8S6262C14D0Ev)();
extern void ABISELECT(_ZThn352_N8S6262C14D0Ev,_ZThn228_N8S6262C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6262C10__8S6262C14__7S6262C1[] = {
  ABISELECT(-352,-228),
  ABISELECT(-288,-200),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  ABISELECT(-352,-228),
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6262C14D1Ev,_ZTv0_n24_N8S6262C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6262C14D0Ev,_ZTv0_n24_N8S6262C14D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N8S6262C14D1Ev,_ZTvn844_n24_N8S6262C14D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S6262C14D0Ev,_ZTvn844_n24_N8S6262C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6262C68S6262C10__A1__8S6262C14__7S6262C1[] = {
  ABISELECT(-1392,-1028),
  ABISELECT(-1424,-1044),
  ABISELECT(-1488,-1072),
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S6262C14D1Ev,_ZTvn844_n24_N8S6262C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S6262C14D0Ev,_ZTvn844_n24_N8S6262C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6262C98S6262C10__A1__8S6262C14__7S6262C1[] = {
  ABISELECT(-1456,-1060),
  ABISELECT(-1520,-1088),
  (VTBL_ENTRY)&(_ZTI8S6262C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6262C15__7S6262C1[] = {
  ABISELECT(-1472,-1072),
  ABISELECT(-1616,-1172),
  ABISELECT(-16,-12),
  ABISELECT(16,8),
  ABISELECT(-1584,-1156),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6262C11__8S6262C15__7S6262C1[] = {
  ABISELECT(-1632,-1180),
  ABISELECT(-1600,-1164),
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6262C15[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6262C9__8S6262C15__7S6262C1[] = {
  ABISELECT(-144,-100),
  ABISELECT(1472,1072),
  (VTBL_ENTRY)&(_ZTI8S6262C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6262C11__A1__7S6262C1[] = {
  ABISELECT(-1632,-1180),
  ABISELECT(-1600,-1164),
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S6262C11[0]),
};
static  VTT_ENTRY vtt_S6262C1[] = {
  {&(_ZTV7S6262C1[13]),  13,71},
  {&(_tg__ZTV8S6262C13__7S6262C1[12]),  12,14},
  {&(_tg__ZTV7S6262C6__8S6262C13__7S6262C1[5]),  5,7},
  {&(_tg__ZTV8S6262C13__7S6262C1[12]),  12,14},
  {&(_tg__ZTV7S6262C9__8S6262C13__7S6262C1[3]),  3,3},
  {&(_tg__ZTV8S6262C10__8S6262C13__7S6262C1[6]),  6,8},
  {&(_tg__ZTV7S6262C68S6262C10__A1__8S6262C13__7S6262C1[4]),  4,6},
  {&(_tg__ZTV7S6262C98S6262C10__A1__8S6262C13__7S6262C1[3]),  3,3},
  {&(_tg__ZTV8S6262C15__8S6262C13__7S6262C1[7]),  7,7},
  {&(_tg__ZTV8S6262C11__A1__8S6262C13__7S6262C1[5]),  5,5},
  {&(_ZTV7S6262C1[29]),  29,71},
  {&(_ZTV7S6262C1[37]),  37,71},
  {&(_ZTV7S6262C1[42]),  42,71},
  {&(_ZTV7S6262C1[48]),  48,71},
  {&(_ZTV7S6262C1[54]),  54,71},
  {&(_ZTV7S6262C1[59]),  59,71},
  {&(_ZTV7S6262C1[13]),  13,71},
  {&(_ZTV7S6262C1[66]),  66,71},
  {&(_ZTV7S6262C1[71]),  71,71},
  {&(_tg__ZTV7S6262C3__7S6262C1[8]),  8,11},
  {&(_tg__ZTV7S6262C47S6262C3__7S6262C1[6]),  6,8},
  {&(_tg__ZTV7S6262C6__7S6262C47S6262C3__7S6262C1[5]),  5,7},
  {&(_tg__ZTV7S6262C9__7S6262C47S6262C3__7S6262C1[3]),  3,3},
  {&(_tg__ZTV7S6262C6__7S6262C3__7S6262C1[5]),  5,7},
  {&(_tg__ZTV7S6262C9__7S6262C3__7S6262C1[3]),  3,3},
  {&(_tg__ZTV8S6262C10__7S6262C3__7S6262C1[6]),  6,8},
  {&(_tg__ZTV7S6262C68S6262C10__A1__7S6262C3__7S6262C1[4]),  4,6},
  {&(_tg__ZTV7S6262C98S6262C10__A1__7S6262C3__7S6262C1[3]),  3,3},
  {&(_tg__ZTV7S6262C6__7S6262C1[4]),  4,6},
  {&(_tg__ZTV7S6262C9__7S6262C1[3]),  3,3},
  {&(_tg__ZTV8S6262C10__7S6262C1[5]),  5,7},
  {&(_tg__ZTV8S6262C118S6262C10__7S6262C1[5]),  5,5},
  {&(_tg__ZTV7S6262C68S6262C10__A1__7S6262C1[4]),  4,6},
  {&(_tg__ZTV7S6262C98S6262C10__A1__7S6262C1[3]),  3,3},
  {&(_tg__ZTV7S6262C6__8S6262C10__7S6262C1[4]),  4,6},
  {&(_tg__ZTV7S6262C9__8S6262C10__7S6262C1[3]),  3,3},
  {&(_tg__ZTV8S6262C14__7S6262C1[8]),  8,10},
  {&(_tg__ZTV7S6262C9__8S6262C14__7S6262C1[3]),  3,3},
  {&(_tg__ZTV7S6262C6__8S6262C14__7S6262C1[5]),  5,7},
  {&(_tg__ZTV8S6262C10__8S6262C14__7S6262C1[6]),  6,8},
  {&(_tg__ZTV7S6262C68S6262C10__A1__8S6262C14__7S6262C1[4]),  4,6},
  {&(_tg__ZTV7S6262C98S6262C10__A1__8S6262C14__7S6262C1[3]),  3,3},
  {&(_tg__ZTV8S6262C15__7S6262C1[7]),  7,7},
  {&(_tg__ZTV8S6262C11__8S6262C15__7S6262C1[5]),  5,5},
  {&(_tg__ZTV7S6262C9__8S6262C15__7S6262C1[3]),  3,3},
  {&(_tg__ZTV8S6262C11__A1__7S6262C1[5]),  5,5},
};
extern VTBL_ENTRY _ZTI7S6262C1[];
extern  VTBL_ENTRY _ZTV7S6262C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6262C1[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S6262C14D0Ev,_ZTv0_n24_N8S6262C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S6262C14D0Ev,_ZThn228_N8S6262C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S6262C14D1Ev,_ZTv0_n24_N8S6262C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S6262C14D1Ev,_ZThn228_N8S6262C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6262C14D0Ev,_ZTv0_n20_N8S6262C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S6262C14D0Ev,_ZThn28_N8S6262C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6262C14D1Ev,_ZTv0_n20_N8S6262C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S6262C14D1Ev,_ZThn28_N8S6262C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6262C3D0Ev,_ZTv0_n24_N7S6262C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S6262C3D0Ev,_ZThn216_N7S6262C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6262C3D1Ev,_ZTv0_n24_N7S6262C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S6262C3D1Ev,_ZThn216_N7S6262C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6262C3D0Ev,_ZTv0_n20_N7S6262C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6262C3D0Ev,_ZThn16_N7S6262C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6262C3D1Ev,_ZTv0_n20_N7S6262C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6262C3D1Ev,_ZThn16_N7S6262C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6262C4D0Ev,_ZTv0_n20_N7S6262C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6262C4D0Ev,_ZThn16_N7S6262C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6262C4D1Ev,_ZTv0_n20_N7S6262C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6262C4D1Ev,_ZThn16_N7S6262C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S6262C13D0Ev,_ZTv0_n24_N8S6262C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S6262C13D0Ev,_ZThn228_N8S6262C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S6262C13D1Ev,_ZTv0_n24_N8S6262C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S6262C13D1Ev,_ZThn228_N8S6262C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6262C13D0Ev,_ZTv0_n20_N8S6262C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S6262C13D0Ev,_ZThn28_N8S6262C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6262C13D1Ev,_ZTv0_n20_N8S6262C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S6262C13D1Ev,_ZThn28_N8S6262C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6262C1D0Ev,_ZTv0_n24_N7S6262C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S6262C1D0Ev,_ZThn228_N7S6262C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6262C1D1Ev,_ZTv0_n24_N7S6262C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S6262C1D1Ev,_ZThn228_N7S6262C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6262C1D0Ev,_ZTv0_n20_N7S6262C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6262C1D0Ev,_ZThn28_N7S6262C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6262C1D1Ev,_ZTv0_n20_N7S6262C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6262C1D1Ev,_ZThn28_N7S6262C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6262C1D0Ev,_ZTv0_n36_N7S6262C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6262C1D0Ev,_ZThn12_N7S6262C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6262C1D1Ev,_ZTv0_n36_N7S6262C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6262C1D1Ev,_ZThn12_N7S6262C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6262C1 = {  "S6262C1", // class name
  bases_S6262C1, 28,
  &(vtc_S6262C1[0]), // expected_vtbl_contents
  &(vtt_S6262C1[0]), // expected_vtt_contents
  ABISELECT(2832,2052), // object size
  NSPAIRA(_ZTI7S6262C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6262C1),71, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6262C1),46, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1094C3  : S3221C8_nt {
};
//SIG(-1 S1094C3) C1{ BC2{ m Fi}}



static void Test_S1094C3()
{
  extern Class_Descriptor cd_S1094C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1094C3, buf);
    S1094C3 &lv = *(new (buf) S1094C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1094C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1094C3)");
    check_base_class_offset(lv, (S3221C8_nt*), 0, "S1094C3");
    test_class_info(&lv, &cd_S1094C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1094C3(Test_S1094C3, "S1094C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S1094C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1094C3[];
Class_Descriptor cd_S1094C3 = {  "S1094C3", // class name
  bases_S1094C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1094C3),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  S1094C2  : S1094C3 {
  ::S2632C18_nt s1094c2f0;
  ::S1098C5_nt s1094c2f1;
  ::S1098C5_nt s1094c2f2;
  ::S2632C13 s1094c2f3;
  char s1094c2f4;
  ::S1098C10_nt s1094c2f5;
  ::S1093C13 s1094c2f6;
  void *s1094c2f7;
  ::S1093C13 s1094c2f8;
  ::S1093C13 s1094c2f9;
  char s1094c2f10[5];
  virtual  ~S1094C2(); // _ZN7S1094C2D1Ev
  virtual void  v4(); // _ZN7S1094C22v4Ev
  virtual void  v5(); // _ZN7S1094C22v5Ev
  virtual void  v6(); // _ZN7S1094C22v6Ev
  virtual void  v7(); // _ZN7S1094C22v7Ev
  virtual void  v8(); // _ZN7S1094C22v8Ev
  virtual void  v9(); // _ZN7S1094C22v9Ev
  virtual void  v10(); // _ZN7S1094C23v10Ev
  S1094C2(); // tgen
};
//SIG(-1 S1094C2) C1{ BC2{ BC3{ m Fi}} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp} FC5{ m Fp} FC5 FC6{ m Fi FC7{ BC8{ m Fp Fi}}} Fc FC9{ m FC10{ m Fi[2]} FC11{ m Fi[2]}} FC12{ m FC10 FC11} Fp FC12 FC12 Fc[5]}


 S1094C2 ::~S1094C2(){ note_dtor("S1094C2", this);}
void  S1094C2 ::v4(){vfunc_called(this, "_ZN7S1094C22v4Ev");}
void  S1094C2 ::v5(){vfunc_called(this, "_ZN7S1094C22v5Ev");}
void  S1094C2 ::v6(){vfunc_called(this, "_ZN7S1094C22v6Ev");}
void  S1094C2 ::v7(){vfunc_called(this, "_ZN7S1094C22v7Ev");}
void  S1094C2 ::v8(){vfunc_called(this, "_ZN7S1094C22v8Ev");}
void  S1094C2 ::v9(){vfunc_called(this, "_ZN7S1094C22v9Ev");}
void  S1094C2 ::v10(){vfunc_called(this, "_ZN7S1094C23v10Ev");}
S1094C2 ::S1094C2(){ note_ctor("S1094C2", this);} // tgen

static void Test_S1094C2()
{
  extern Class_Descriptor cd_S1094C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S1094C2, buf);
    S1094C2 *dp, &lv = *(dp=new (buf) S1094C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S1094C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1094C2)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1094C3*), ABISELECT(8,4), "S1094C2");
    check_base_class_offset(lv, (S1094C3*), ABISELECT(8,4), "S1094C2");
    check_field_offset(lv, s1094c2f0, ABISELECT(16,8), "S1094C2.s1094c2f0");
    check_field_offset(lv, s1094c2f1, ABISELECT(24,12), "S1094C2.s1094c2f1");
    check_field_offset(lv, s1094c2f2, ABISELECT(32,16), "S1094C2.s1094c2f2");
    check_field_offset(lv, s1094c2f3, ABISELECT(40,20), "S1094C2.s1094c2f3");
    check_field_offset(lv, s1094c2f4, ABISELECT(64,32), "S1094C2.s1094c2f4");
    check_field_offset(lv, s1094c2f5, ABISELECT(68,36), "S1094C2.s1094c2f5");
    check_field_offset(lv, s1094c2f6, ABISELECT(84,52), "S1094C2.s1094c2f6");
    check_field_offset(lv, s1094c2f7, ABISELECT(104,68), "S1094C2.s1094c2f7");
    check_field_offset(lv, s1094c2f8, ABISELECT(112,72), "S1094C2.s1094c2f8");
    check_field_offset(lv, s1094c2f9, ABISELECT(128,88), "S1094C2.s1094c2f9");
    check_field_offset(lv, s1094c2f10, ABISELECT(144,104), "S1094C2.s1094c2f10");
    test_class_info(&lv, &cd_S1094C2);
    dp->~S1094C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1094C2(Test_S1094C2, "S1094C2", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S1094C2C1Ev();
extern void _ZN7S1094C2D1Ev();
Name_Map name_map_S1094C2[] = {
  NSPAIR(_ZN7S1094C2C1Ev),
  NSPAIR(_ZN7S1094C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1094C3;
extern VTBL_ENTRY _ZTI7S1094C3[];
static Base_Class bases_S1094C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1094C3,    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 _ZTI7S1094C2[];
extern void _ZN7S1094C2D1Ev();
extern void _ZN7S1094C2D0Ev();
extern void _ZN7S1094C22v4Ev();
extern void _ZN7S1094C22v5Ev();
extern void _ZN7S1094C22v6Ev();
extern void _ZN7S1094C22v7Ev();
extern void _ZN7S1094C22v8Ev();
extern void _ZN7S1094C22v9Ev();
extern void _ZN7S1094C23v10Ev();
static  VTBL_ENTRY vtc_S1094C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1094C2[0]),
  (VTBL_ENTRY)&_ZN7S1094C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1094C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1094C22v4Ev,
  (VTBL_ENTRY)&_ZN7S1094C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1094C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1094C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1094C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1094C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1094C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S1094C2[];
extern  VTBL_ENTRY _ZTV7S1094C2[];
Class_Descriptor cd_S1094C2 = {  "S1094C2", // class name
  bases_S1094C2, 2,
  &(vtc_S1094C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S1094C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1094C2),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  S1094C1  : S1094C2 {
  int s1094c1f0;
  ::S1098C7_nt s1094c1f1;
  virtual void  v1(); // _ZN7S1094C12v1Ev
  virtual void  v2(); // _ZN7S1094C12v2Ev
  virtual void  v3(); // _ZN7S1094C12v3Ev
  ~S1094C1(); // tgen
  S1094C1(); // tgen
};
//SIG(1 S1094C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v4 v5 v6 v7 v8 v9 v10 FC5{ m Fp} FC6{ m Fp} FC6 FC7{ m Fi FC8{ BC9{ m Fp Fi}}} Fc FC10{ m FC11{ m Fi[2]} FC12{ m Fi[2]}} FC13{ m FC11 FC12} Fp FC13 FC13 Fc[5]} v1 v2 v3 Fi FC14{ m Fi FC8}}


void  S1094C1 ::v1(){vfunc_called(this, "_ZN7S1094C12v1Ev");}
void  S1094C1 ::v2(){vfunc_called(this, "_ZN7S1094C12v2Ev");}
void  S1094C1 ::v3(){vfunc_called(this, "_ZN7S1094C12v3Ev");}
S1094C1 ::~S1094C1(){ note_dtor("S1094C1", this);} // tgen
S1094C1 ::S1094C1(){ note_ctor("S1094C1", this);} // tgen

static void Test_S1094C1()
{
  extern Class_Descriptor cd_S1094C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,33)];
    init_test(&cd_S1094C1, buf);
    S1094C1 *dp, &lv = *(dp=new (buf) S1094C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,128), "sizeof(S1094C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1094C1)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1094C3*)(S1094C2*), ABISELECT(8,4), "S1094C1");
    check_base_class_offset(lv, (S1094C3*)(S1094C2*), ABISELECT(8,4), "S1094C1");
    check_base_class_offset(lv, (S1094C2*), 0, "S1094C1");
    check_field_offset(lv, s1094c1f0, ABISELECT(152,112), "S1094C1.s1094c1f0");
    check_field_offset(lv, s1094c1f1, ABISELECT(160,116), "S1094C1.s1094c1f1");
    test_class_info(&lv, &cd_S1094C1);
    dp->~S1094C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1094C1(Test_S1094C1, "S1094C1", ABISELECT(184,128));

#else // __cplusplus

extern void _ZN7S1094C1C1Ev();
extern void _ZN7S1094C1D1Ev();
Name_Map name_map_S1094C1[] = {
  NSPAIR(_ZN7S1094C1C1Ev),
  NSPAIR(_ZN7S1094C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1094C3;
extern VTBL_ENTRY _ZTI7S1094C3[];
extern Class_Descriptor cd_S1094C2;
extern VTBL_ENTRY _ZTI7S1094C2[];
extern  VTBL_ENTRY _ZTV7S1094C2[];
static Base_Class bases_S1094C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1094C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1094C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1094C1[];
extern void _ZN7S1094C1D1Ev();
extern void _ZN7S1094C1D0Ev();
extern void _ZN7S1094C22v4Ev();
extern void _ZN7S1094C22v5Ev();
extern void _ZN7S1094C22v6Ev();
extern void _ZN7S1094C22v7Ev();
extern void _ZN7S1094C22v8Ev();
extern void _ZN7S1094C22v9Ev();
extern void _ZN7S1094C23v10Ev();
extern void _ZN7S1094C12v1Ev();
extern void _ZN7S1094C12v2Ev();
extern void _ZN7S1094C12v3Ev();
static  VTBL_ENTRY vtc_S1094C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1094C1[0]),
  (VTBL_ENTRY)&_ZN7S1094C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1094C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1094C22v4Ev,
  (VTBL_ENTRY)&_ZN7S1094C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1094C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1094C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1094C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1094C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1094C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1094C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1094C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1094C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1094C1[];
extern  VTBL_ENTRY _ZTV7S1094C1[];
Class_Descriptor cd_S1094C1 = {  "S1094C1", // class name
  bases_S1094C1, 3,
  &(vtc_S1094C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,128), // object size
  NSPAIRA(_ZTI7S1094C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1094C1),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  S1102C3  : S3221C8_nt {
};
//SIG(-1 S1102C3) C1{ BC2{ m Fi}}



static void Test_S1102C3()
{
  extern Class_Descriptor cd_S1102C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1102C3, buf);
    S1102C3 &lv = *(new (buf) S1102C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1102C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1102C3)");
    check_base_class_offset(lv, (S3221C8_nt*), 0, "S1102C3");
    test_class_info(&lv, &cd_S1102C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1102C3(Test_S1102C3, "S1102C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S1102C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1102C3[];
Class_Descriptor cd_S1102C3 = {  "S1102C3", // class name
  bases_S1102C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1102C3),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  S1102C2  : S1102C3 {
  ::S2632C18_nt s1102c2f0;
  ::S1098C5_nt s1102c2f1;
  ::S1098C5_nt s1102c2f2;
  ::S2632C13 s1102c2f3;
  char s1102c2f4;
  ::S1098C10_nt s1102c2f5;
  ::S1093C13 s1102c2f6;
  void *s1102c2f7;
  ::S1093C13 s1102c2f8;
  ::S1093C13 s1102c2f9;
  char s1102c2f10[5];
  virtual  ~S1102C2(); // _ZN7S1102C2D1Ev
  virtual void  v5(); // _ZN7S1102C22v5Ev
  virtual void  v6(); // _ZN7S1102C22v6Ev
  virtual void  v7(); // _ZN7S1102C22v7Ev
  virtual void  v8(); // _ZN7S1102C22v8Ev
  virtual void  v9(); // _ZN7S1102C22v9Ev
  virtual void  v10(); // _ZN7S1102C23v10Ev
  virtual void  v11(); // _ZN7S1102C23v11Ev
  S1102C2(); // tgen
};
//SIG(-1 S1102C2) C1{ BC2{ BC3{ m Fi}} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp} FC5{ m Fp} FC5 FC6{ m Fi FC7{ BC8{ m Fp Fi}}} Fc FC9{ m FC10{ m Fi[2]} FC11{ m Fi[2]}} FC12{ m FC10 FC11} Fp FC12 FC12 Fc[5]}


 S1102C2 ::~S1102C2(){ note_dtor("S1102C2", this);}
void  S1102C2 ::v5(){vfunc_called(this, "_ZN7S1102C22v5Ev");}
void  S1102C2 ::v6(){vfunc_called(this, "_ZN7S1102C22v6Ev");}
void  S1102C2 ::v7(){vfunc_called(this, "_ZN7S1102C22v7Ev");}
void  S1102C2 ::v8(){vfunc_called(this, "_ZN7S1102C22v8Ev");}
void  S1102C2 ::v9(){vfunc_called(this, "_ZN7S1102C22v9Ev");}
void  S1102C2 ::v10(){vfunc_called(this, "_ZN7S1102C23v10Ev");}
void  S1102C2 ::v11(){vfunc_called(this, "_ZN7S1102C23v11Ev");}
S1102C2 ::S1102C2(){ note_ctor("S1102C2", this);} // tgen

static void Test_S1102C2()
{
  extern Class_Descriptor cd_S1102C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S1102C2, buf);
    S1102C2 *dp, &lv = *(dp=new (buf) S1102C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S1102C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1102C2)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1102C3*), ABISELECT(8,4), "S1102C2");
    check_base_class_offset(lv, (S1102C3*), ABISELECT(8,4), "S1102C2");
    check_field_offset(lv, s1102c2f0, ABISELECT(16,8), "S1102C2.s1102c2f0");
    check_field_offset(lv, s1102c2f1, ABISELECT(24,12), "S1102C2.s1102c2f1");
    check_field_offset(lv, s1102c2f2, ABISELECT(32,16), "S1102C2.s1102c2f2");
    check_field_offset(lv, s1102c2f3, ABISELECT(40,20), "S1102C2.s1102c2f3");
    check_field_offset(lv, s1102c2f4, ABISELECT(64,32), "S1102C2.s1102c2f4");
    check_field_offset(lv, s1102c2f5, ABISELECT(68,36), "S1102C2.s1102c2f5");
    check_field_offset(lv, s1102c2f6, ABISELECT(84,52), "S1102C2.s1102c2f6");
    check_field_offset(lv, s1102c2f7, ABISELECT(104,68), "S1102C2.s1102c2f7");
    check_field_offset(lv, s1102c2f8, ABISELECT(112,72), "S1102C2.s1102c2f8");
    check_field_offset(lv, s1102c2f9, ABISELECT(128,88), "S1102C2.s1102c2f9");
    check_field_offset(lv, s1102c2f10, ABISELECT(144,104), "S1102C2.s1102c2f10");
    test_class_info(&lv, &cd_S1102C2);
    dp->~S1102C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1102C2(Test_S1102C2, "S1102C2", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S1102C2C1Ev();
extern void _ZN7S1102C2D1Ev();
Name_Map name_map_S1102C2[] = {
  NSPAIR(_ZN7S1102C2C1Ev),
  NSPAIR(_ZN7S1102C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1102C3;
extern VTBL_ENTRY _ZTI7S1102C3[];
static Base_Class bases_S1102C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1102C3,    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 _ZTI7S1102C2[];
extern void _ZN7S1102C2D1Ev();
extern void _ZN7S1102C2D0Ev();
extern void _ZN7S1102C22v5Ev();
extern void _ZN7S1102C22v6Ev();
extern void _ZN7S1102C22v7Ev();
extern void _ZN7S1102C22v8Ev();
extern void _ZN7S1102C22v9Ev();
extern void _ZN7S1102C23v10Ev();
extern void _ZN7S1102C23v11Ev();
static  VTBL_ENTRY vtc_S1102C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1102C2[0]),
  (VTBL_ENTRY)&_ZN7S1102C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1102C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1102C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1102C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1102C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1102C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1102C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1102C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1102C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S1102C2[];
extern  VTBL_ENTRY _ZTV7S1102C2[];
Class_Descriptor cd_S1102C2 = {  "S1102C2", // class name
  bases_S1102C2, 2,
  &(vtc_S1102C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S1102C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1102C2),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  S1102C1  : S1102C2 {
  int s1102c1f0[4];
  ::S392C18_nt s1102c1f1;
  int s1102c1f2;
  virtual void  v1(); // _ZN7S1102C12v1Ev
  virtual void  v2(); // _ZN7S1102C12v2Ev
  virtual void  v3(); // _ZN7S1102C12v3Ev
  virtual void  v4(); // _ZN7S1102C12v4Ev
  ~S1102C1(); // tgen
  S1102C1(); // tgen
};
//SIG(1 S1102C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v5 v6 v7 v8 v9 v10 v11 FC5{ m Fp} FC6{ m Fp} FC6 FC7{ m Fi FC8{ BC9{ m Fp Fi}}} Fc FC10{ m FC11{ m Fi[2]} FC12{ m Fi[2]}} FC13{ m FC11 FC12} Fp FC13 FC13 Fc[5]} v1 v2 v3 v4 Fi[4] FC14{ m Fi Fc} Fi}


void  S1102C1 ::v1(){vfunc_called(this, "_ZN7S1102C12v1Ev");}
void  S1102C1 ::v2(){vfunc_called(this, "_ZN7S1102C12v2Ev");}
void  S1102C1 ::v3(){vfunc_called(this, "_ZN7S1102C12v3Ev");}
void  S1102C1 ::v4(){vfunc_called(this, "_ZN7S1102C12v4Ev");}
S1102C1 ::~S1102C1(){ note_dtor("S1102C1", this);} // tgen
S1102C1 ::S1102C1(){ note_ctor("S1102C1", this);} // tgen

static void Test_S1102C1()
{
  extern Class_Descriptor cd_S1102C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,36)];
    init_test(&cd_S1102C1, buf);
    S1102C1 *dp, &lv = *(dp=new (buf) S1102C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,140), "sizeof(S1102C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1102C1)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1102C3*)(S1102C2*), ABISELECT(8,4), "S1102C1");
    check_base_class_offset(lv, (S1102C3*)(S1102C2*), ABISELECT(8,4), "S1102C1");
    check_base_class_offset(lv, (S1102C2*), 0, "S1102C1");
    check_field_offset(lv, s1102c1f0, ABISELECT(152,112), "S1102C1.s1102c1f0");
    check_field_offset(lv, s1102c1f1, ABISELECT(168,128), "S1102C1.s1102c1f1");
    check_field_offset(lv, s1102c1f2, ABISELECT(176,136), "S1102C1.s1102c1f2");
    test_class_info(&lv, &cd_S1102C1);
    dp->~S1102C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1102C1(Test_S1102C1, "S1102C1", ABISELECT(184,140));

#else // __cplusplus

extern void _ZN7S1102C1C1Ev();
extern void _ZN7S1102C1D1Ev();
Name_Map name_map_S1102C1[] = {
  NSPAIR(_ZN7S1102C1C1Ev),
  NSPAIR(_ZN7S1102C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1102C3;
extern VTBL_ENTRY _ZTI7S1102C3[];
extern Class_Descriptor cd_S1102C2;
extern VTBL_ENTRY _ZTI7S1102C2[];
extern  VTBL_ENTRY _ZTV7S1102C2[];
static Base_Class bases_S1102C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1102C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1102C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1102C1[];
extern void _ZN7S1102C1D1Ev();
extern void _ZN7S1102C1D0Ev();
extern void _ZN7S1102C22v5Ev();
extern void _ZN7S1102C22v6Ev();
extern void _ZN7S1102C22v7Ev();
extern void _ZN7S1102C22v8Ev();
extern void _ZN7S1102C22v9Ev();
extern void _ZN7S1102C23v10Ev();
extern void _ZN7S1102C23v11Ev();
extern void _ZN7S1102C12v1Ev();
extern void _ZN7S1102C12v2Ev();
extern void _ZN7S1102C12v3Ev();
extern void _ZN7S1102C12v4Ev();
static  VTBL_ENTRY vtc_S1102C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1102C1[0]),
  (VTBL_ENTRY)&_ZN7S1102C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1102C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1102C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1102C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1102C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1102C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1102C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1102C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1102C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1102C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1102C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1102C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1102C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1102C1[];
extern  VTBL_ENTRY _ZTV7S1102C1[];
Class_Descriptor cd_S1102C1 = {  "S1102C1", // class name
  bases_S1102C1, 3,
  &(vtc_S1102C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,140), // object size
  NSPAIRA(_ZTI7S1102C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1102C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7725C3  : virtual S5643C3_nt , S5643C2 {
  int s7725c3f0[4];
  virtual  ~S7725C3(); // _ZN7S7725C3D2Ev
  S7725C3(); // tgen
};
//SIG(-1 S7725C3) C1{ VBC2{ m FD} BC3{ m FC2[7]} vd Fi[4]}


 S7725C3 ::~S7725C3(){ note_dtor("S7725C3", this);}
S7725C3 ::S7725C3(){ note_ctor("S7725C3", this);} // tgen

static void Test_S7725C3()
{
  extern Class_Descriptor cd_S7725C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,30)];
    init_test(&cd_S7725C3, buf);
    S7725C3 *dp, &lv = *(dp=new (buf) S7725C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,116), "sizeof(S7725C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7725C3)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(144,104), "S7725C3");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(16,4), "S7725C3");
    check_field_offset(lv, s7725c3f0, ABISELECT(128,88), "S7725C3.s7725c3f0");
    test_class_info(&lv, &cd_S7725C3);
    dp->~S7725C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7725C3(Test_S7725C3, "S7725C3", ABISELECT(160,116));

#else // __cplusplus

extern void _ZN7S7725C3C1Ev();
extern void _ZN7S7725C3D2Ev();
Name_Map name_map_S7725C3[] = {
  NSPAIR(_ZN7S7725C3C1Ev),
  NSPAIR(_ZN7S7725C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
static Base_Class bases_S7725C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_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
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C2,    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 _ZTI7S7725C3[];
extern void _ZN7S7725C3D1Ev();
extern void _ZN7S7725C3D0Ev();
static  VTBL_ENTRY vtc_S7725C3[] = {
  ABISELECT(144,104),
  0,
  (VTBL_ENTRY)&(_ZTI7S7725C3[0]),
  (VTBL_ENTRY)&_ZN7S7725C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7725C3D0Ev,
};
extern VTBL_ENTRY _ZTV7S7725C3[];
static  VTT_ENTRY vtt_S7725C3[] = {
  {&(_ZTV7S7725C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7725C3[];
extern  VTBL_ENTRY _ZTV7S7725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7725C3[];
Class_Descriptor cd_S7725C3 = {  "S7725C3", // class name
  bases_S7725C3, 2,
  &(vtc_S7725C3[0]), // expected_vtbl_contents
  &(vtt_S7725C3[0]), // expected_vtt_contents
  ABISELECT(160,116), // object size
  NSPAIRA(_ZTI7S7725C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7725C3),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7725C3),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7725C2  : virtual S7725C3 , virtual S16130C17_nt {
  int s7725c2f0;
  ~S7725C2(); // tgen
  S7725C2(); // tgen
};
//SIG(-1 S7725C2) C1{ VBC2{ VBC3{ m FD} BC4{ m FC3[7]} vd Fi[4]} VBC5{ m} Fi}


S7725C2 ::~S7725C2(){ note_dtor("S7725C2", this);} // tgen
S7725C2 ::S7725C2(){ note_ctor("S7725C2", this);} // tgen

static void Test_S7725C2()
{
  extern Class_Descriptor cd_S7725C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,32)];
    init_test(&cd_S7725C2, buf);
    S7725C2 *dp, &lv = *(dp=new (buf) S7725C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S7725C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7725C2)");
    check_base_class_offset(lv, (S5643C3_nt*)(S7725C3*), ABISELECT(160,112), "S7725C2");
    check_base_class_offset(lv, (S5643C2*)(S7725C3*), ABISELECT(32,12), "S7725C2");
    check_base_class_offset(lv, (S7725C3*), ABISELECT(16,8), "S7725C2");
    check_base_class_offset(lv, (S16130C17_nt*), 0, "S7725C2");
    check_field_offset(lv, s7725c2f0, ABISELECT(8,4), "S7725C2.s7725c2f0");
    test_class_info(&lv, &cd_S7725C2);
    dp->~S7725C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7725C2(Test_S7725C2, "S7725C2", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN7S7725C2C1Ev();
extern void _ZN7S7725C2D1Ev();
Name_Map name_map_S7725C2[] = {
  NSPAIR(_ZN7S7725C2C1Ev),
  NSPAIR(_ZN7S7725C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S7725C3;
extern VTBL_ENTRY _ZTI7S7725C3[];
extern  VTBL_ENTRY _ZTV7S7725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7725C3[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
static Base_Class bases_S7725C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_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
    2, //immediately_derived
  0, 1},
  {&cd_S5643C2,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7725C3,    ABISELECT(16,8), //bcp->offset
    7, //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},
  {&cd_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7725C2[];
extern void _ZN7S7725C2D1Ev();
extern void _ZN7S7725C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7725C2D1Ev,_ZTv0_n16_N7S7725C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7725C2D1Ev,_ZThn8_N7S7725C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7725C2D0Ev,_ZTv0_n16_N7S7725C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7725C2D0Ev,_ZThn8_N7S7725C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7725C2[] = {
  0,
  ABISELECT(160,112),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7725C2[0]),
  (VTBL_ENTRY)&_ZN7S7725C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7725C2D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(144,104),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7725C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7725C2D1Ev,_ZTv0_n16_N7S7725C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7725C2D0Ev,_ZTv0_n16_N7S7725C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7725C2[];
extern void _ZN7S7725C3D1Ev();
extern void _ZN7S7725C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7725C3__7S7725C2[] = {
  ABISELECT(144,104),
  0,
  (VTBL_ENTRY)&(_ZTI7S7725C3[0]),
  (VTBL_ENTRY)&_ZN7S7725C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7725C3D0Ev,
};
static  VTT_ENTRY vtt_S7725C2[] = {
  {&(_ZTV7S7725C2[5]),  5,13},
  {&(_ZTV7S7725C2[11]),  11,13},
  {&(_tg__ZTV7S7725C3__7S7725C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7725C2[];
extern  VTBL_ENTRY _ZTV7S7725C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7725C2[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7725C2D0Ev,_ZTv0_n16_N7S7725C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7725C2D0Ev,_ZThn8_N7S7725C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7725C2D1Ev,_ZTv0_n16_N7S7725C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7725C2D1Ev,_ZThn8_N7S7725C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7725C2 = {  "S7725C2", // class name
  bases_S7725C2, 4,
  &(vtc_S7725C2[0]), // expected_vtbl_contents
  &(vtt_S7725C2[0]), // expected_vtt_contents
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI7S7725C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7725C2),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7725C2),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7725C7  : virtual S5643C3_nt , virtual S5643C2 , virtual S5408C7_nt {
  ::S5643C2 s7725c7f0[10];
  ~S7725C7(); // tgen
  S7725C7(); // tgen
};
//SIG(-1 S7725C7) C1{ VBC2{ m FD} VBC3{ m FC2[7]} VBC4{ m} FC3[10]}


S7725C7 ::~S7725C7(){ note_dtor("S7725C7", this);} // tgen
S7725C7 ::S7725C7(){ note_ctor("S7725C7", this);} // tgen

static void Test_S7725C7()
{
  extern Class_Descriptor cd_S7725C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(80,236)];
    init_test(&cd_S7725C7, buf);
    S7725C7 *dp, &lv = *(dp=new (buf) S7725C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1264,940), "sizeof(S7725C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7725C7)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(1136,844), "S7725C7");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(1152,856), "S7725C7");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S7725C7");
    check_field_offset(lv, s7725c7f0, ABISELECT(16,4), "S7725C7.s7725c7f0");
    test_class_info(&lv, &cd_S7725C7);
    dp->~S7725C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7725C7(Test_S7725C7, "S7725C7", ABISELECT(1264,940));

#else // __cplusplus

extern void _ZN7S7725C7C1Ev();
extern void _ZN7S7725C7D1Ev();
Name_Map name_map_S7725C7[] = {
  NSPAIR(_ZN7S7725C7C1Ev),
  NSPAIR(_ZN7S7725C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
static Base_Class bases_S7725C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(1136,844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5643C2,    ABISELECT(1152,856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7725C7[];
static  VTBL_ENTRY vtc_S7725C7[] = {
  0,
  ABISELECT(1152,856),
  ABISELECT(1136,844),
  0,
  (VTBL_ENTRY)&(_ZTI7S7725C7[0]),
};
extern VTBL_ENTRY _ZTV7S7725C7[];
static  VTT_ENTRY vtt_S7725C7[] = {
  {&(_ZTV7S7725C7[5]),  5,5},
};
extern VTBL_ENTRY _ZTI7S7725C7[];
extern  VTBL_ENTRY _ZTV7S7725C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7725C7[];
Class_Descriptor cd_S7725C7 = {  "S7725C7", // class name
  bases_S7725C7, 3,
  &(vtc_S7725C7[0]), // expected_vtbl_contents
  &(vtt_S7725C7[0]), // expected_vtt_contents
  ABISELECT(1264,940), // object size
  NSPAIRA(_ZTI7S7725C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7725C7),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7725C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7725C1  : S7725C2 , S7725C7 , S5643C2 {
  ::S6262C13 s7725c1f0;
  ~S7725C1(); // tgen
  S7725C1(); // tgen
};
//SIG(1 S7725C1) C1{ BC2{ VBC3{ VBC4{ m FD} BC5{ m FC4[7]} vd Fi[4]} VBC6{ m} Fi} BC7{ VBC4 VBC5 VBC8{ m} FC5[10]} BC5 FC9{ VBC10{ BC4 VBC8 VBC5 vd} VBC11{ VBC12{ BC4 BC5 VBC8} VBC10 BC6 VBC13{ VBC8 BC14{ VBC4 VBC5 VBC8 FC5[10]} BC10 BC12} vd} VBC15{ VBC5 VBC14 VBC12 BC8 FC8} BC8 vd}}


S7725C1 ::~S7725C1(){ note_dtor("S7725C1", this);} // tgen
S7725C1 ::S7725C1(){ note_ctor("S7725C1", this);} // tgen

static void Test_S7725C1()
{
  extern Class_Descriptor cd_S7725C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(271,792)];
    init_test(&cd_S7725C1, buf);
    S7725C1 *dp, &lv = *(dp=new (buf) S7725C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4320,3164), "sizeof(S7725C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7725C1)");
    check_base_class_offset(lv, (S5643C3_nt*)(S7725C3*), ABISELECT(4192,3068), "S7725C1");
    check_base_class_offset(lv, (S5643C3_nt*)(S7725C7*), ABISELECT(4192,3068), "S7725C1");
    check_base_class_offset(lv, (S5643C2*)(S7725C3*), ABISELECT(4064,2968), "S7725C1");
    check_base_class_offset(lv, (S7725C3*)(S7725C2*), ABISELECT(4048,2964), "S7725C1");
    check_base_class_offset(lv, (S16130C17_nt*)(S7725C2*), 0, "S7725C1");
    check_base_class_offset(lv, (S7725C2*), 0, "S7725C1");
    check_base_class_offset(lv, (S5643C2*)(S7725C7*), ABISELECT(4208,3080), "S7725C1");
    check_base_class_offset(lv, (S5408C7_nt*)(S7725C7*), 0, "S7725C1");
    check_base_class_offset(lv, (S7725C7*), ABISELECT(16,8), "S7725C1");
    /*is_ambiguous_... S7725C1::S5643C2 */ AMB_check_base_class_offset(lv, (S5643C2*), ABISELECT(1152,852), "S7725C1");
    check_field_offset(lv, s7725c1f0, ABISELECT(1264,936), "S7725C1.s7725c1f0");
    test_class_info(&lv, &cd_S7725C1);
    dp->~S7725C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7725C1(Test_S7725C1, "S7725C1", ABISELECT(4320,3164));

#else // __cplusplus

extern void _ZN7S7725C1C1Ev();
extern void _ZN7S7725C1D1Ev();
Name_Map name_map_S7725C1[] = {
  NSPAIR(_ZN7S7725C1C1Ev),
  NSPAIR(_ZN7S7725C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S7725C3;
extern VTBL_ENTRY _ZTI7S7725C3[];
extern  VTBL_ENTRY _ZTV7S7725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7725C3[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
extern Class_Descriptor cd_S7725C2;
extern VTBL_ENTRY _ZTI7S7725C2[];
extern  VTBL_ENTRY _ZTV7S7725C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7725C2[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S7725C7;
extern VTBL_ENTRY _ZTI7S7725C7[];
extern  VTBL_ENTRY _ZTV7S7725C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7725C7[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
static Base_Class bases_S7725C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(4192,3068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(4064,2968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7725C3,    ABISELECT(4048,2964), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //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
    4, //immediately_derived
  0, 1},
  {&cd_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7725C2,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C2,    ABISELECT(4208,3080), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7725C7,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //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},
  {&cd_S5643C2,    ABISELECT(1152,852), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7725C1[];
extern void _ZN7S7725C1D1Ev();
extern void _ZN7S7725C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7725C1D1Ev,_ZTv0_n16_N7S7725C1D1Ev)();
extern void ABISELECT(_ZThn4048_N7S7725C1D1Ev,_ZThn2964_N7S7725C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7725C1D0Ev,_ZTv0_n16_N7S7725C1D0Ev)();
extern void ABISELECT(_ZThn4048_N7S7725C1D0Ev,_ZThn2964_N7S7725C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7725C1[] = {
  0,
  ABISELECT(4208,3080),
  0,
  ABISELECT(4192,3068),
  ABISELECT(4048,2964),
  0,
  (VTBL_ENTRY)&(_ZTI7S7725C1[0]),
  (VTBL_ENTRY)&_ZN7S7725C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7725C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(4192,3072),
  ABISELECT(4176,3060),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7725C1[0]),
  ABISELECT(-4048,-2964),
  ABISELECT(144,104),
  ABISELECT(-4048,-2964),
  (VTBL_ENTRY)&(_ZTI7S7725C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7725C1D1Ev,_ZTv0_n16_N7S7725C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7725C1D0Ev,_ZTv0_n16_N7S7725C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7725C1[];
extern void _ZN7S7725C2D1Ev();
extern void _ZN7S7725C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7725C2__7S7725C1[] = {
  0,
  ABISELECT(4192,3068),
  ABISELECT(4048,2964),
  0,
  (VTBL_ENTRY)&(_ZTI7S7725C2[0]),
  (VTBL_ENTRY)&_ZN7S7725C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7725C2D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7725C2D1Ev,_ZTv0_n16_N7S7725C2D1Ev)();
extern void ABISELECT(_ZThn4048_N7S7725C2D1Ev,_ZThn2964_N7S7725C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7725C2D0Ev,_ZTv0_n16_N7S7725C2D0Ev)();
extern void ABISELECT(_ZThn4048_N7S7725C2D0Ev,_ZThn2964_N7S7725C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7725C3__7S7725C2__7S7725C1[] = {
  ABISELECT(-4048,-2964),
  ABISELECT(144,104),
  ABISELECT(-4048,-2964),
  (VTBL_ENTRY)&(_ZTI7S7725C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7725C2D1Ev,_ZTv0_n16_N7S7725C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7725C2D0Ev,_ZTv0_n16_N7S7725C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7725C7__7S7725C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(4192,3072),
  ABISELECT(4176,3060),
  0,
  (VTBL_ENTRY)&(_ZTI7S7725C7[0]),
};
extern void _ZN7S7725C3D1Ev();
extern void _ZN7S7725C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7725C3__7S7725C1[] = {
  ABISELECT(144,104),
  0,
  (VTBL_ENTRY)&(_ZTI7S7725C3[0]),
  (VTBL_ENTRY)&_ZN7S7725C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7725C3D0Ev,
};
static  VTT_ENTRY vtt_S7725C1[] = {
  {&(_ZTV7S7725C1[7]),  7,20},
  {&(_tg__ZTV7S7725C2__7S7725C1[5]),  5,7},
  {&(_tg__ZTV7S7725C3__7S7725C2__7S7725C1[4]),  4,6},
  {&(_tg__ZTV7S7725C7__7S7725C1[5]),  5,5},
  {&(_ZTV7S7725C1[18]),  18,20},
  {&(_ZTV7S7725C1[14]),  14,20},
  {&(_tg__ZTV7S7725C3__7S7725C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7725C1[];
extern  VTBL_ENTRY _ZTV7S7725C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7725C1[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7725C2D0Ev,_ZTv0_n16_N7S7725C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4048_N7S7725C2D0Ev,_ZThn2964_N7S7725C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7725C2D1Ev,_ZTv0_n16_N7S7725C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4048_N7S7725C2D1Ev,_ZThn2964_N7S7725C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7725C1D0Ev,_ZTv0_n16_N7S7725C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4048_N7S7725C1D0Ev,_ZThn2964_N7S7725C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7725C1D1Ev,_ZTv0_n16_N7S7725C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4048_N7S7725C1D1Ev,_ZThn2964_N7S7725C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7725C1 = {  "S7725C1", // class name
  bases_S7725C1, 9,
  &(vtc_S7725C1[0]), // expected_vtbl_contents
  &(vtt_S7725C1[0]), // expected_vtt_contents
  ABISELECT(4320,3164), // object size
  NSPAIRA(_ZTI7S7725C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7725C1),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7725C1),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1099C3  : S3221C8_nt {
};
//SIG(-1 S1099C3) C1{ BC2{ m Fi}}



static void Test_S1099C3()
{
  extern Class_Descriptor cd_S1099C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1099C3, buf);
    S1099C3 &lv = *(new (buf) S1099C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1099C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1099C3)");
    check_base_class_offset(lv, (S3221C8_nt*), 0, "S1099C3");
    test_class_info(&lv, &cd_S1099C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1099C3(Test_S1099C3, "S1099C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S1099C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1099C3[];
Class_Descriptor cd_S1099C3 = {  "S1099C3", // class name
  bases_S1099C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1099C3),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  S1099C2  : S1099C3 {
  ::S2632C18_nt s1099c2f0;
  ::S1098C5_nt s1099c2f1;
  ::S1098C5_nt s1099c2f2;
  ::S2632C13 s1099c2f3;
  char s1099c2f4;
  ::S1098C10_nt s1099c2f5;
  ::S1093C13 s1099c2f6;
  void *s1099c2f7;
  ::S1093C13 s1099c2f8;
  ::S1093C13 s1099c2f9;
  char s1099c2f10[5];
  virtual  ~S1099C2(); // _ZN7S1099C2D1Ev
  virtual void  v5(); // _ZN7S1099C22v5Ev
  virtual void  v6(); // _ZN7S1099C22v6Ev
  virtual void  v7(); // _ZN7S1099C22v7Ev
  virtual void  v8(); // _ZN7S1099C22v8Ev
  virtual void  v9(); // _ZN7S1099C22v9Ev
  virtual void  v10(); // _ZN7S1099C23v10Ev
  virtual void  v11(); // _ZN7S1099C23v11Ev
  S1099C2(); // tgen
};
//SIG(-1 S1099C2) C1{ BC2{ BC3{ m Fi}} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp} FC5{ m Fp} FC5 FC6{ m Fi FC7{ BC8{ m Fp Fi}}} Fc FC9{ m FC10{ m Fi[2]} FC11{ m Fi[2]}} FC12{ m FC10 FC11} Fp FC12 FC12 Fc[5]}


 S1099C2 ::~S1099C2(){ note_dtor("S1099C2", this);}
void  S1099C2 ::v5(){vfunc_called(this, "_ZN7S1099C22v5Ev");}
void  S1099C2 ::v6(){vfunc_called(this, "_ZN7S1099C22v6Ev");}
void  S1099C2 ::v7(){vfunc_called(this, "_ZN7S1099C22v7Ev");}
void  S1099C2 ::v8(){vfunc_called(this, "_ZN7S1099C22v8Ev");}
void  S1099C2 ::v9(){vfunc_called(this, "_ZN7S1099C22v9Ev");}
void  S1099C2 ::v10(){vfunc_called(this, "_ZN7S1099C23v10Ev");}
void  S1099C2 ::v11(){vfunc_called(this, "_ZN7S1099C23v11Ev");}
S1099C2 ::S1099C2(){ note_ctor("S1099C2", this);} // tgen

static void Test_S1099C2()
{
  extern Class_Descriptor cd_S1099C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S1099C2, buf);
    S1099C2 *dp, &lv = *(dp=new (buf) S1099C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S1099C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1099C2)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1099C3*), ABISELECT(8,4), "S1099C2");
    check_base_class_offset(lv, (S1099C3*), ABISELECT(8,4), "S1099C2");
    check_field_offset(lv, s1099c2f0, ABISELECT(16,8), "S1099C2.s1099c2f0");
    check_field_offset(lv, s1099c2f1, ABISELECT(24,12), "S1099C2.s1099c2f1");
    check_field_offset(lv, s1099c2f2, ABISELECT(32,16), "S1099C2.s1099c2f2");
    check_field_offset(lv, s1099c2f3, ABISELECT(40,20), "S1099C2.s1099c2f3");
    check_field_offset(lv, s1099c2f4, ABISELECT(64,32), "S1099C2.s1099c2f4");
    check_field_offset(lv, s1099c2f5, ABISELECT(68,36), "S1099C2.s1099c2f5");
    check_field_offset(lv, s1099c2f6, ABISELECT(84,52), "S1099C2.s1099c2f6");
    check_field_offset(lv, s1099c2f7, ABISELECT(104,68), "S1099C2.s1099c2f7");
    check_field_offset(lv, s1099c2f8, ABISELECT(112,72), "S1099C2.s1099c2f8");
    check_field_offset(lv, s1099c2f9, ABISELECT(128,88), "S1099C2.s1099c2f9");
    check_field_offset(lv, s1099c2f10, ABISELECT(144,104), "S1099C2.s1099c2f10");
    test_class_info(&lv, &cd_S1099C2);
    dp->~S1099C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1099C2(Test_S1099C2, "S1099C2", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S1099C2C1Ev();
extern void _ZN7S1099C2D1Ev();
Name_Map name_map_S1099C2[] = {
  NSPAIR(_ZN7S1099C2C1Ev),
  NSPAIR(_ZN7S1099C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1099C3;
extern VTBL_ENTRY _ZTI7S1099C3[];
static Base_Class bases_S1099C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1099C3,    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 _ZTI7S1099C2[];
extern void _ZN7S1099C2D1Ev();
extern void _ZN7S1099C2D0Ev();
extern void _ZN7S1099C22v5Ev();
extern void _ZN7S1099C22v6Ev();
extern void _ZN7S1099C22v7Ev();
extern void _ZN7S1099C22v8Ev();
extern void _ZN7S1099C22v9Ev();
extern void _ZN7S1099C23v10Ev();
extern void _ZN7S1099C23v11Ev();
static  VTBL_ENTRY vtc_S1099C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1099C2[0]),
  (VTBL_ENTRY)&_ZN7S1099C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1099C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1099C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1099C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1099C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1099C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1099C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1099C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1099C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S1099C2[];
extern  VTBL_ENTRY _ZTV7S1099C2[];
Class_Descriptor cd_S1099C2 = {  "S1099C2", // class name
  bases_S1099C2, 2,
  &(vtc_S1099C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S1099C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1099C2),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  S1099C1  : S1099C2 {
  ::S392C18_nt s1099c1f0;
  int s1099c1f1;
  virtual void  v1(); // _ZN7S1099C12v1Ev
  virtual void  v2(); // _ZN7S1099C12v2Ev
  virtual void  v3(); // _ZN7S1099C12v3Ev
  virtual void  v4(); // _ZN7S1099C12v4Ev
  ~S1099C1(); // tgen
  S1099C1(); // tgen
};
//SIG(1 S1099C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v5 v6 v7 v8 v9 v10 v11 FC5{ m Fp} FC6{ m Fp} FC6 FC7{ m Fi FC8{ BC9{ m Fp Fi}}} Fc FC10{ m FC11{ m Fi[2]} FC12{ m Fi[2]}} FC13{ m FC11 FC12} Fp FC13 FC13 Fc[5]} v1 v2 v3 v4 FC14{ m Fi Fc} Fi}


void  S1099C1 ::v1(){vfunc_called(this, "_ZN7S1099C12v1Ev");}
void  S1099C1 ::v2(){vfunc_called(this, "_ZN7S1099C12v2Ev");}
void  S1099C1 ::v3(){vfunc_called(this, "_ZN7S1099C12v3Ev");}
void  S1099C1 ::v4(){vfunc_called(this, "_ZN7S1099C12v4Ev");}
S1099C1 ::~S1099C1(){ note_dtor("S1099C1", this);} // tgen
S1099C1 ::S1099C1(){ note_ctor("S1099C1", this);} // tgen

static void Test_S1099C1()
{
  extern Class_Descriptor cd_S1099C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,32)];
    init_test(&cd_S1099C1, buf);
    S1099C1 *dp, &lv = *(dp=new (buf) S1099C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,124), "sizeof(S1099C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1099C1)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1099C3*)(S1099C2*), ABISELECT(8,4), "S1099C1");
    check_base_class_offset(lv, (S1099C3*)(S1099C2*), ABISELECT(8,4), "S1099C1");
    check_base_class_offset(lv, (S1099C2*), 0, "S1099C1");
    check_field_offset(lv, s1099c1f0, ABISELECT(152,112), "S1099C1.s1099c1f0");
    check_field_offset(lv, s1099c1f1, ABISELECT(160,120), "S1099C1.s1099c1f1");
    test_class_info(&lv, &cd_S1099C1);
    dp->~S1099C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1099C1(Test_S1099C1, "S1099C1", ABISELECT(168,124));

#else // __cplusplus

extern void _ZN7S1099C1C1Ev();
extern void _ZN7S1099C1D1Ev();
Name_Map name_map_S1099C1[] = {
  NSPAIR(_ZN7S1099C1C1Ev),
  NSPAIR(_ZN7S1099C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1099C3;
extern VTBL_ENTRY _ZTI7S1099C3[];
extern Class_Descriptor cd_S1099C2;
extern VTBL_ENTRY _ZTI7S1099C2[];
extern  VTBL_ENTRY _ZTV7S1099C2[];
static Base_Class bases_S1099C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1099C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1099C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1099C1[];
extern void _ZN7S1099C1D1Ev();
extern void _ZN7S1099C1D0Ev();
extern void _ZN7S1099C22v5Ev();
extern void _ZN7S1099C22v6Ev();
extern void _ZN7S1099C22v7Ev();
extern void _ZN7S1099C22v8Ev();
extern void _ZN7S1099C22v9Ev();
extern void _ZN7S1099C23v10Ev();
extern void _ZN7S1099C23v11Ev();
extern void _ZN7S1099C12v1Ev();
extern void _ZN7S1099C12v2Ev();
extern void _ZN7S1099C12v3Ev();
extern void _ZN7S1099C12v4Ev();
static  VTBL_ENTRY vtc_S1099C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1099C1[0]),
  (VTBL_ENTRY)&_ZN7S1099C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1099C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1099C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1099C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1099C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1099C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1099C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1099C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1099C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1099C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1099C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1099C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1099C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1099C1[];
extern  VTBL_ENTRY _ZTV7S1099C1[];
Class_Descriptor cd_S1099C1 = {  "S1099C1", // class name
  bases_S1099C1, 3,
  &(vtc_S1099C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,124), // object size
  NSPAIRA(_ZTI7S1099C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1099C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1114C3  : S3221C8_nt {
};
//SIG(-1 S1114C3) C1{ BC2{ m Fi}}



static void Test_S1114C3()
{
  extern Class_Descriptor cd_S1114C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1114C3, buf);
    S1114C3 &lv = *(new (buf) S1114C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1114C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1114C3)");
    check_base_class_offset(lv, (S3221C8_nt*), 0, "S1114C3");
    test_class_info(&lv, &cd_S1114C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1114C3(Test_S1114C3, "S1114C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S1114C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1114C3[];
Class_Descriptor cd_S1114C3 = {  "S1114C3", // class name
  bases_S1114C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1114C3),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  S1114C2  : S1114C3 {
  ::S2632C18_nt s1114c2f0;
  ::S1098C5_nt s1114c2f1;
  ::S1098C5_nt s1114c2f2;
  ::S2632C13 s1114c2f3;
  char s1114c2f4;
  ::S1098C10_nt s1114c2f5;
  ::S1093C13 s1114c2f6;
  void *s1114c2f7;
  ::S1093C13 s1114c2f8;
  ::S1093C13 s1114c2f9;
  char s1114c2f10[5];
  virtual  ~S1114C2(); // _ZN7S1114C2D1Ev
  virtual void  v7(); // _ZN7S1114C22v7Ev
  virtual void  v8(); // _ZN7S1114C22v8Ev
  virtual void  v9(); // _ZN7S1114C22v9Ev
  virtual void  v10(); // _ZN7S1114C23v10Ev
  virtual void  v11(); // _ZN7S1114C23v11Ev
  virtual void  v12(); // _ZN7S1114C23v12Ev
  virtual void  v13(); // _ZN7S1114C23v13Ev
  S1114C2(); // tgen
};
//SIG(-1 S1114C2) C1{ BC2{ BC3{ m Fi}} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp} FC5{ m Fp} FC5 FC6{ m Fi FC7{ BC8{ m Fp Fi}}} Fc FC9{ m FC10{ m Fi[2]} FC11{ m Fi[2]}} FC12{ m FC10 FC11} Fp FC12 FC12 Fc[5]}


 S1114C2 ::~S1114C2(){ note_dtor("S1114C2", this);}
void  S1114C2 ::v7(){vfunc_called(this, "_ZN7S1114C22v7Ev");}
void  S1114C2 ::v8(){vfunc_called(this, "_ZN7S1114C22v8Ev");}
void  S1114C2 ::v9(){vfunc_called(this, "_ZN7S1114C22v9Ev");}
void  S1114C2 ::v10(){vfunc_called(this, "_ZN7S1114C23v10Ev");}
void  S1114C2 ::v11(){vfunc_called(this, "_ZN7S1114C23v11Ev");}
void  S1114C2 ::v12(){vfunc_called(this, "_ZN7S1114C23v12Ev");}
void  S1114C2 ::v13(){vfunc_called(this, "_ZN7S1114C23v13Ev");}
S1114C2 ::S1114C2(){ note_ctor("S1114C2", this);} // tgen

static void Test_S1114C2()
{
  extern Class_Descriptor cd_S1114C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S1114C2, buf);
    S1114C2 *dp, &lv = *(dp=new (buf) S1114C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S1114C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1114C2)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1114C3*), ABISELECT(8,4), "S1114C2");
    check_base_class_offset(lv, (S1114C3*), ABISELECT(8,4), "S1114C2");
    check_field_offset(lv, s1114c2f0, ABISELECT(16,8), "S1114C2.s1114c2f0");
    check_field_offset(lv, s1114c2f1, ABISELECT(24,12), "S1114C2.s1114c2f1");
    check_field_offset(lv, s1114c2f2, ABISELECT(32,16), "S1114C2.s1114c2f2");
    check_field_offset(lv, s1114c2f3, ABISELECT(40,20), "S1114C2.s1114c2f3");
    check_field_offset(lv, s1114c2f4, ABISELECT(64,32), "S1114C2.s1114c2f4");
    check_field_offset(lv, s1114c2f5, ABISELECT(68,36), "S1114C2.s1114c2f5");
    check_field_offset(lv, s1114c2f6, ABISELECT(84,52), "S1114C2.s1114c2f6");
    check_field_offset(lv, s1114c2f7, ABISELECT(104,68), "S1114C2.s1114c2f7");
    check_field_offset(lv, s1114c2f8, ABISELECT(112,72), "S1114C2.s1114c2f8");
    check_field_offset(lv, s1114c2f9, ABISELECT(128,88), "S1114C2.s1114c2f9");
    check_field_offset(lv, s1114c2f10, ABISELECT(144,104), "S1114C2.s1114c2f10");
    test_class_info(&lv, &cd_S1114C2);
    dp->~S1114C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1114C2(Test_S1114C2, "S1114C2", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S1114C2C1Ev();
extern void _ZN7S1114C2D1Ev();
Name_Map name_map_S1114C2[] = {
  NSPAIR(_ZN7S1114C2C1Ev),
  NSPAIR(_ZN7S1114C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1114C3;
extern VTBL_ENTRY _ZTI7S1114C3[];
static Base_Class bases_S1114C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1114C3,    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 _ZTI7S1114C2[];
extern void _ZN7S1114C2D1Ev();
extern void _ZN7S1114C2D0Ev();
extern void _ZN7S1114C22v7Ev();
extern void _ZN7S1114C22v8Ev();
extern void _ZN7S1114C22v9Ev();
extern void _ZN7S1114C23v10Ev();
extern void _ZN7S1114C23v11Ev();
extern void _ZN7S1114C23v12Ev();
extern void _ZN7S1114C23v13Ev();
static  VTBL_ENTRY vtc_S1114C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1114C2[0]),
  (VTBL_ENTRY)&_ZN7S1114C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1114C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1114C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1114C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1114C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1114C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1114C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1114C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1114C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S1114C2[];
extern  VTBL_ENTRY _ZTV7S1114C2[];
Class_Descriptor cd_S1114C2 = {  "S1114C2", // class name
  bases_S1114C2, 2,
  &(vtc_S1114C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S1114C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1114C2),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  S1114C1  : S1114C2 {
  int s1114c1f0[5];
  virtual void  v1(); // _ZN7S1114C12v1Ev
  virtual void  v2(); // _ZN7S1114C12v2Ev
  virtual void  v3(); // _ZN7S1114C12v3Ev
  virtual void  v4(); // _ZN7S1114C12v4Ev
  virtual void  v5(); // _ZN7S1114C12v5Ev
  virtual void  v6(); // _ZN7S1114C12v6Ev
  ~S1114C1(); // tgen
  S1114C1(); // tgen
};
//SIG(1 S1114C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v7 v8 v9 v10 v11 v12 v13 FC5{ m Fp} FC6{ m Fp} FC6 FC7{ m Fi FC8{ BC9{ m Fp Fi}}} Fc FC10{ m FC11{ m Fi[2]} FC12{ m Fi[2]}} FC13{ m FC11 FC12} Fp FC13 FC13 Fc[5]} v1 v2 v3 v4 v5 v6 Fi[5]}


void  S1114C1 ::v1(){vfunc_called(this, "_ZN7S1114C12v1Ev");}
void  S1114C1 ::v2(){vfunc_called(this, "_ZN7S1114C12v2Ev");}
void  S1114C1 ::v3(){vfunc_called(this, "_ZN7S1114C12v3Ev");}
void  S1114C1 ::v4(){vfunc_called(this, "_ZN7S1114C12v4Ev");}
void  S1114C1 ::v5(){vfunc_called(this, "_ZN7S1114C12v5Ev");}
void  S1114C1 ::v6(){vfunc_called(this, "_ZN7S1114C12v6Ev");}
S1114C1 ::~S1114C1(){ note_dtor("S1114C1", this);} // tgen
S1114C1 ::S1114C1(){ note_ctor("S1114C1", this);} // tgen

static void Test_S1114C1()
{
  extern Class_Descriptor cd_S1114C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,34)];
    init_test(&cd_S1114C1, buf);
    S1114C1 *dp, &lv = *(dp=new (buf) S1114C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,132), "sizeof(S1114C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1114C1)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1114C3*)(S1114C2*), ABISELECT(8,4), "S1114C1");
    check_base_class_offset(lv, (S1114C3*)(S1114C2*), ABISELECT(8,4), "S1114C1");
    check_base_class_offset(lv, (S1114C2*), 0, "S1114C1");
    check_field_offset(lv, s1114c1f0, ABISELECT(152,112), "S1114C1.s1114c1f0");
    test_class_info(&lv, &cd_S1114C1);
    dp->~S1114C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1114C1(Test_S1114C1, "S1114C1", ABISELECT(176,132));

#else // __cplusplus

extern void _ZN7S1114C1C1Ev();
extern void _ZN7S1114C1D1Ev();
Name_Map name_map_S1114C1[] = {
  NSPAIR(_ZN7S1114C1C1Ev),
  NSPAIR(_ZN7S1114C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1114C3;
extern VTBL_ENTRY _ZTI7S1114C3[];
extern Class_Descriptor cd_S1114C2;
extern VTBL_ENTRY _ZTI7S1114C2[];
extern  VTBL_ENTRY _ZTV7S1114C2[];
static Base_Class bases_S1114C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1114C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1114C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1114C1[];
extern void _ZN7S1114C1D1Ev();
extern void _ZN7S1114C1D0Ev();
extern void _ZN7S1114C22v7Ev();
extern void _ZN7S1114C22v8Ev();
extern void _ZN7S1114C22v9Ev();
extern void _ZN7S1114C23v10Ev();
extern void _ZN7S1114C23v11Ev();
extern void _ZN7S1114C23v12Ev();
extern void _ZN7S1114C23v13Ev();
extern void _ZN7S1114C12v1Ev();
extern void _ZN7S1114C12v2Ev();
extern void _ZN7S1114C12v3Ev();
extern void _ZN7S1114C12v4Ev();
extern void _ZN7S1114C12v5Ev();
extern void _ZN7S1114C12v6Ev();
static  VTBL_ENTRY vtc_S1114C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1114C1[0]),
  (VTBL_ENTRY)&_ZN7S1114C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1114C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1114C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1114C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1114C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1114C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1114C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1114C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1114C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1114C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1114C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1114C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1114C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1114C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1114C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S1114C1[];
extern  VTBL_ENTRY _ZTV7S1114C1[];
Class_Descriptor cd_S1114C1 = {  "S1114C1", // class name
  bases_S1114C1, 3,
  &(vtc_S1114C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,132), // object size
  NSPAIRA(_ZTI7S1114C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1114C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1103C3  : S3221C8_nt {
};
//SIG(-1 S1103C3) C1{ BC2{ m Fi}}



static void Test_S1103C3()
{
  extern Class_Descriptor cd_S1103C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1103C3, buf);
    S1103C3 &lv = *(new (buf) S1103C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1103C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1103C3)");
    check_base_class_offset(lv, (S3221C8_nt*), 0, "S1103C3");
    test_class_info(&lv, &cd_S1103C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1103C3(Test_S1103C3, "S1103C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S1103C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1103C3[];
Class_Descriptor cd_S1103C3 = {  "S1103C3", // class name
  bases_S1103C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1103C3),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  S1103C2  : S1103C3 {
  ::S2632C18_nt s1103c2f0;
  ::S1098C5_nt s1103c2f1;
  ::S1098C5_nt s1103c2f2;
  ::S2632C13 s1103c2f3;
  char s1103c2f4;
  ::S1098C10_nt s1103c2f5;
  ::S1093C13 s1103c2f6;
  void *s1103c2f7;
  ::S1093C13 s1103c2f8;
  ::S1093C13 s1103c2f9;
  char s1103c2f10[5];
  virtual  ~S1103C2(); // _ZN7S1103C2D1Ev
  virtual void  v5(); // _ZN7S1103C22v5Ev
  virtual void  v6(); // _ZN7S1103C22v6Ev
  virtual void  v7(); // _ZN7S1103C22v7Ev
  virtual void  v8(); // _ZN7S1103C22v8Ev
  virtual void  v9(); // _ZN7S1103C22v9Ev
  virtual void  v10(); // _ZN7S1103C23v10Ev
  virtual void  v11(); // _ZN7S1103C23v11Ev
  S1103C2(); // tgen
};
//SIG(-1 S1103C2) C1{ BC2{ BC3{ m Fi}} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp} FC5{ m Fp} FC5 FC6{ m Fi FC7{ BC8{ m Fp Fi}}} Fc FC9{ m FC10{ m Fi[2]} FC11{ m Fi[2]}} FC12{ m FC10 FC11} Fp FC12 FC12 Fc[5]}


 S1103C2 ::~S1103C2(){ note_dtor("S1103C2", this);}
void  S1103C2 ::v5(){vfunc_called(this, "_ZN7S1103C22v5Ev");}
void  S1103C2 ::v6(){vfunc_called(this, "_ZN7S1103C22v6Ev");}
void  S1103C2 ::v7(){vfunc_called(this, "_ZN7S1103C22v7Ev");}
void  S1103C2 ::v8(){vfunc_called(this, "_ZN7S1103C22v8Ev");}
void  S1103C2 ::v9(){vfunc_called(this, "_ZN7S1103C22v9Ev");}
void  S1103C2 ::v10(){vfunc_called(this, "_ZN7S1103C23v10Ev");}
void  S1103C2 ::v11(){vfunc_called(this, "_ZN7S1103C23v11Ev");}
S1103C2 ::S1103C2(){ note_ctor("S1103C2", this);} // tgen

static void Test_S1103C2()
{
  extern Class_Descriptor cd_S1103C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S1103C2, buf);
    S1103C2 *dp, &lv = *(dp=new (buf) S1103C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S1103C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1103C2)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1103C3*), ABISELECT(8,4), "S1103C2");
    check_base_class_offset(lv, (S1103C3*), ABISELECT(8,4), "S1103C2");
    check_field_offset(lv, s1103c2f0, ABISELECT(16,8), "S1103C2.s1103c2f0");
    check_field_offset(lv, s1103c2f1, ABISELECT(24,12), "S1103C2.s1103c2f1");
    check_field_offset(lv, s1103c2f2, ABISELECT(32,16), "S1103C2.s1103c2f2");
    check_field_offset(lv, s1103c2f3, ABISELECT(40,20), "S1103C2.s1103c2f3");
    check_field_offset(lv, s1103c2f4, ABISELECT(64,32), "S1103C2.s1103c2f4");
    check_field_offset(lv, s1103c2f5, ABISELECT(68,36), "S1103C2.s1103c2f5");
    check_field_offset(lv, s1103c2f6, ABISELECT(84,52), "S1103C2.s1103c2f6");
    check_field_offset(lv, s1103c2f7, ABISELECT(104,68), "S1103C2.s1103c2f7");
    check_field_offset(lv, s1103c2f8, ABISELECT(112,72), "S1103C2.s1103c2f8");
    check_field_offset(lv, s1103c2f9, ABISELECT(128,88), "S1103C2.s1103c2f9");
    check_field_offset(lv, s1103c2f10, ABISELECT(144,104), "S1103C2.s1103c2f10");
    test_class_info(&lv, &cd_S1103C2);
    dp->~S1103C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1103C2(Test_S1103C2, "S1103C2", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S1103C2C1Ev();
extern void _ZN7S1103C2D1Ev();
Name_Map name_map_S1103C2[] = {
  NSPAIR(_ZN7S1103C2C1Ev),
  NSPAIR(_ZN7S1103C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1103C3;
extern VTBL_ENTRY _ZTI7S1103C3[];
static Base_Class bases_S1103C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1103C3,    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 _ZTI7S1103C2[];
extern void _ZN7S1103C2D1Ev();
extern void _ZN7S1103C2D0Ev();
extern void _ZN7S1103C22v5Ev();
extern void _ZN7S1103C22v6Ev();
extern void _ZN7S1103C22v7Ev();
extern void _ZN7S1103C22v8Ev();
extern void _ZN7S1103C22v9Ev();
extern void _ZN7S1103C23v10Ev();
extern void _ZN7S1103C23v11Ev();
static  VTBL_ENTRY vtc_S1103C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1103C2[0]),
  (VTBL_ENTRY)&_ZN7S1103C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1103C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1103C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1103C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1103C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1103C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1103C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1103C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1103C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S1103C2[];
extern  VTBL_ENTRY _ZTV7S1103C2[];
Class_Descriptor cd_S1103C2 = {  "S1103C2", // class name
  bases_S1103C2, 2,
  &(vtc_S1103C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S1103C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1103C2),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  S1103C1  : S1103C2 {
  int s1103c1f0[5];
  char s1103c1f1;
  virtual void  v1(); // _ZN7S1103C12v1Ev
  virtual void  v2(); // _ZN7S1103C12v2Ev
  virtual void  v3(); // _ZN7S1103C12v3Ev
  virtual void  v4(); // _ZN7S1103C12v4Ev
  ~S1103C1(); // tgen
  S1103C1(); // tgen
};
//SIG(1 S1103C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v5 v6 v7 v8 v9 v10 v11 FC5{ m Fp} FC6{ m Fp} FC6 FC7{ m Fi FC8{ BC9{ m Fp Fi}}} Fc FC10{ m FC11{ m Fi[2]} FC12{ m Fi[2]}} FC13{ m FC11 FC12} Fp FC13 FC13 Fc[5]} v1 v2 v3 v4 Fi[5] Fc}


void  S1103C1 ::v1(){vfunc_called(this, "_ZN7S1103C12v1Ev");}
void  S1103C1 ::v2(){vfunc_called(this, "_ZN7S1103C12v2Ev");}
void  S1103C1 ::v3(){vfunc_called(this, "_ZN7S1103C12v3Ev");}
void  S1103C1 ::v4(){vfunc_called(this, "_ZN7S1103C12v4Ev");}
S1103C1 ::~S1103C1(){ note_dtor("S1103C1", this);} // tgen
S1103C1 ::S1103C1(){ note_ctor("S1103C1", this);} // tgen

static void Test_S1103C1()
{
  extern Class_Descriptor cd_S1103C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,35)];
    init_test(&cd_S1103C1, buf);
    S1103C1 *dp, &lv = *(dp=new (buf) S1103C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,136), "sizeof(S1103C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1103C1)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1103C3*)(S1103C2*), ABISELECT(8,4), "S1103C1");
    check_base_class_offset(lv, (S1103C3*)(S1103C2*), ABISELECT(8,4), "S1103C1");
    check_base_class_offset(lv, (S1103C2*), 0, "S1103C1");
    check_field_offset(lv, s1103c1f0, ABISELECT(152,112), "S1103C1.s1103c1f0");
    check_field_offset(lv, s1103c1f1, ABISELECT(172,132), "S1103C1.s1103c1f1");
    test_class_info(&lv, &cd_S1103C1);
    dp->~S1103C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1103C1(Test_S1103C1, "S1103C1", ABISELECT(176,136));

#else // __cplusplus

extern void _ZN7S1103C1C1Ev();
extern void _ZN7S1103C1D1Ev();
Name_Map name_map_S1103C1[] = {
  NSPAIR(_ZN7S1103C1C1Ev),
  NSPAIR(_ZN7S1103C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1103C3;
extern VTBL_ENTRY _ZTI7S1103C3[];
extern Class_Descriptor cd_S1103C2;
extern VTBL_ENTRY _ZTI7S1103C2[];
extern  VTBL_ENTRY _ZTV7S1103C2[];
static Base_Class bases_S1103C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1103C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1103C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1103C1[];
extern void _ZN7S1103C1D1Ev();
extern void _ZN7S1103C1D0Ev();
extern void _ZN7S1103C22v5Ev();
extern void _ZN7S1103C22v6Ev();
extern void _ZN7S1103C22v7Ev();
extern void _ZN7S1103C22v8Ev();
extern void _ZN7S1103C22v9Ev();
extern void _ZN7S1103C23v10Ev();
extern void _ZN7S1103C23v11Ev();
extern void _ZN7S1103C12v1Ev();
extern void _ZN7S1103C12v2Ev();
extern void _ZN7S1103C12v3Ev();
extern void _ZN7S1103C12v4Ev();
static  VTBL_ENTRY vtc_S1103C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1103C1[0]),
  (VTBL_ENTRY)&_ZN7S1103C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1103C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1103C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1103C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1103C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1103C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1103C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1103C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1103C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1103C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1103C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1103C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1103C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1103C1[];
extern  VTBL_ENTRY _ZTV7S1103C1[];
Class_Descriptor cd_S1103C1 = {  "S1103C1", // class name
  bases_S1103C1, 3,
  &(vtc_S1103C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,136), // object size
  NSPAIRA(_ZTI7S1103C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1103C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8583C2  {
  void *s8583c2f0;
  ::S857C9_nt s8583c2f1;
  ::S857C13_nt s8583c2f2;
  int s8583c2f3;
  ::S16130C9_nt s8583c2f4;
  virtual  ~S8583C2(); // _ZN7S8583C2D1Ev
  virtual void  v13(); // _ZN7S8583C23v13Ev
  virtual void  v14(); // _ZN7S8583C23v14Ev
  virtual void  v15(); // _ZN7S8583C23v15Ev
  virtual void  v16(); // _ZN7S8583C23v16Ev
  virtual void  v17(); // _ZN7S8583C23v17Ev
  virtual void  v18(); // _ZN7S8583C23v18Ev
  virtual void  v19(); // _ZN7S8583C23v19Ev
  virtual void  v20(); // _ZN7S8583C23v20Ev
  virtual void  v21(); // _ZN7S8583C23v21Ev
  virtual void  v22(); // _ZN7S8583C23v22Ev
  virtual void  v23(); // _ZN7S8583C23v23Ev
  virtual void  v24(); // _ZN7S8583C23v24Ev
  virtual void  v25(); // _ZN7S8583C23v25Ev
  virtual void  v26(); // _ZN7S8583C23v26Ev
  S8583C2(); // tgen
};
//SIG(-1 S8583C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp FC2{ m FC3{ FL[4]}} FC4{ m Fp FC2 FC5{ m Fp FC6{ Fi[4]}} Fi Fc} Fi FC7{ m Fp Fi FC8{ m}}}


 S8583C2 ::~S8583C2(){ note_dtor("S8583C2", this);}
void  S8583C2 ::v13(){vfunc_called(this, "_ZN7S8583C23v13Ev");}
void  S8583C2 ::v14(){vfunc_called(this, "_ZN7S8583C23v14Ev");}
void  S8583C2 ::v15(){vfunc_called(this, "_ZN7S8583C23v15Ev");}
void  S8583C2 ::v16(){vfunc_called(this, "_ZN7S8583C23v16Ev");}
void  S8583C2 ::v17(){vfunc_called(this, "_ZN7S8583C23v17Ev");}
void  S8583C2 ::v18(){vfunc_called(this, "_ZN7S8583C23v18Ev");}
void  S8583C2 ::v19(){vfunc_called(this, "_ZN7S8583C23v19Ev");}
void  S8583C2 ::v20(){vfunc_called(this, "_ZN7S8583C23v20Ev");}
void  S8583C2 ::v21(){vfunc_called(this, "_ZN7S8583C23v21Ev");}
void  S8583C2 ::v22(){vfunc_called(this, "_ZN7S8583C23v22Ev");}
void  S8583C2 ::v23(){vfunc_called(this, "_ZN7S8583C23v23Ev");}
void  S8583C2 ::v24(){vfunc_called(this, "_ZN7S8583C23v24Ev");}
void  S8583C2 ::v25(){vfunc_called(this, "_ZN7S8583C23v25Ev");}
void  S8583C2 ::v26(){vfunc_called(this, "_ZN7S8583C23v26Ev");}
S8583C2 ::S8583C2(){ note_ctor("S8583C2", this);} // tgen

static void Test_S8583C2()
{
  extern Class_Descriptor cd_S8583C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,31)];
    init_test(&cd_S8583C2, buf);
    S8583C2 *dp, &lv = *(dp=new (buf) S8583C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,120), "sizeof(S8583C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8583C2)");
    check_field_offset(lv, s8583c2f0, ABISELECT(8,4), "S8583C2.s8583c2f0");
    check_field_offset(lv, s8583c2f1, ABISELECT(16,8), "S8583C2.s8583c2f1");
    check_field_offset(lv, s8583c2f2, ABISELECT(48,40), "S8583C2.s8583c2f2");
    check_field_offset(lv, s8583c2f3, ABISELECT(120,104), "S8583C2.s8583c2f3");
    check_field_offset(lv, s8583c2f4, ABISELECT(128,108), "S8583C2.s8583c2f4");
    test_class_info(&lv, &cd_S8583C2);
    dp->~S8583C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8583C2(Test_S8583C2, "S8583C2", ABISELECT(144,120));

#else // __cplusplus

extern void _ZN7S8583C2C1Ev();
extern void _ZN7S8583C2D1Ev();
Name_Map name_map_S8583C2[] = {
  NSPAIR(_ZN7S8583C2C1Ev),
  NSPAIR(_ZN7S8583C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8583C2[];
extern void _ZN7S8583C2D1Ev();
extern void _ZN7S8583C2D0Ev();
extern void _ZN7S8583C23v13Ev();
extern void _ZN7S8583C23v14Ev();
extern void _ZN7S8583C23v15Ev();
extern void _ZN7S8583C23v16Ev();
extern void _ZN7S8583C23v17Ev();
extern void _ZN7S8583C23v18Ev();
extern void _ZN7S8583C23v19Ev();
extern void _ZN7S8583C23v20Ev();
extern void _ZN7S8583C23v21Ev();
extern void _ZN7S8583C23v22Ev();
extern void _ZN7S8583C23v23Ev();
extern void _ZN7S8583C23v24Ev();
extern void _ZN7S8583C23v25Ev();
extern void _ZN7S8583C23v26Ev();
static  VTBL_ENTRY vtc_S8583C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8583C2[0]),
  (VTBL_ENTRY)&_ZN7S8583C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8583C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S8583C2[];
extern  VTBL_ENTRY _ZTV7S8583C2[];
Class_Descriptor cd_S8583C2 = {  "S8583C2", // class name
  0,0,//no base classes
  &(vtc_S8583C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,120), // object size
  NSPAIRA(_ZTI7S8583C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8583C2),18, //virtual function table var
  2, // 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  S8583C10  {
  virtual  ~S8583C10(); // _ZN8S8583C10D1Ev
  virtual void  v27(); // _ZN8S8583C103v27Ev
  S8583C10(); // tgen
};
//SIG(-1 S8583C10) C1{ vd v1}


 S8583C10 ::~S8583C10(){ note_dtor("S8583C10", this);}
void  S8583C10 ::v27(){vfunc_called(this, "_ZN8S8583C103v27Ev");}
S8583C10 ::S8583C10(){ note_ctor("S8583C10", this);} // tgen

static void Test_S8583C10()
{
  extern Class_Descriptor cd_S8583C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8583C10, buf);
    S8583C10 *dp, &lv = *(dp=new (buf) S8583C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8583C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8583C10)");
    test_class_info(&lv, &cd_S8583C10);
    dp->~S8583C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8583C10(Test_S8583C10, "S8583C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S8583C10C1Ev();
extern void _ZN8S8583C10D1Ev();
Name_Map name_map_S8583C10[] = {
  NSPAIR(_ZN8S8583C10C1Ev),
  NSPAIR(_ZN8S8583C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S8583C10[];
extern void _ZN8S8583C10D1Ev();
extern void _ZN8S8583C10D0Ev();
extern void _ZN8S8583C103v27Ev();
static  VTBL_ENTRY vtc_S8583C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S8583C10[0]),
  (VTBL_ENTRY)&_ZN8S8583C10D1Ev,
  (VTBL_ENTRY)&_ZN8S8583C10D0Ev,
  (VTBL_ENTRY)&_ZN8S8583C103v27Ev,
};
extern VTBL_ENTRY _ZTI8S8583C10[];
extern  VTBL_ENTRY _ZTV8S8583C10[];
Class_Descriptor cd_S8583C10 = {  "S8583C10", // class name
  0,0,//no base classes
  &(vtc_S8583C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S8583C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S8583C10),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  S8583C1  : S8583C2 , S8583C10 {
  void *s8583c1f0;
  virtual  ~S8583C1(); // _ZN7S8583C1D1Ev
  virtual void  v1(); // _ZN7S8583C12v1Ev
  virtual void  v2(); // _ZN7S8583C12v2Ev
  virtual void  v3(); // _ZN7S8583C12v3Ev
  virtual void  v4(); // _ZN7S8583C12v4Ev
  virtual void  v5(); // _ZN7S8583C12v5Ev
  virtual void  v6(); // _ZN7S8583C12v6Ev
  virtual void  v7(); // _ZN7S8583C12v7Ev
  virtual void  v8(); // _ZN7S8583C12v8Ev
  virtual void  v9(); // _ZN7S8583C12v9Ev
  virtual void  v10(); // _ZN7S8583C13v10Ev
  virtual void  v11(); // _ZN7S8583C13v11Ev
  virtual void  v12(); // _ZN7S8583C13v12Ev
  S8583C1(); // tgen
};
//SIG(1 S8583C1) C1{ BC2{ vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp FC3{ m FC4{ FL[4]}} FC5{ m Fp FC3 FC6{ m Fp FC7{ Fi[4]}} Fi Fc} Fi FC8{ m Fp Fi FC9{ m}}} BC10{ vd v27} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp}


 S8583C1 ::~S8583C1(){ note_dtor("S8583C1", this);}
void  S8583C1 ::v1(){vfunc_called(this, "_ZN7S8583C12v1Ev");}
void  S8583C1 ::v2(){vfunc_called(this, "_ZN7S8583C12v2Ev");}
void  S8583C1 ::v3(){vfunc_called(this, "_ZN7S8583C12v3Ev");}
void  S8583C1 ::v4(){vfunc_called(this, "_ZN7S8583C12v4Ev");}
void  S8583C1 ::v5(){vfunc_called(this, "_ZN7S8583C12v5Ev");}
void  S8583C1 ::v6(){vfunc_called(this, "_ZN7S8583C12v6Ev");}
void  S8583C1 ::v7(){vfunc_called(this, "_ZN7S8583C12v7Ev");}
void  S8583C1 ::v8(){vfunc_called(this, "_ZN7S8583C12v8Ev");}
void  S8583C1 ::v9(){vfunc_called(this, "_ZN7S8583C12v9Ev");}
void  S8583C1 ::v10(){vfunc_called(this, "_ZN7S8583C13v10Ev");}
void  S8583C1 ::v11(){vfunc_called(this, "_ZN7S8583C13v11Ev");}
void  S8583C1 ::v12(){vfunc_called(this, "_ZN7S8583C13v12Ev");}
S8583C1 ::S8583C1(){ note_ctor("S8583C1", this);} // tgen

static void Test_S8583C1()
{
  extern Class_Descriptor cd_S8583C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,33)];
    init_test(&cd_S8583C1, buf);
    S8583C1 *dp, &lv = *(dp=new (buf) S8583C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,128), "sizeof(S8583C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8583C1)");
    check_base_class_offset(lv, (S8583C2*), 0, "S8583C1");
    check_base_class_offset(lv, (S8583C10*), ABISELECT(144,120), "S8583C1");
    check_field_offset(lv, s8583c1f0, ABISELECT(152,124), "S8583C1.s8583c1f0");
    test_class_info(&lv, &cd_S8583C1);
    dp->~S8583C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8583C1(Test_S8583C1, "S8583C1", ABISELECT(160,128));

#else // __cplusplus

extern void _ZN7S8583C1C1Ev();
extern void _ZN7S8583C1D1Ev();
Name_Map name_map_S8583C1[] = {
  NSPAIR(_ZN7S8583C1C1Ev),
  NSPAIR(_ZN7S8583C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8583C2;
extern VTBL_ENTRY _ZTI7S8583C2[];
extern  VTBL_ENTRY _ZTV7S8583C2[];
extern Class_Descriptor cd_S8583C10;
extern VTBL_ENTRY _ZTI8S8583C10[];
extern  VTBL_ENTRY _ZTV8S8583C10[];
static Base_Class bases_S8583C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8583C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S8583C10,    ABISELECT(144,120), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8583C1[];
extern void _ZN7S8583C1D1Ev();
extern void _ZN7S8583C1D0Ev();
extern void _ZN7S8583C23v13Ev();
extern void _ZN7S8583C23v14Ev();
extern void _ZN7S8583C23v15Ev();
extern void _ZN7S8583C23v16Ev();
extern void _ZN7S8583C23v17Ev();
extern void _ZN7S8583C23v18Ev();
extern void _ZN7S8583C23v19Ev();
extern void _ZN7S8583C23v20Ev();
extern void _ZN7S8583C23v21Ev();
extern void _ZN7S8583C23v22Ev();
extern void _ZN7S8583C23v23Ev();
extern void _ZN7S8583C23v24Ev();
extern void _ZN7S8583C23v25Ev();
extern void _ZN7S8583C23v26Ev();
extern void _ZN7S8583C12v1Ev();
extern void _ZN7S8583C12v2Ev();
extern void _ZN7S8583C12v3Ev();
extern void _ZN7S8583C12v4Ev();
extern void _ZN7S8583C12v5Ev();
extern void _ZN7S8583C12v6Ev();
extern void _ZN7S8583C12v7Ev();
extern void _ZN7S8583C12v8Ev();
extern void _ZN7S8583C12v9Ev();
extern void _ZN7S8583C13v10Ev();
extern void _ZN7S8583C13v11Ev();
extern void _ZN7S8583C13v12Ev();
extern void ABISELECT(_ZThn144_N7S8583C1D1Ev,_ZThn120_N7S8583C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S8583C1D0Ev,_ZThn120_N7S8583C1D0Ev)();
extern void _ZN8S8583C103v27Ev();
static  VTBL_ENTRY vtc_S8583C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8583C1[0]),
  (VTBL_ENTRY)&_ZN7S8583C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8583C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8583C23v26Ev,
  (VTBL_ENTRY)&_ZN7S8583C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8583C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8583C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8583C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8583C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8583C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8583C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8583C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8583C12v9Ev,
  (VTBL_ENTRY)&_ZN7S8583C13v10Ev,
  (VTBL_ENTRY)&_ZN7S8583C13v11Ev,
  (VTBL_ENTRY)&_ZN7S8583C13v12Ev,
  ABISELECT(-144,-120),
  (VTBL_ENTRY)&(_ZTI7S8583C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S8583C1D1Ev,_ZThn120_N7S8583C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S8583C1D0Ev,_ZThn120_N7S8583C1D0Ev),
  (VTBL_ENTRY)&_ZN8S8583C103v27Ev,
};
extern VTBL_ENTRY _ZTI7S8583C1[];
extern  VTBL_ENTRY _ZTV7S8583C1[];
Class_Descriptor cd_S8583C1 = {  "S8583C1", // class name
  bases_S8583C1, 2,
  &(vtc_S8583C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,128), // object size
  NSPAIRA(_ZTI7S8583C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8583C1),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  S8582C2  {
  void *s8582c2f0;
  ::S856C9_nt s8582c2f1;
  ::S856C13_nt s8582c2f2;
  int s8582c2f3;
  ::S16130C9_nt s8582c2f4;
  virtual  ~S8582C2(); // _ZN7S8582C2D1Ev
  virtual void  v13(); // _ZN7S8582C23v13Ev
  virtual void  v14(); // _ZN7S8582C23v14Ev
  virtual void  v15(); // _ZN7S8582C23v15Ev
  virtual void  v16(); // _ZN7S8582C23v16Ev
  virtual void  v17(); // _ZN7S8582C23v17Ev
  virtual void  v18(); // _ZN7S8582C23v18Ev
  virtual void  v19(); // _ZN7S8582C23v19Ev
  virtual void  v20(); // _ZN7S8582C23v20Ev
  virtual void  v21(); // _ZN7S8582C23v21Ev
  virtual void  v22(); // _ZN7S8582C23v22Ev
  virtual void  v23(); // _ZN7S8582C23v23Ev
  virtual void  v24(); // _ZN7S8582C23v24Ev
  virtual void  v25(); // _ZN7S8582C23v25Ev
  virtual void  v26(); // _ZN7S8582C23v26Ev
  S8582C2(); // tgen
};
//SIG(-1 S8582C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp FC2{ m FC3{ Fl[4]}} FC4{ m Fp FC2 FC5{ m Fp FC6{ Fi[4]}} Fi Fc} Fi FC7{ m Fp Fi FC8{ m}}}


 S8582C2 ::~S8582C2(){ note_dtor("S8582C2", this);}
void  S8582C2 ::v13(){vfunc_called(this, "_ZN7S8582C23v13Ev");}
void  S8582C2 ::v14(){vfunc_called(this, "_ZN7S8582C23v14Ev");}
void  S8582C2 ::v15(){vfunc_called(this, "_ZN7S8582C23v15Ev");}
void  S8582C2 ::v16(){vfunc_called(this, "_ZN7S8582C23v16Ev");}
void  S8582C2 ::v17(){vfunc_called(this, "_ZN7S8582C23v17Ev");}
void  S8582C2 ::v18(){vfunc_called(this, "_ZN7S8582C23v18Ev");}
void  S8582C2 ::v19(){vfunc_called(this, "_ZN7S8582C23v19Ev");}
void  S8582C2 ::v20(){vfunc_called(this, "_ZN7S8582C23v20Ev");}
void  S8582C2 ::v21(){vfunc_called(this, "_ZN7S8582C23v21Ev");}
void  S8582C2 ::v22(){vfunc_called(this, "_ZN7S8582C23v22Ev");}
void  S8582C2 ::v23(){vfunc_called(this, "_ZN7S8582C23v23Ev");}
void  S8582C2 ::v24(){vfunc_called(this, "_ZN7S8582C23v24Ev");}
void  S8582C2 ::v25(){vfunc_called(this, "_ZN7S8582C23v25Ev");}
void  S8582C2 ::v26(){vfunc_called(this, "_ZN7S8582C23v26Ev");}
S8582C2 ::S8582C2(){ note_ctor("S8582C2", this);} // tgen

static void Test_S8582C2()
{
  extern Class_Descriptor cd_S8582C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S8582C2, buf);
    S8582C2 *dp, &lv = *(dp=new (buf) S8582C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S8582C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8582C2)");
    check_field_offset(lv, s8582c2f0, ABISELECT(8,4), "S8582C2.s8582c2f0");
    check_field_offset(lv, s8582c2f1, ABISELECT(16,8), "S8582C2.s8582c2f1");
    check_field_offset(lv, s8582c2f2, ABISELECT(48,24), "S8582C2.s8582c2f2");
    check_field_offset(lv, s8582c2f3, ABISELECT(120,72), "S8582C2.s8582c2f3");
    check_field_offset(lv, s8582c2f4, ABISELECT(128,76), "S8582C2.s8582c2f4");
    test_class_info(&lv, &cd_S8582C2);
    dp->~S8582C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8582C2(Test_S8582C2, "S8582C2", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S8582C2C1Ev();
extern void _ZN7S8582C2D1Ev();
Name_Map name_map_S8582C2[] = {
  NSPAIR(_ZN7S8582C2C1Ev),
  NSPAIR(_ZN7S8582C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8582C2[];
extern void _ZN7S8582C2D1Ev();
extern void _ZN7S8582C2D0Ev();
extern void _ZN7S8582C23v13Ev();
extern void _ZN7S8582C23v14Ev();
extern void _ZN7S8582C23v15Ev();
extern void _ZN7S8582C23v16Ev();
extern void _ZN7S8582C23v17Ev();
extern void _ZN7S8582C23v18Ev();
extern void _ZN7S8582C23v19Ev();
extern void _ZN7S8582C23v20Ev();
extern void _ZN7S8582C23v21Ev();
extern void _ZN7S8582C23v22Ev();
extern void _ZN7S8582C23v23Ev();
extern void _ZN7S8582C23v24Ev();
extern void _ZN7S8582C23v25Ev();
extern void _ZN7S8582C23v26Ev();
static  VTBL_ENTRY vtc_S8582C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8582C2[0]),
  (VTBL_ENTRY)&_ZN7S8582C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8582C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S8582C2[];
extern  VTBL_ENTRY _ZTV7S8582C2[];
Class_Descriptor cd_S8582C2 = {  "S8582C2", // class name
  0,0,//no base classes
  &(vtc_S8582C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S8582C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8582C2),18, //virtual function table var
  2, // 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  S8582C10  {
  virtual  ~S8582C10(); // _ZN8S8582C10D1Ev
  virtual void  v27(); // _ZN8S8582C103v27Ev
  S8582C10(); // tgen
};
//SIG(-1 S8582C10) C1{ vd v1}


 S8582C10 ::~S8582C10(){ note_dtor("S8582C10", this);}
void  S8582C10 ::v27(){vfunc_called(this, "_ZN8S8582C103v27Ev");}
S8582C10 ::S8582C10(){ note_ctor("S8582C10", this);} // tgen

static void Test_S8582C10()
{
  extern Class_Descriptor cd_S8582C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8582C10, buf);
    S8582C10 *dp, &lv = *(dp=new (buf) S8582C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8582C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8582C10)");
    test_class_info(&lv, &cd_S8582C10);
    dp->~S8582C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8582C10(Test_S8582C10, "S8582C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S8582C10C1Ev();
extern void _ZN8S8582C10D1Ev();
Name_Map name_map_S8582C10[] = {
  NSPAIR(_ZN8S8582C10C1Ev),
  NSPAIR(_ZN8S8582C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S8582C10[];
extern void _ZN8S8582C10D1Ev();
extern void _ZN8S8582C10D0Ev();
extern void _ZN8S8582C103v27Ev();
static  VTBL_ENTRY vtc_S8582C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S8582C10[0]),
  (VTBL_ENTRY)&_ZN8S8582C10D1Ev,
  (VTBL_ENTRY)&_ZN8S8582C10D0Ev,
  (VTBL_ENTRY)&_ZN8S8582C103v27Ev,
};
extern VTBL_ENTRY _ZTI8S8582C10[];
extern  VTBL_ENTRY _ZTV8S8582C10[];
Class_Descriptor cd_S8582C10 = {  "S8582C10", // class name
  0,0,//no base classes
  &(vtc_S8582C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S8582C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S8582C10),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  S8582C1  : S8582C2 , S8582C10 {
  void *s8582c1f0;
  virtual  ~S8582C1(); // _ZN7S8582C1D1Ev
  virtual void  v1(); // _ZN7S8582C12v1Ev
  virtual void  v2(); // _ZN7S8582C12v2Ev
  virtual void  v3(); // _ZN7S8582C12v3Ev
  virtual void  v4(); // _ZN7S8582C12v4Ev
  virtual void  v5(); // _ZN7S8582C12v5Ev
  virtual void  v6(); // _ZN7S8582C12v6Ev
  virtual void  v7(); // _ZN7S8582C12v7Ev
  virtual void  v8(); // _ZN7S8582C12v8Ev
  virtual void  v9(); // _ZN7S8582C12v9Ev
  virtual void  v10(); // _ZN7S8582C13v10Ev
  virtual void  v11(); // _ZN7S8582C13v11Ev
  virtual void  v12(); // _ZN7S8582C13v12Ev
  S8582C1(); // tgen
};
//SIG(1 S8582C1) C1{ BC2{ vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp FC3{ m FC4{ Fl[4]}} FC5{ m Fp FC3 FC6{ m Fp FC7{ Fi[4]}} Fi Fc} Fi FC8{ m Fp Fi FC9{ m}}} BC10{ vd v27} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp}


 S8582C1 ::~S8582C1(){ note_dtor("S8582C1", this);}
void  S8582C1 ::v1(){vfunc_called(this, "_ZN7S8582C12v1Ev");}
void  S8582C1 ::v2(){vfunc_called(this, "_ZN7S8582C12v2Ev");}
void  S8582C1 ::v3(){vfunc_called(this, "_ZN7S8582C12v3Ev");}
void  S8582C1 ::v4(){vfunc_called(this, "_ZN7S8582C12v4Ev");}
void  S8582C1 ::v5(){vfunc_called(this, "_ZN7S8582C12v5Ev");}
void  S8582C1 ::v6(){vfunc_called(this, "_ZN7S8582C12v6Ev");}
void  S8582C1 ::v7(){vfunc_called(this, "_ZN7S8582C12v7Ev");}
void  S8582C1 ::v8(){vfunc_called(this, "_ZN7S8582C12v8Ev");}
void  S8582C1 ::v9(){vfunc_called(this, "_ZN7S8582C12v9Ev");}
void  S8582C1 ::v10(){vfunc_called(this, "_ZN7S8582C13v10Ev");}
void  S8582C1 ::v11(){vfunc_called(this, "_ZN7S8582C13v11Ev");}
void  S8582C1 ::v12(){vfunc_called(this, "_ZN7S8582C13v12Ev");}
S8582C1 ::S8582C1(){ note_ctor("S8582C1", this);} // tgen

static void Test_S8582C1()
{
  extern Class_Descriptor cd_S8582C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,25)];
    init_test(&cd_S8582C1, buf);
    S8582C1 *dp, &lv = *(dp=new (buf) S8582C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,96), "sizeof(S8582C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8582C1)");
    check_base_class_offset(lv, (S8582C2*), 0, "S8582C1");
    check_base_class_offset(lv, (S8582C10*), ABISELECT(144,88), "S8582C1");
    check_field_offset(lv, s8582c1f0, ABISELECT(152,92), "S8582C1.s8582c1f0");
    test_class_info(&lv, &cd_S8582C1);
    dp->~S8582C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8582C1(Test_S8582C1, "S8582C1", ABISELECT(160,96));

#else // __cplusplus

extern void _ZN7S8582C1C1Ev();
extern void _ZN7S8582C1D1Ev();
Name_Map name_map_S8582C1[] = {
  NSPAIR(_ZN7S8582C1C1Ev),
  NSPAIR(_ZN7S8582C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8582C2;
extern VTBL_ENTRY _ZTI7S8582C2[];
extern  VTBL_ENTRY _ZTV7S8582C2[];
extern Class_Descriptor cd_S8582C10;
extern VTBL_ENTRY _ZTI8S8582C10[];
extern  VTBL_ENTRY _ZTV8S8582C10[];
static Base_Class bases_S8582C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8582C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S8582C10,    ABISELECT(144,88), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8582C1[];
extern void _ZN7S8582C1D1Ev();
extern void _ZN7S8582C1D0Ev();
extern void _ZN7S8582C23v13Ev();
extern void _ZN7S8582C23v14Ev();
extern void _ZN7S8582C23v15Ev();
extern void _ZN7S8582C23v16Ev();
extern void _ZN7S8582C23v17Ev();
extern void _ZN7S8582C23v18Ev();
extern void _ZN7S8582C23v19Ev();
extern void _ZN7S8582C23v20Ev();
extern void _ZN7S8582C23v21Ev();
extern void _ZN7S8582C23v22Ev();
extern void _ZN7S8582C23v23Ev();
extern void _ZN7S8582C23v24Ev();
extern void _ZN7S8582C23v25Ev();
extern void _ZN7S8582C23v26Ev();
extern void _ZN7S8582C12v1Ev();
extern void _ZN7S8582C12v2Ev();
extern void _ZN7S8582C12v3Ev();
extern void _ZN7S8582C12v4Ev();
extern void _ZN7S8582C12v5Ev();
extern void _ZN7S8582C12v6Ev();
extern void _ZN7S8582C12v7Ev();
extern void _ZN7S8582C12v8Ev();
extern void _ZN7S8582C12v9Ev();
extern void _ZN7S8582C13v10Ev();
extern void _ZN7S8582C13v11Ev();
extern void _ZN7S8582C13v12Ev();
extern void ABISELECT(_ZThn144_N7S8582C1D1Ev,_ZThn88_N7S8582C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S8582C1D0Ev,_ZThn88_N7S8582C1D0Ev)();
extern void _ZN8S8582C103v27Ev();
static  VTBL_ENTRY vtc_S8582C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8582C1[0]),
  (VTBL_ENTRY)&_ZN7S8582C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8582C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8582C23v26Ev,
  (VTBL_ENTRY)&_ZN7S8582C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8582C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8582C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8582C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8582C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8582C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8582C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8582C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8582C12v9Ev,
  (VTBL_ENTRY)&_ZN7S8582C13v10Ev,
  (VTBL_ENTRY)&_ZN7S8582C13v11Ev,
  (VTBL_ENTRY)&_ZN7S8582C13v12Ev,
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI7S8582C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S8582C1D1Ev,_ZThn88_N7S8582C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S8582C1D0Ev,_ZThn88_N7S8582C1D0Ev),
  (VTBL_ENTRY)&_ZN8S8582C103v27Ev,
};
extern VTBL_ENTRY _ZTI7S8582C1[];
extern  VTBL_ENTRY _ZTV7S8582C1[];
Class_Descriptor cd_S8582C1 = {  "S8582C1", // class name
  bases_S8582C1, 2,
  &(vtc_S8582C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,96), // object size
  NSPAIRA(_ZTI7S8582C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8582C1),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  S1101C3  : S3221C8_nt {
};
//SIG(-1 S1101C3) C1{ BC2{ m Fi}}



static void Test_S1101C3()
{
  extern Class_Descriptor cd_S1101C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1101C3, buf);
    S1101C3 &lv = *(new (buf) S1101C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1101C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1101C3)");
    check_base_class_offset(lv, (S3221C8_nt*), 0, "S1101C3");
    test_class_info(&lv, &cd_S1101C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1101C3(Test_S1101C3, "S1101C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S1101C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1101C3[];
Class_Descriptor cd_S1101C3 = {  "S1101C3", // class name
  bases_S1101C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1101C3),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  S1101C2  : S1101C3 {
  ::S2632C18_nt s1101c2f0;
  ::S1098C5_nt s1101c2f1;
  ::S1098C5_nt s1101c2f2;
  ::S2632C13 s1101c2f3;
  char s1101c2f4;
  ::S1098C10_nt s1101c2f5;
  ::S1093C13 s1101c2f6;
  void *s1101c2f7;
  ::S1093C13 s1101c2f8;
  ::S1093C13 s1101c2f9;
  char s1101c2f10[5];
  virtual  ~S1101C2(); // _ZN7S1101C2D1Ev
  virtual void  v5(); // _ZN7S1101C22v5Ev
  virtual void  v6(); // _ZN7S1101C22v6Ev
  virtual void  v7(); // _ZN7S1101C22v7Ev
  virtual void  v8(); // _ZN7S1101C22v8Ev
  virtual void  v9(); // _ZN7S1101C22v9Ev
  virtual void  v10(); // _ZN7S1101C23v10Ev
  virtual void  v11(); // _ZN7S1101C23v11Ev
  S1101C2(); // tgen
};
//SIG(-1 S1101C2) C1{ BC2{ BC3{ m Fi}} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp} FC5{ m Fp} FC5 FC6{ m Fi FC7{ BC8{ m Fp Fi}}} Fc FC9{ m FC10{ m Fi[2]} FC11{ m Fi[2]}} FC12{ m FC10 FC11} Fp FC12 FC12 Fc[5]}


 S1101C2 ::~S1101C2(){ note_dtor("S1101C2", this);}
void  S1101C2 ::v5(){vfunc_called(this, "_ZN7S1101C22v5Ev");}
void  S1101C2 ::v6(){vfunc_called(this, "_ZN7S1101C22v6Ev");}
void  S1101C2 ::v7(){vfunc_called(this, "_ZN7S1101C22v7Ev");}
void  S1101C2 ::v8(){vfunc_called(this, "_ZN7S1101C22v8Ev");}
void  S1101C2 ::v9(){vfunc_called(this, "_ZN7S1101C22v9Ev");}
void  S1101C2 ::v10(){vfunc_called(this, "_ZN7S1101C23v10Ev");}
void  S1101C2 ::v11(){vfunc_called(this, "_ZN7S1101C23v11Ev");}
S1101C2 ::S1101C2(){ note_ctor("S1101C2", this);} // tgen

static void Test_S1101C2()
{
  extern Class_Descriptor cd_S1101C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S1101C2, buf);
    S1101C2 *dp, &lv = *(dp=new (buf) S1101C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S1101C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1101C2)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1101C3*), ABISELECT(8,4), "S1101C2");
    check_base_class_offset(lv, (S1101C3*), ABISELECT(8,4), "S1101C2");
    check_field_offset(lv, s1101c2f0, ABISELECT(16,8), "S1101C2.s1101c2f0");
    check_field_offset(lv, s1101c2f1, ABISELECT(24,12), "S1101C2.s1101c2f1");
    check_field_offset(lv, s1101c2f2, ABISELECT(32,16), "S1101C2.s1101c2f2");
    check_field_offset(lv, s1101c2f3, ABISELECT(40,20), "S1101C2.s1101c2f3");
    check_field_offset(lv, s1101c2f4, ABISELECT(64,32), "S1101C2.s1101c2f4");
    check_field_offset(lv, s1101c2f5, ABISELECT(68,36), "S1101C2.s1101c2f5");
    check_field_offset(lv, s1101c2f6, ABISELECT(84,52), "S1101C2.s1101c2f6");
    check_field_offset(lv, s1101c2f7, ABISELECT(104,68), "S1101C2.s1101c2f7");
    check_field_offset(lv, s1101c2f8, ABISELECT(112,72), "S1101C2.s1101c2f8");
    check_field_offset(lv, s1101c2f9, ABISELECT(128,88), "S1101C2.s1101c2f9");
    check_field_offset(lv, s1101c2f10, ABISELECT(144,104), "S1101C2.s1101c2f10");
    test_class_info(&lv, &cd_S1101C2);
    dp->~S1101C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1101C2(Test_S1101C2, "S1101C2", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S1101C2C1Ev();
extern void _ZN7S1101C2D1Ev();
Name_Map name_map_S1101C2[] = {
  NSPAIR(_ZN7S1101C2C1Ev),
  NSPAIR(_ZN7S1101C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1101C3;
extern VTBL_ENTRY _ZTI7S1101C3[];
static Base_Class bases_S1101C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1101C3,    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 _ZTI7S1101C2[];
extern void _ZN7S1101C2D1Ev();
extern void _ZN7S1101C2D0Ev();
extern void _ZN7S1101C22v5Ev();
extern void _ZN7S1101C22v6Ev();
extern void _ZN7S1101C22v7Ev();
extern void _ZN7S1101C22v8Ev();
extern void _ZN7S1101C22v9Ev();
extern void _ZN7S1101C23v10Ev();
extern void _ZN7S1101C23v11Ev();
static  VTBL_ENTRY vtc_S1101C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1101C2[0]),
  (VTBL_ENTRY)&_ZN7S1101C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1101C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1101C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1101C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1101C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1101C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1101C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1101C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1101C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S1101C2[];
extern  VTBL_ENTRY _ZTV7S1101C2[];
Class_Descriptor cd_S1101C2 = {  "S1101C2", // class name
  bases_S1101C2, 2,
  &(vtc_S1101C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S1101C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1101C2),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  S1101C1  : S1101C2 {
  int s1101c1f0[3];
  virtual void  v1(); // _ZN7S1101C12v1Ev
  virtual void  v2(); // _ZN7S1101C12v2Ev
  virtual void  v3(); // _ZN7S1101C12v3Ev
  virtual void  v4(); // _ZN7S1101C12v4Ev
  ~S1101C1(); // tgen
  S1101C1(); // tgen
};
//SIG(1 S1101C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v5 v6 v7 v8 v9 v10 v11 FC5{ m Fp} FC6{ m Fp} FC6 FC7{ m Fi FC8{ BC9{ m Fp Fi}}} Fc FC10{ m FC11{ m Fi[2]} FC12{ m Fi[2]}} FC13{ m FC11 FC12} Fp FC13 FC13 Fc[5]} v1 v2 v3 v4 Fi[3]}


void  S1101C1 ::v1(){vfunc_called(this, "_ZN7S1101C12v1Ev");}
void  S1101C1 ::v2(){vfunc_called(this, "_ZN7S1101C12v2Ev");}
void  S1101C1 ::v3(){vfunc_called(this, "_ZN7S1101C12v3Ev");}
void  S1101C1 ::v4(){vfunc_called(this, "_ZN7S1101C12v4Ev");}
S1101C1 ::~S1101C1(){ note_dtor("S1101C1", this);} // tgen
S1101C1 ::S1101C1(){ note_ctor("S1101C1", this);} // tgen

static void Test_S1101C1()
{
  extern Class_Descriptor cd_S1101C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,32)];
    init_test(&cd_S1101C1, buf);
    S1101C1 *dp, &lv = *(dp=new (buf) S1101C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,124), "sizeof(S1101C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1101C1)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1101C3*)(S1101C2*), ABISELECT(8,4), "S1101C1");
    check_base_class_offset(lv, (S1101C3*)(S1101C2*), ABISELECT(8,4), "S1101C1");
    check_base_class_offset(lv, (S1101C2*), 0, "S1101C1");
    check_field_offset(lv, s1101c1f0, ABISELECT(152,112), "S1101C1.s1101c1f0");
    test_class_info(&lv, &cd_S1101C1);
    dp->~S1101C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1101C1(Test_S1101C1, "S1101C1", ABISELECT(168,124));

#else // __cplusplus

extern void _ZN7S1101C1C1Ev();
extern void _ZN7S1101C1D1Ev();
Name_Map name_map_S1101C1[] = {
  NSPAIR(_ZN7S1101C1C1Ev),
  NSPAIR(_ZN7S1101C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1101C3;
extern VTBL_ENTRY _ZTI7S1101C3[];
extern Class_Descriptor cd_S1101C2;
extern VTBL_ENTRY _ZTI7S1101C2[];
extern  VTBL_ENTRY _ZTV7S1101C2[];
static Base_Class bases_S1101C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1101C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1101C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1101C1[];
extern void _ZN7S1101C1D1Ev();
extern void _ZN7S1101C1D0Ev();
extern void _ZN7S1101C22v5Ev();
extern void _ZN7S1101C22v6Ev();
extern void _ZN7S1101C22v7Ev();
extern void _ZN7S1101C22v8Ev();
extern void _ZN7S1101C22v9Ev();
extern void _ZN7S1101C23v10Ev();
extern void _ZN7S1101C23v11Ev();
extern void _ZN7S1101C12v1Ev();
extern void _ZN7S1101C12v2Ev();
extern void _ZN7S1101C12v3Ev();
extern void _ZN7S1101C12v4Ev();
static  VTBL_ENTRY vtc_S1101C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1101C1[0]),
  (VTBL_ENTRY)&_ZN7S1101C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1101C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1101C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1101C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1101C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1101C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1101C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1101C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1101C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1101C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1101C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1101C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1101C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1101C1[];
extern  VTBL_ENTRY _ZTV7S1101C1[];
Class_Descriptor cd_S1101C1 = {  "S1101C1", // class name
  bases_S1101C1, 3,
  &(vtc_S1101C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,124), // object size
  NSPAIRA(_ZTI7S1101C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1101C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1100C3  : S3221C8_nt {
};
//SIG(-1 S1100C3) C1{ BC2{ m Fi}}



static void Test_S1100C3()
{
  extern Class_Descriptor cd_S1100C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1100C3, buf);
    S1100C3 &lv = *(new (buf) S1100C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1100C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1100C3)");
    check_base_class_offset(lv, (S3221C8_nt*), 0, "S1100C3");
    test_class_info(&lv, &cd_S1100C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1100C3(Test_S1100C3, "S1100C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S1100C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1100C3[];
Class_Descriptor cd_S1100C3 = {  "S1100C3", // class name
  bases_S1100C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1100C3),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  S1100C2  : S1100C3 {
  ::S2632C18_nt s1100c2f0;
  ::S1098C5_nt s1100c2f1;
  ::S1098C5_nt s1100c2f2;
  ::S2632C13 s1100c2f3;
  char s1100c2f4;
  ::S1098C10_nt s1100c2f5;
  ::S1093C13 s1100c2f6;
  void *s1100c2f7;
  ::S1093C13 s1100c2f8;
  ::S1093C13 s1100c2f9;
  char s1100c2f10[5];
  virtual  ~S1100C2(); // _ZN7S1100C2D1Ev
  virtual void  v5(); // _ZN7S1100C22v5Ev
  virtual void  v6(); // _ZN7S1100C22v6Ev
  virtual void  v7(); // _ZN7S1100C22v7Ev
  virtual void  v8(); // _ZN7S1100C22v8Ev
  virtual void  v9(); // _ZN7S1100C22v9Ev
  virtual void  v10(); // _ZN7S1100C23v10Ev
  virtual void  v11(); // _ZN7S1100C23v11Ev
  S1100C2(); // tgen
};
//SIG(-1 S1100C2) C1{ BC2{ BC3{ m Fi}} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp} FC5{ m Fp} FC5 FC6{ m Fi FC7{ BC8{ m Fp Fi}}} Fc FC9{ m FC10{ m Fi[2]} FC11{ m Fi[2]}} FC12{ m FC10 FC11} Fp FC12 FC12 Fc[5]}


 S1100C2 ::~S1100C2(){ note_dtor("S1100C2", this);}
void  S1100C2 ::v5(){vfunc_called(this, "_ZN7S1100C22v5Ev");}
void  S1100C2 ::v6(){vfunc_called(this, "_ZN7S1100C22v6Ev");}
void  S1100C2 ::v7(){vfunc_called(this, "_ZN7S1100C22v7Ev");}
void  S1100C2 ::v8(){vfunc_called(this, "_ZN7S1100C22v8Ev");}
void  S1100C2 ::v9(){vfunc_called(this, "_ZN7S1100C22v9Ev");}
void  S1100C2 ::v10(){vfunc_called(this, "_ZN7S1100C23v10Ev");}
void  S1100C2 ::v11(){vfunc_called(this, "_ZN7S1100C23v11Ev");}
S1100C2 ::S1100C2(){ note_ctor("S1100C2", this);} // tgen

static void Test_S1100C2()
{
  extern Class_Descriptor cd_S1100C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S1100C2, buf);
    S1100C2 *dp, &lv = *(dp=new (buf) S1100C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S1100C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1100C2)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1100C3*), ABISELECT(8,4), "S1100C2");
    check_base_class_offset(lv, (S1100C3*), ABISELECT(8,4), "S1100C2");
    check_field_offset(lv, s1100c2f0, ABISELECT(16,8), "S1100C2.s1100c2f0");
    check_field_offset(lv, s1100c2f1, ABISELECT(24,12), "S1100C2.s1100c2f1");
    check_field_offset(lv, s1100c2f2, ABISELECT(32,16), "S1100C2.s1100c2f2");
    check_field_offset(lv, s1100c2f3, ABISELECT(40,20), "S1100C2.s1100c2f3");
    check_field_offset(lv, s1100c2f4, ABISELECT(64,32), "S1100C2.s1100c2f4");
    check_field_offset(lv, s1100c2f5, ABISELECT(68,36), "S1100C2.s1100c2f5");
    check_field_offset(lv, s1100c2f6, ABISELECT(84,52), "S1100C2.s1100c2f6");
    check_field_offset(lv, s1100c2f7, ABISELECT(104,68), "S1100C2.s1100c2f7");
    check_field_offset(lv, s1100c2f8, ABISELECT(112,72), "S1100C2.s1100c2f8");
    check_field_offset(lv, s1100c2f9, ABISELECT(128,88), "S1100C2.s1100c2f9");
    check_field_offset(lv, s1100c2f10, ABISELECT(144,104), "S1100C2.s1100c2f10");
    test_class_info(&lv, &cd_S1100C2);
    dp->~S1100C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1100C2(Test_S1100C2, "S1100C2", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S1100C2C1Ev();
extern void _ZN7S1100C2D1Ev();
Name_Map name_map_S1100C2[] = {
  NSPAIR(_ZN7S1100C2C1Ev),
  NSPAIR(_ZN7S1100C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1100C3;
extern VTBL_ENTRY _ZTI7S1100C3[];
static Base_Class bases_S1100C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1100C3,    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 _ZTI7S1100C2[];
extern void _ZN7S1100C2D1Ev();
extern void _ZN7S1100C2D0Ev();
extern void _ZN7S1100C22v5Ev();
extern void _ZN7S1100C22v6Ev();
extern void _ZN7S1100C22v7Ev();
extern void _ZN7S1100C22v8Ev();
extern void _ZN7S1100C22v9Ev();
extern void _ZN7S1100C23v10Ev();
extern void _ZN7S1100C23v11Ev();
static  VTBL_ENTRY vtc_S1100C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1100C2[0]),
  (VTBL_ENTRY)&_ZN7S1100C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1100C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1100C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1100C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1100C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1100C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1100C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1100C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1100C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S1100C2[];
extern  VTBL_ENTRY _ZTV7S1100C2[];
Class_Descriptor cd_S1100C2 = {  "S1100C2", // class name
  bases_S1100C2, 2,
  &(vtc_S1100C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S1100C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1100C2),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  S1100C1  : S1100C2 {
  int s1100c1f0[2];
  virtual void  v1(); // _ZN7S1100C12v1Ev
  virtual void  v2(); // _ZN7S1100C12v2Ev
  virtual void  v3(); // _ZN7S1100C12v3Ev
  virtual void  v4(); // _ZN7S1100C12v4Ev
  ~S1100C1(); // tgen
  S1100C1(); // tgen
};
//SIG(1 S1100C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v5 v6 v7 v8 v9 v10 v11 FC5{ m Fp} FC6{ m Fp} FC6 FC7{ m Fi FC8{ BC9{ m Fp Fi}}} Fc FC10{ m FC11{ m Fi[2]} FC12{ m Fi[2]}} FC13{ m FC11 FC12} Fp FC13 FC13 Fc[5]} v1 v2 v3 v4 Fi[2]}


void  S1100C1 ::v1(){vfunc_called(this, "_ZN7S1100C12v1Ev");}
void  S1100C1 ::v2(){vfunc_called(this, "_ZN7S1100C12v2Ev");}
void  S1100C1 ::v3(){vfunc_called(this, "_ZN7S1100C12v3Ev");}
void  S1100C1 ::v4(){vfunc_called(this, "_ZN7S1100C12v4Ev");}
S1100C1 ::~S1100C1(){ note_dtor("S1100C1", this);} // tgen
S1100C1 ::S1100C1(){ note_ctor("S1100C1", this);} // tgen

static void Test_S1100C1()
{
  extern Class_Descriptor cd_S1100C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,31)];
    init_test(&cd_S1100C1, buf);
    S1100C1 *dp, &lv = *(dp=new (buf) S1100C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,120), "sizeof(S1100C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1100C1)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1100C3*)(S1100C2*), ABISELECT(8,4), "S1100C1");
    check_base_class_offset(lv, (S1100C3*)(S1100C2*), ABISELECT(8,4), "S1100C1");
    check_base_class_offset(lv, (S1100C2*), 0, "S1100C1");
    check_field_offset(lv, s1100c1f0, ABISELECT(152,112), "S1100C1.s1100c1f0");
    test_class_info(&lv, &cd_S1100C1);
    dp->~S1100C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1100C1(Test_S1100C1, "S1100C1", ABISELECT(160,120));

#else // __cplusplus

extern void _ZN7S1100C1C1Ev();
extern void _ZN7S1100C1D1Ev();
Name_Map name_map_S1100C1[] = {
  NSPAIR(_ZN7S1100C1C1Ev),
  NSPAIR(_ZN7S1100C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1100C3;
extern VTBL_ENTRY _ZTI7S1100C3[];
extern Class_Descriptor cd_S1100C2;
extern VTBL_ENTRY _ZTI7S1100C2[];
extern  VTBL_ENTRY _ZTV7S1100C2[];
static Base_Class bases_S1100C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1100C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1100C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1100C1[];
extern void _ZN7S1100C1D1Ev();
extern void _ZN7S1100C1D0Ev();
extern void _ZN7S1100C22v5Ev();
extern void _ZN7S1100C22v6Ev();
extern void _ZN7S1100C22v7Ev();
extern void _ZN7S1100C22v8Ev();
extern void _ZN7S1100C22v9Ev();
extern void _ZN7S1100C23v10Ev();
extern void _ZN7S1100C23v11Ev();
extern void _ZN7S1100C12v1Ev();
extern void _ZN7S1100C12v2Ev();
extern void _ZN7S1100C12v3Ev();
extern void _ZN7S1100C12v4Ev();
static  VTBL_ENTRY vtc_S1100C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1100C1[0]),
  (VTBL_ENTRY)&_ZN7S1100C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1100C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1100C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1100C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1100C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1100C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1100C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1100C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1100C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1100C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1100C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1100C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1100C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1100C1[];
extern  VTBL_ENTRY _ZTV7S1100C1[];
Class_Descriptor cd_S1100C1 = {  "S1100C1", // class name
  bases_S1100C1, 3,
  &(vtc_S1100C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,120), // object size
  NSPAIRA(_ZTI7S1100C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1100C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1109C3  : S3221C8_nt {
};
//SIG(-1 S1109C3) C1{ BC2{ m Fi}}



static void Test_S1109C3()
{
  extern Class_Descriptor cd_S1109C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1109C3, buf);
    S1109C3 &lv = *(new (buf) S1109C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1109C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1109C3)");
    check_base_class_offset(lv, (S3221C8_nt*), 0, "S1109C3");
    test_class_info(&lv, &cd_S1109C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1109C3(Test_S1109C3, "S1109C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S1109C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1109C3[];
Class_Descriptor cd_S1109C3 = {  "S1109C3", // class name
  bases_S1109C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1109C3),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  S1109C2  : S1109C3 {
  ::S2632C18_nt s1109c2f0;
  ::S1098C5_nt s1109c2f1;
  ::S1098C5_nt s1109c2f2;
  ::S2632C13 s1109c2f3;
  char s1109c2f4;
  ::S1098C10_nt s1109c2f5;
  ::S1093C13 s1109c2f6;
  void *s1109c2f7;
  ::S1093C13 s1109c2f8;
  ::S1093C13 s1109c2f9;
  char s1109c2f10[5];
  virtual  ~S1109C2(); // _ZN7S1109C2D1Ev
  virtual void  v6(); // _ZN7S1109C22v6Ev
  virtual void  v7(); // _ZN7S1109C22v7Ev
  virtual void  v8(); // _ZN7S1109C22v8Ev
  virtual void  v9(); // _ZN7S1109C22v9Ev
  virtual void  v10(); // _ZN7S1109C23v10Ev
  virtual void  v11(); // _ZN7S1109C23v11Ev
  virtual void  v12(); // _ZN7S1109C23v12Ev
  S1109C2(); // tgen
};
//SIG(-1 S1109C2) C1{ BC2{ BC3{ m Fi}} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp} FC5{ m Fp} FC5 FC6{ m Fi FC7{ BC8{ m Fp Fi}}} Fc FC9{ m FC10{ m Fi[2]} FC11{ m Fi[2]}} FC12{ m FC10 FC11} Fp FC12 FC12 Fc[5]}


 S1109C2 ::~S1109C2(){ note_dtor("S1109C2", this);}
void  S1109C2 ::v6(){vfunc_called(this, "_ZN7S1109C22v6Ev");}
void  S1109C2 ::v7(){vfunc_called(this, "_ZN7S1109C22v7Ev");}
void  S1109C2 ::v8(){vfunc_called(this, "_ZN7S1109C22v8Ev");}
void  S1109C2 ::v9(){vfunc_called(this, "_ZN7S1109C22v9Ev");}
void  S1109C2 ::v10(){vfunc_called(this, "_ZN7S1109C23v10Ev");}
void  S1109C2 ::v11(){vfunc_called(this, "_ZN7S1109C23v11Ev");}
void  S1109C2 ::v12(){vfunc_called(this, "_ZN7S1109C23v12Ev");}
S1109C2 ::S1109C2(){ note_ctor("S1109C2", this);} // tgen

static void Test_S1109C2()
{
  extern Class_Descriptor cd_S1109C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S1109C2, buf);
    S1109C2 *dp, &lv = *(dp=new (buf) S1109C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S1109C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1109C2)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1109C3*), ABISELECT(8,4), "S1109C2");
    check_base_class_offset(lv, (S1109C3*), ABISELECT(8,4), "S1109C2");
    check_field_offset(lv, s1109c2f0, ABISELECT(16,8), "S1109C2.s1109c2f0");
    check_field_offset(lv, s1109c2f1, ABISELECT(24,12), "S1109C2.s1109c2f1");
    check_field_offset(lv, s1109c2f2, ABISELECT(32,16), "S1109C2.s1109c2f2");
    check_field_offset(lv, s1109c2f3, ABISELECT(40,20), "S1109C2.s1109c2f3");
    check_field_offset(lv, s1109c2f4, ABISELECT(64,32), "S1109C2.s1109c2f4");
    check_field_offset(lv, s1109c2f5, ABISELECT(68,36), "S1109C2.s1109c2f5");
    check_field_offset(lv, s1109c2f6, ABISELECT(84,52), "S1109C2.s1109c2f6");
    check_field_offset(lv, s1109c2f7, ABISELECT(104,68), "S1109C2.s1109c2f7");
    check_field_offset(lv, s1109c2f8, ABISELECT(112,72), "S1109C2.s1109c2f8");
    check_field_offset(lv, s1109c2f9, ABISELECT(128,88), "S1109C2.s1109c2f9");
    check_field_offset(lv, s1109c2f10, ABISELECT(144,104), "S1109C2.s1109c2f10");
    test_class_info(&lv, &cd_S1109C2);
    dp->~S1109C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1109C2(Test_S1109C2, "S1109C2", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S1109C2C1Ev();
extern void _ZN7S1109C2D1Ev();
Name_Map name_map_S1109C2[] = {
  NSPAIR(_ZN7S1109C2C1Ev),
  NSPAIR(_ZN7S1109C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1109C3;
extern VTBL_ENTRY _ZTI7S1109C3[];
static Base_Class bases_S1109C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1109C3,    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 _ZTI7S1109C2[];
extern void _ZN7S1109C2D1Ev();
extern void _ZN7S1109C2D0Ev();
extern void _ZN7S1109C22v6Ev();
extern void _ZN7S1109C22v7Ev();
extern void _ZN7S1109C22v8Ev();
extern void _ZN7S1109C22v9Ev();
extern void _ZN7S1109C23v10Ev();
extern void _ZN7S1109C23v11Ev();
extern void _ZN7S1109C23v12Ev();
static  VTBL_ENTRY vtc_S1109C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1109C2[0]),
  (VTBL_ENTRY)&_ZN7S1109C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1109C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1109C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1109C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1109C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1109C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1109C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1109C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1109C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S1109C2[];
extern  VTBL_ENTRY _ZTV7S1109C2[];
Class_Descriptor cd_S1109C2 = {  "S1109C2", // class name
  bases_S1109C2, 2,
  &(vtc_S1109C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S1109C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1109C2),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  S1109C1  : S1109C2 {
  virtual void  v1(); // _ZN7S1109C12v1Ev
  virtual void  v2(); // _ZN7S1109C12v2Ev
  virtual void  v3(); // _ZN7S1109C12v3Ev
  virtual void  v4(); // _ZN7S1109C12v4Ev
  virtual void  v5(); // _ZN7S1109C12v5Ev
  ~S1109C1(); // tgen
  S1109C1(); // tgen
};
//SIG(1 S1109C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v6 v7 v8 v9 v10 v11 v12 FC5{ m Fp} FC6{ m Fp} FC6 FC7{ m Fi FC8{ BC9{ m Fp Fi}}} Fc FC10{ m FC11{ m Fi[2]} FC12{ m Fi[2]}} FC13{ m FC11 FC12} Fp FC13 FC13 Fc[5]} v1 v2 v3 v4 v5}


void  S1109C1 ::v1(){vfunc_called(this, "_ZN7S1109C12v1Ev");}
void  S1109C1 ::v2(){vfunc_called(this, "_ZN7S1109C12v2Ev");}
void  S1109C1 ::v3(){vfunc_called(this, "_ZN7S1109C12v3Ev");}
void  S1109C1 ::v4(){vfunc_called(this, "_ZN7S1109C12v4Ev");}
void  S1109C1 ::v5(){vfunc_called(this, "_ZN7S1109C12v5Ev");}
S1109C1 ::~S1109C1(){ note_dtor("S1109C1", this);} // tgen
S1109C1 ::S1109C1(){ note_ctor("S1109C1", this);} // tgen

static void Test_S1109C1()
{
  extern Class_Descriptor cd_S1109C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S1109C1, buf);
    S1109C1 *dp, &lv = *(dp=new (buf) S1109C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S1109C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1109C1)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1109C3*)(S1109C2*), ABISELECT(8,4), "S1109C1");
    check_base_class_offset(lv, (S1109C3*)(S1109C2*), ABISELECT(8,4), "S1109C1");
    check_base_class_offset(lv, (S1109C2*), 0, "S1109C1");
    test_class_info(&lv, &cd_S1109C1);
    dp->~S1109C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1109C1(Test_S1109C1, "S1109C1", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S1109C1C1Ev();
extern void _ZN7S1109C1D1Ev();
Name_Map name_map_S1109C1[] = {
  NSPAIR(_ZN7S1109C1C1Ev),
  NSPAIR(_ZN7S1109C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1109C3;
extern VTBL_ENTRY _ZTI7S1109C3[];
extern Class_Descriptor cd_S1109C2;
extern VTBL_ENTRY _ZTI7S1109C2[];
extern  VTBL_ENTRY _ZTV7S1109C2[];
static Base_Class bases_S1109C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1109C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1109C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1109C1[];
extern void _ZN7S1109C1D1Ev();
extern void _ZN7S1109C1D0Ev();
extern void _ZN7S1109C22v6Ev();
extern void _ZN7S1109C22v7Ev();
extern void _ZN7S1109C22v8Ev();
extern void _ZN7S1109C22v9Ev();
extern void _ZN7S1109C23v10Ev();
extern void _ZN7S1109C23v11Ev();
extern void _ZN7S1109C23v12Ev();
extern void _ZN7S1109C12v1Ev();
extern void _ZN7S1109C12v2Ev();
extern void _ZN7S1109C12v3Ev();
extern void _ZN7S1109C12v4Ev();
extern void _ZN7S1109C12v5Ev();
static  VTBL_ENTRY vtc_S1109C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1109C1[0]),
  (VTBL_ENTRY)&_ZN7S1109C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1109C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1109C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1109C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1109C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1109C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1109C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1109C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1109C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1109C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1109C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1109C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1109C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1109C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1109C1[];
extern  VTBL_ENTRY _ZTV7S1109C1[];
Class_Descriptor cd_S1109C1 = {  "S1109C1", // class name
  bases_S1109C1, 3,
  &(vtc_S1109C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S1109C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1109C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1095C3  : S3221C8_nt {
};
//SIG(-1 S1095C3) C1{ BC2{ m Fi}}



static void Test_S1095C3()
{
  extern Class_Descriptor cd_S1095C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1095C3, buf);
    S1095C3 &lv = *(new (buf) S1095C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1095C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1095C3)");
    check_base_class_offset(lv, (S3221C8_nt*), 0, "S1095C3");
    test_class_info(&lv, &cd_S1095C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1095C3(Test_S1095C3, "S1095C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S1095C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1095C3[];
Class_Descriptor cd_S1095C3 = {  "S1095C3", // class name
  bases_S1095C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1095C3),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  S1095C2  : S1095C3 {
  ::S2632C18_nt s1095c2f0;
  ::S1098C5_nt s1095c2f1;
  ::S1098C5_nt s1095c2f2;
  ::S2632C13 s1095c2f3;
  char s1095c2f4;
  ::S1098C10_nt s1095c2f5;
  ::S1093C13 s1095c2f6;
  void *s1095c2f7;
  ::S1093C13 s1095c2f8;
  ::S1093C13 s1095c2f9;
  char s1095c2f10[5];
  virtual  ~S1095C2(); // _ZN7S1095C2D1Ev
  virtual void  v4(); // _ZN7S1095C22v4Ev
  virtual void  v5(); // _ZN7S1095C22v5Ev
  virtual void  v6(); // _ZN7S1095C22v6Ev
  virtual void  v7(); // _ZN7S1095C22v7Ev
  virtual void  v8(); // _ZN7S1095C22v8Ev
  virtual void  v9(); // _ZN7S1095C22v9Ev
  virtual void  v10(); // _ZN7S1095C23v10Ev
  S1095C2(); // tgen
};
//SIG(-1 S1095C2) C1{ BC2{ BC3{ m Fi}} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp} FC5{ m Fp} FC5 FC6{ m Fi FC7{ BC8{ m Fp Fi}}} Fc FC9{ m FC10{ m Fi[2]} FC11{ m Fi[2]}} FC12{ m FC10 FC11} Fp FC12 FC12 Fc[5]}


 S1095C2 ::~S1095C2(){ note_dtor("S1095C2", this);}
void  S1095C2 ::v4(){vfunc_called(this, "_ZN7S1095C22v4Ev");}
void  S1095C2 ::v5(){vfunc_called(this, "_ZN7S1095C22v5Ev");}
void  S1095C2 ::v6(){vfunc_called(this, "_ZN7S1095C22v6Ev");}
void  S1095C2 ::v7(){vfunc_called(this, "_ZN7S1095C22v7Ev");}
void  S1095C2 ::v8(){vfunc_called(this, "_ZN7S1095C22v8Ev");}
void  S1095C2 ::v9(){vfunc_called(this, "_ZN7S1095C22v9Ev");}
void  S1095C2 ::v10(){vfunc_called(this, "_ZN7S1095C23v10Ev");}
S1095C2 ::S1095C2(){ note_ctor("S1095C2", this);} // tgen

static void Test_S1095C2()
{
  extern Class_Descriptor cd_S1095C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S1095C2, buf);
    S1095C2 *dp, &lv = *(dp=new (buf) S1095C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S1095C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1095C2)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1095C3*), ABISELECT(8,4), "S1095C2");
    check_base_class_offset(lv, (S1095C3*), ABISELECT(8,4), "S1095C2");
    check_field_offset(lv, s1095c2f0, ABISELECT(16,8), "S1095C2.s1095c2f0");
    check_field_offset(lv, s1095c2f1, ABISELECT(24,12), "S1095C2.s1095c2f1");
    check_field_offset(lv, s1095c2f2, ABISELECT(32,16), "S1095C2.s1095c2f2");
    check_field_offset(lv, s1095c2f3, ABISELECT(40,20), "S1095C2.s1095c2f3");
    check_field_offset(lv, s1095c2f4, ABISELECT(64,32), "S1095C2.s1095c2f4");
    check_field_offset(lv, s1095c2f5, ABISELECT(68,36), "S1095C2.s1095c2f5");
    check_field_offset(lv, s1095c2f6, ABISELECT(84,52), "S1095C2.s1095c2f6");
    check_field_offset(lv, s1095c2f7, ABISELECT(104,68), "S1095C2.s1095c2f7");
    check_field_offset(lv, s1095c2f8, ABISELECT(112,72), "S1095C2.s1095c2f8");
    check_field_offset(lv, s1095c2f9, ABISELECT(128,88), "S1095C2.s1095c2f9");
    check_field_offset(lv, s1095c2f10, ABISELECT(144,104), "S1095C2.s1095c2f10");
    test_class_info(&lv, &cd_S1095C2);
    dp->~S1095C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1095C2(Test_S1095C2, "S1095C2", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S1095C2C1Ev();
extern void _ZN7S1095C2D1Ev();
Name_Map name_map_S1095C2[] = {
  NSPAIR(_ZN7S1095C2C1Ev),
  NSPAIR(_ZN7S1095C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1095C3;
extern VTBL_ENTRY _ZTI7S1095C3[];
static Base_Class bases_S1095C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1095C3,    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 _ZTI7S1095C2[];
extern void _ZN7S1095C2D1Ev();
extern void _ZN7S1095C2D0Ev();
extern void _ZN7S1095C22v4Ev();
extern void _ZN7S1095C22v5Ev();
extern void _ZN7S1095C22v6Ev();
extern void _ZN7S1095C22v7Ev();
extern void _ZN7S1095C22v8Ev();
extern void _ZN7S1095C22v9Ev();
extern void _ZN7S1095C23v10Ev();
static  VTBL_ENTRY vtc_S1095C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1095C2[0]),
  (VTBL_ENTRY)&_ZN7S1095C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1095C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1095C22v4Ev,
  (VTBL_ENTRY)&_ZN7S1095C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1095C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1095C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1095C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1095C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1095C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S1095C2[];
extern  VTBL_ENTRY _ZTV7S1095C2[];
Class_Descriptor cd_S1095C2 = {  "S1095C2", // class name
  bases_S1095C2, 2,
  &(vtc_S1095C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S1095C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1095C2),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  S1095C1  : S1095C2 {
  int s1095c1f0;
  virtual void  v1(); // _ZN7S1095C12v1Ev
  virtual void  v2(); // _ZN7S1095C12v2Ev
  virtual void  v3(); // _ZN7S1095C12v3Ev
  ~S1095C1(); // tgen
  S1095C1(); // tgen
};
//SIG(1 S1095C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v4 v5 v6 v7 v8 v9 v10 FC5{ m Fp} FC6{ m Fp} FC6 FC7{ m Fi FC8{ BC9{ m Fp Fi}}} Fc FC10{ m FC11{ m Fi[2]} FC12{ m Fi[2]}} FC13{ m FC11 FC12} Fp FC13 FC13 Fc[5]} v1 v2 v3 Fi}


void  S1095C1 ::v1(){vfunc_called(this, "_ZN7S1095C12v1Ev");}
void  S1095C1 ::v2(){vfunc_called(this, "_ZN7S1095C12v2Ev");}
void  S1095C1 ::v3(){vfunc_called(this, "_ZN7S1095C12v3Ev");}
S1095C1 ::~S1095C1(){ note_dtor("S1095C1", this);} // tgen
S1095C1 ::S1095C1(){ note_ctor("S1095C1", this);} // tgen

static void Test_S1095C1()
{
  extern Class_Descriptor cd_S1095C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,30)];
    init_test(&cd_S1095C1, buf);
    S1095C1 *dp, &lv = *(dp=new (buf) S1095C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,116), "sizeof(S1095C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1095C1)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1095C3*)(S1095C2*), ABISELECT(8,4), "S1095C1");
    check_base_class_offset(lv, (S1095C3*)(S1095C2*), ABISELECT(8,4), "S1095C1");
    check_base_class_offset(lv, (S1095C2*), 0, "S1095C1");
    check_field_offset(lv, s1095c1f0, ABISELECT(152,112), "S1095C1.s1095c1f0");
    test_class_info(&lv, &cd_S1095C1);
    dp->~S1095C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1095C1(Test_S1095C1, "S1095C1", ABISELECT(160,116));

#else // __cplusplus

extern void _ZN7S1095C1C1Ev();
extern void _ZN7S1095C1D1Ev();
Name_Map name_map_S1095C1[] = {
  NSPAIR(_ZN7S1095C1C1Ev),
  NSPAIR(_ZN7S1095C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1095C3;
extern VTBL_ENTRY _ZTI7S1095C3[];
extern Class_Descriptor cd_S1095C2;
extern VTBL_ENTRY _ZTI7S1095C2[];
extern  VTBL_ENTRY _ZTV7S1095C2[];
static Base_Class bases_S1095C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1095C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1095C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1095C1[];
extern void _ZN7S1095C1D1Ev();
extern void _ZN7S1095C1D0Ev();
extern void _ZN7S1095C22v4Ev();
extern void _ZN7S1095C22v5Ev();
extern void _ZN7S1095C22v6Ev();
extern void _ZN7S1095C22v7Ev();
extern void _ZN7S1095C22v8Ev();
extern void _ZN7S1095C22v9Ev();
extern void _ZN7S1095C23v10Ev();
extern void _ZN7S1095C12v1Ev();
extern void _ZN7S1095C12v2Ev();
extern void _ZN7S1095C12v3Ev();
static  VTBL_ENTRY vtc_S1095C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1095C1[0]),
  (VTBL_ENTRY)&_ZN7S1095C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1095C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1095C22v4Ev,
  (VTBL_ENTRY)&_ZN7S1095C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1095C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1095C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1095C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1095C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1095C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1095C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1095C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1095C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1095C1[];
extern  VTBL_ENTRY _ZTV7S1095C1[];
Class_Descriptor cd_S1095C1 = {  "S1095C1", // class name
  bases_S1095C1, 3,
  &(vtc_S1095C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,116), // object size
  NSPAIRA(_ZTI7S1095C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1095C1),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  S1096C3  : S3221C8_nt {
};
//SIG(-1 S1096C3) C1{ BC2{ m Fi}}



static void Test_S1096C3()
{
  extern Class_Descriptor cd_S1096C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1096C3, buf);
    S1096C3 &lv = *(new (buf) S1096C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1096C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1096C3)");
    check_base_class_offset(lv, (S3221C8_nt*), 0, "S1096C3");
    test_class_info(&lv, &cd_S1096C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1096C3(Test_S1096C3, "S1096C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S1096C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1096C3[];
Class_Descriptor cd_S1096C3 = {  "S1096C3", // class name
  bases_S1096C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1096C3),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  S1096C2  : S1096C3 {
  ::S2632C18_nt s1096c2f0;
  ::S1098C5_nt s1096c2f1;
  ::S1098C5_nt s1096c2f2;
  ::S2632C13 s1096c2f3;
  char s1096c2f4;
  ::S1098C10_nt s1096c2f5;
  ::S1093C13 s1096c2f6;
  void *s1096c2f7;
  ::S1093C13 s1096c2f8;
  ::S1093C13 s1096c2f9;
  char s1096c2f10[5];
  virtual  ~S1096C2(); // _ZN7S1096C2D1Ev
  virtual void  v4(); // _ZN7S1096C22v4Ev
  virtual void  v5(); // _ZN7S1096C22v5Ev
  virtual void  v6(); // _ZN7S1096C22v6Ev
  virtual void  v7(); // _ZN7S1096C22v7Ev
  virtual void  v8(); // _ZN7S1096C22v8Ev
  virtual void  v9(); // _ZN7S1096C22v9Ev
  virtual void  v10(); // _ZN7S1096C23v10Ev
  S1096C2(); // tgen
};
//SIG(-1 S1096C2) C1{ BC2{ BC3{ m Fi}} vd v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp} FC5{ m Fp} FC5 FC6{ m Fi FC7{ BC8{ m Fp Fi}}} Fc FC9{ m FC10{ m Fi[2]} FC11{ m Fi[2]}} FC12{ m FC10 FC11} Fp FC12 FC12 Fc[5]}


 S1096C2 ::~S1096C2(){ note_dtor("S1096C2", this);}
void  S1096C2 ::v4(){vfunc_called(this, "_ZN7S1096C22v4Ev");}
void  S1096C2 ::v5(){vfunc_called(this, "_ZN7S1096C22v5Ev");}
void  S1096C2 ::v6(){vfunc_called(this, "_ZN7S1096C22v6Ev");}
void  S1096C2 ::v7(){vfunc_called(this, "_ZN7S1096C22v7Ev");}
void  S1096C2 ::v8(){vfunc_called(this, "_ZN7S1096C22v8Ev");}
void  S1096C2 ::v9(){vfunc_called(this, "_ZN7S1096C22v9Ev");}
void  S1096C2 ::v10(){vfunc_called(this, "_ZN7S1096C23v10Ev");}
S1096C2 ::S1096C2(){ note_ctor("S1096C2", this);} // tgen

static void Test_S1096C2()
{
  extern Class_Descriptor cd_S1096C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S1096C2, buf);
    S1096C2 *dp, &lv = *(dp=new (buf) S1096C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S1096C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1096C2)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1096C3*), ABISELECT(8,4), "S1096C2");
    check_base_class_offset(lv, (S1096C3*), ABISELECT(8,4), "S1096C2");
    check_field_offset(lv, s1096c2f0, ABISELECT(16,8), "S1096C2.s1096c2f0");
    check_field_offset(lv, s1096c2f1, ABISELECT(24,12), "S1096C2.s1096c2f1");
    check_field_offset(lv, s1096c2f2, ABISELECT(32,16), "S1096C2.s1096c2f2");
    check_field_offset(lv, s1096c2f3, ABISELECT(40,20), "S1096C2.s1096c2f3");
    check_field_offset(lv, s1096c2f4, ABISELECT(64,32), "S1096C2.s1096c2f4");
    check_field_offset(lv, s1096c2f5, ABISELECT(68,36), "S1096C2.s1096c2f5");
    check_field_offset(lv, s1096c2f6, ABISELECT(84,52), "S1096C2.s1096c2f6");
    check_field_offset(lv, s1096c2f7, ABISELECT(104,68), "S1096C2.s1096c2f7");
    check_field_offset(lv, s1096c2f8, ABISELECT(112,72), "S1096C2.s1096c2f8");
    check_field_offset(lv, s1096c2f9, ABISELECT(128,88), "S1096C2.s1096c2f9");
    check_field_offset(lv, s1096c2f10, ABISELECT(144,104), "S1096C2.s1096c2f10");
    test_class_info(&lv, &cd_S1096C2);
    dp->~S1096C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1096C2(Test_S1096C2, "S1096C2", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S1096C2C1Ev();
extern void _ZN7S1096C2D1Ev();
Name_Map name_map_S1096C2[] = {
  NSPAIR(_ZN7S1096C2C1Ev),
  NSPAIR(_ZN7S1096C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1096C3;
extern VTBL_ENTRY _ZTI7S1096C3[];
static Base_Class bases_S1096C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1096C3,    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 _ZTI7S1096C2[];
extern void _ZN7S1096C2D1Ev();
extern void _ZN7S1096C2D0Ev();
extern void _ZN7S1096C22v4Ev();
extern void _ZN7S1096C22v5Ev();
extern void _ZN7S1096C22v6Ev();
extern void _ZN7S1096C22v7Ev();
extern void _ZN7S1096C22v8Ev();
extern void _ZN7S1096C22v9Ev();
extern void _ZN7S1096C23v10Ev();
static  VTBL_ENTRY vtc_S1096C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1096C2[0]),
  (VTBL_ENTRY)&_ZN7S1096C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1096C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1096C22v4Ev,
  (VTBL_ENTRY)&_ZN7S1096C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1096C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1096C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1096C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1096C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1096C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S1096C2[];
extern  VTBL_ENTRY _ZTV7S1096C2[];
Class_Descriptor cd_S1096C2 = {  "S1096C2", // class name
  bases_S1096C2, 2,
  &(vtc_S1096C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S1096C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1096C2),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  S1096C1  : S1096C2 {
  virtual void  v1(); // _ZN7S1096C12v1Ev
  virtual void  v2(); // _ZN7S1096C12v2Ev
  virtual void  v3(); // _ZN7S1096C12v3Ev
  ~S1096C1(); // tgen
  S1096C1(); // tgen
};
//SIG(1 S1096C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v4 v5 v6 v7 v8 v9 v10 FC5{ m Fp} FC6{ m Fp} FC6 FC7{ m Fi FC8{ BC9{ m Fp Fi}}} Fc FC10{ m FC11{ m Fi[2]} FC12{ m Fi[2]}} FC13{ m FC11 FC12} Fp FC13 FC13 Fc[5]} v1 v2 v3}


void  S1096C1 ::v1(){vfunc_called(this, "_ZN7S1096C12v1Ev");}
void  S1096C1 ::v2(){vfunc_called(this, "_ZN7S1096C12v2Ev");}
void  S1096C1 ::v3(){vfunc_called(this, "_ZN7S1096C12v3Ev");}
S1096C1 ::~S1096C1(){ note_dtor("S1096C1", this);} // tgen
S1096C1 ::S1096C1(){ note_ctor("S1096C1", this);} // tgen

static void Test_S1096C1()
{
  extern Class_Descriptor cd_S1096C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S1096C1, buf);
    S1096C1 *dp, &lv = *(dp=new (buf) S1096C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S1096C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1096C1)");
    check_base_class_offset(lv, (S3221C8_nt*)(S1096C3*)(S1096C2*), ABISELECT(8,4), "S1096C1");
    check_base_class_offset(lv, (S1096C3*)(S1096C2*), ABISELECT(8,4), "S1096C1");
    check_base_class_offset(lv, (S1096C2*), 0, "S1096C1");
    test_class_info(&lv, &cd_S1096C1);
    dp->~S1096C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1096C1(Test_S1096C1, "S1096C1", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S1096C1C1Ev();
extern void _ZN7S1096C1D1Ev();
Name_Map name_map_S1096C1[] = {
  NSPAIR(_ZN7S1096C1C1Ev),
  NSPAIR(_ZN7S1096C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S1096C3;
extern VTBL_ENTRY _ZTI7S1096C3[];
extern Class_Descriptor cd_S1096C2;
extern VTBL_ENTRY _ZTI7S1096C2[];
extern  VTBL_ENTRY _ZTV7S1096C2[];
static Base_Class bases_S1096C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_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_S1096C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1096C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1096C1[];
extern void _ZN7S1096C1D1Ev();
extern void _ZN7S1096C1D0Ev();
extern void _ZN7S1096C22v4Ev();
extern void _ZN7S1096C22v5Ev();
extern void _ZN7S1096C22v6Ev();
extern void _ZN7S1096C22v7Ev();
extern void _ZN7S1096C22v8Ev();
extern void _ZN7S1096C22v9Ev();
extern void _ZN7S1096C23v10Ev();
extern void _ZN7S1096C12v1Ev();
extern void _ZN7S1096C12v2Ev();
extern void _ZN7S1096C12v3Ev();
static  VTBL_ENTRY vtc_S1096C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1096C1[0]),
  (VTBL_ENTRY)&_ZN7S1096C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1096C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1096C22v4Ev,
  (VTBL_ENTRY)&_ZN7S1096C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1096C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1096C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1096C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1096C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1096C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1096C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1096C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1096C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1096C1[];
extern  VTBL_ENTRY _ZTV7S1096C1[];
Class_Descriptor cd_S1096C1 = {  "S1096C1", // class name
  bases_S1096C1, 3,
  &(vtc_S1096C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S1096C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1096C1),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  S19884C4  : virtual S5643C3_nt , virtual S5643C2 , virtual S16130C17_nt {
  ::S5643C2 s19884c4f0[10];
  ~S19884C4(); // tgen
  S19884C4(); // tgen
};
//SIG(-1 S19884C4) C1{ VBC2{ m FD} VBC3{ m FC2[7]} VBC4{ m} FC3[10]}


S19884C4 ::~S19884C4(){ note_dtor("S19884C4", this);} // tgen
S19884C4 ::S19884C4(){ note_ctor("S19884C4", this);} // tgen

static void Test_S19884C4()
{
  extern Class_Descriptor cd_S19884C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(80,236)];
    init_test(&cd_S19884C4, buf);
    S19884C4 *dp, &lv = *(dp=new (buf) S19884C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1264,940), "sizeof(S19884C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19884C4)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(1136,844), "S19884C4");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(1152,856), "S19884C4");
    check_base_class_offset(lv, (S16130C17_nt*), 0, "S19884C4");
    check_field_offset(lv, s19884c4f0, ABISELECT(16,4), "S19884C4.s19884c4f0");
    test_class_info(&lv, &cd_S19884C4);
    dp->~S19884C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19884C4(Test_S19884C4, "S19884C4", ABISELECT(1264,940));

#else // __cplusplus

extern void _ZN8S19884C4C1Ev();
extern void _ZN8S19884C4D1Ev();
Name_Map name_map_S19884C4[] = {
  NSPAIR(_ZN8S19884C4C1Ev),
  NSPAIR(_ZN8S19884C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
static Base_Class bases_S19884C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(1136,844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5643C2,    ABISELECT(1152,856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19884C4[];
static  VTBL_ENTRY vtc_S19884C4[] = {
  0,
  ABISELECT(1152,856),
  ABISELECT(1136,844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C4[0]),
};
extern VTBL_ENTRY _ZTV8S19884C4[];
static  VTT_ENTRY vtt_S19884C4[] = {
  {&(_ZTV8S19884C4[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S19884C4[];
extern  VTBL_ENTRY _ZTV8S19884C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C4[];
Class_Descriptor cd_S19884C4 = {  "S19884C4", // class name
  bases_S19884C4, 3,
  &(vtc_S19884C4[0]), // expected_vtbl_contents
  &(vtt_S19884C4[0]), // expected_vtt_contents
  ABISELECT(1264,940), // object size
  NSPAIRA(_ZTI8S19884C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19884C4),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19884C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19884C7  : S5643C3_nt , virtual S16130C17_nt , virtual S5643C2 {
  virtual  ~S19884C7(); // _ZN8S19884C7D2Ev
  S19884C7(); // tgen
};
//SIG(-1 S19884C7) C1{ BC2{ m FD} VBC3{ m} VBC4{ m FC2[7]} vd}


 S19884C7 ::~S19884C7(){ note_dtor("S19884C7", this);}
S19884C7 ::S19884C7(){ note_ctor("S19884C7", this);} // tgen

static void Test_S19884C7()
{
  extern Class_Descriptor cd_S19884C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,26)];
    init_test(&cd_S19884C7, buf);
    S19884C7 *dp, &lv = *(dp=new (buf) S19884C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S19884C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19884C7)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(16,4), "S19884C7");
    check_base_class_offset(lv, (S16130C17_nt*), 0, "S19884C7");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(32,16), "S19884C7");
    test_class_info(&lv, &cd_S19884C7);
    dp->~S19884C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19884C7(Test_S19884C7, "S19884C7", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN8S19884C7C1Ev();
extern void _ZN8S19884C7D2Ev();
Name_Map name_map_S19884C7[] = {
  NSPAIR(_ZN8S19884C7C1Ev),
  NSPAIR(_ZN8S19884C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
static Base_Class bases_S19884C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    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_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5643C2,    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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19884C7[];
extern void _ZN8S19884C7D1Ev();
extern void _ZN8S19884C7D0Ev();
static  VTBL_ENTRY vtc_S19884C7[] = {
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C7[0]),
  (VTBL_ENTRY)&_ZN8S19884C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19884C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S19884C7[];
static  VTT_ENTRY vtt_S19884C7[] = {
  {&(_ZTV8S19884C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19884C7[];
extern  VTBL_ENTRY _ZTV8S19884C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C7[];
Class_Descriptor cd_S19884C7 = {  "S19884C7", // class name
  bases_S19884C7, 3,
  &(vtc_S19884C7[0]), // expected_vtbl_contents
  &(vtt_S19884C7[0]), // expected_vtt_contents
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI8S19884C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19884C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19884C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19884C8  : S5643C3_nt , S5643C2 , virtual S16130C17_nt {
  ~S19884C8(); // tgen
  S19884C8(); // tgen
};
//SIG(-1 S19884C8) C1{ BC2{ m FD} BC3{ m FC2[7]} VBC4{ m}}


S19884C8 ::~S19884C8(){ note_dtor("S19884C8", this);} // tgen
S19884C8 ::S19884C8(){ note_ctor("S19884C8", this);} // tgen

static void Test_S19884C8()
{
  extern Class_Descriptor cd_S19884C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,26)];
    init_test(&cd_S19884C8, buf);
    S19884C8 *dp, &lv = *(dp=new (buf) S19884C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S19884C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19884C8)");
    check_base_class_offset(lv, (S5643C3_nt*), ABISELECT(16,4), "S19884C8");
    check_base_class_offset(lv, (S5643C2*), ABISELECT(32,16), "S19884C8");
    check_base_class_offset(lv, (S16130C17_nt*), 0, "S19884C8");
    test_class_info(&lv, &cd_S19884C8);
    dp->~S19884C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19884C8(Test_S19884C8, "S19884C8", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN8S19884C8C1Ev();
extern void _ZN8S19884C8D1Ev();
Name_Map name_map_S19884C8[] = {
  NSPAIR(_ZN8S19884C8C1Ev),
  NSPAIR(_ZN8S19884C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
static Base_Class bases_S19884C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    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_S5643C2,    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_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19884C8[];
static  VTBL_ENTRY vtc_S19884C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C8[0]),
};
extern VTBL_ENTRY _ZTV8S19884C8[];
static  VTT_ENTRY vtt_S19884C8[] = {
  {&(_ZTV8S19884C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19884C8[];
extern  VTBL_ENTRY _ZTV8S19884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C8[];
Class_Descriptor cd_S19884C8 = {  "S19884C8", // class name
  bases_S19884C8, 3,
  &(vtc_S19884C8[0]), // expected_vtbl_contents
  &(vtt_S19884C8[0]), // expected_vtt_contents
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI8S19884C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19884C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19884C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19884C3  : virtual S16130C17_nt , S19884C4 , S19884C7 , S19884C8 {
  ~S19884C3(); // tgen
  S19884C3(); // tgen
};
//SIG(-1 S19884C3) C1{ VBC2{ m} BC3{ VBC4{ m FD} VBC5{ m FC4[7]} VBC2 FC5[10]} BC6{ BC4 VBC2 VBC5 vd} BC7{ BC4 BC5 VBC2}}


S19884C3 ::~S19884C3(){ note_dtor("S19884C3", this);} // tgen
S19884C3 ::S19884C3(){ note_ctor("S19884C3", this);} // tgen

static void Test_S19884C3()
{
  extern Class_Descriptor cd_S19884C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(91,265)];
    init_test(&cd_S19884C3, buf);
    S19884C3 *dp, &lv = *(dp=new (buf) S19884C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1440,1056), "sizeof(S19884C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19884C3)");
    check_base_class_offset(lv, (S16130C17_nt*), 0, "S19884C3");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C4*), 0, "S19884C3");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C7*), 0, "S19884C3");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C8*), 0, "S19884C3");
    check_base_class_offset(lv, (S5643C3_nt*)(S19884C4*), ABISELECT(1312,960), "S19884C3");
    check_base_class_offset(lv, (S5643C2*)(S19884C4*), ABISELECT(1328,972), "S19884C3");
    check_base_class_offset(lv, (S5643C2*)(S19884C7*), ABISELECT(1328,972), "S19884C3");
    check_base_class_offset(lv, (S19884C4*), 0, "S19884C3");
    check_base_class_offset(lv, (S5643C3_nt*)(S19884C7*), ABISELECT(1152,848), "S19884C3");
    check_base_class_offset(lv, (S19884C7*), ABISELECT(1136,844), "S19884C3");
    check_base_class_offset(lv, (S5643C3_nt*)(S19884C8*), ABISELECT(1184,864), "S19884C3");
    check_base_class_offset(lv, (S5643C2*)(S19884C8*), ABISELECT(1200,876), "S19884C3");
    check_base_class_offset(lv, (S19884C8*), ABISELECT(1168,860), "S19884C3");
    test_class_info(&lv, &cd_S19884C3);
    dp->~S19884C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19884C3(Test_S19884C3, "S19884C3", ABISELECT(1440,1056));

#else // __cplusplus

extern void _ZN8S19884C3C1Ev();
extern void _ZN8S19884C3D1Ev();
Name_Map name_map_S19884C3[] = {
  NSPAIR(_ZN8S19884C3C1Ev),
  NSPAIR(_ZN8S19884C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S19884C4;
extern VTBL_ENTRY _ZTI8S19884C4[];
extern  VTBL_ENTRY _ZTV8S19884C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S19884C7;
extern VTBL_ENTRY _ZTI8S19884C7[];
extern  VTBL_ENTRY _ZTV8S19884C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C7[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S19884C8;
extern VTBL_ENTRY _ZTI8S19884C8[];
extern  VTBL_ENTRY _ZTV8S19884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C8[];
static Base_Class bases_S19884C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5643C3_nt,    ABISELECT(1312,960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1328,972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C4,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C3_nt,    ABISELECT(1152,848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C7,    ABISELECT(1136,844), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5643C3_nt,    ABISELECT(1184,864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1200,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C8,    ABISELECT(1168,860), //bcp->offset
    13, //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 _ZTI8S19884C3[];
extern void _ZN8S19884C3D1Ev();
extern void _ZN8S19884C3D0Ev();
extern void ABISELECT(_ZThn1136_N8S19884C3D1Ev,_ZThn844_N8S19884C3D1Ev)();
extern void ABISELECT(_ZThn1136_N8S19884C3D0Ev,_ZThn844_N8S19884C3D0Ev)();
static  VTBL_ENTRY vtc_S19884C3[] = {
  0,
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C3[0]),
  (VTBL_ENTRY)&_ZN8S19884C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19884C3D0Ev,
  ABISELECT(192,128),
  ABISELECT(-1136,-844),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S19884C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S19884C3D1Ev,_ZThn844_N8S19884C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S19884C3D0Ev,_ZThn844_N8S19884C3D0Ev),
  ABISELECT(-1168,-860),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S19884C3[0]),
};
extern VTBL_ENTRY _ZTV8S19884C3[];
static  VTBL_ENTRY _tg__ZTV8S19884C4__8S19884C3[] = {
  0,
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C4[0]),
};
extern void _ZN8S19884C7D1Ev();
extern void _ZN8S19884C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19884C7__8S19884C3[] = {
  ABISELECT(192,128),
  ABISELECT(-1136,-844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C7[0]),
  (VTBL_ENTRY)&_ZN8S19884C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19884C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19884C8__8S19884C3[] = {
  ABISELECT(-1168,-860),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C8[0]),
};
static  VTT_ENTRY vtt_S19884C3[] = {
  {&(_ZTV8S19884C3[5]),  5,16},
  {&(_tg__ZTV8S19884C4__8S19884C3[5]),  5,5},
  {&(_tg__ZTV8S19884C7__8S19884C3[4]),  4,6},
  {&(_tg__ZTV8S19884C8__8S19884C3[3]),  3,3},
  {&(_ZTV8S19884C3[11]),  11,16},
  {&(_ZTV8S19884C3[16]),  16,16},
};
extern VTBL_ENTRY _ZTI8S19884C3[];
extern  VTBL_ENTRY _ZTV8S19884C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C3[];
Class_Descriptor cd_S19884C3 = {  "S19884C3", // class name
  bases_S19884C3, 9,
  &(vtc_S19884C3[0]), // expected_vtbl_contents
  &(vtt_S19884C3[0]), // expected_vtt_contents
  ABISELECT(1440,1056), // object size
  NSPAIRA(_ZTI8S19884C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19884C3),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19884C3),6, //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  S19884C10  : virtual S19884C8 , virtual S19884C7 , S5408C7_nt , virtual S19884C3 {
  virtual  ~S19884C10(); // _ZN9S19884C10D2Ev
  S19884C10(); // tgen
};
//SIG(-1 S19884C10) C1{ VBC2{ BC3{ m FD} BC4{ m FC3[7]} VBC5{ m}} VBC6{ BC3 VBC5 VBC4 vd} BC7{ m} VBC8{ VBC5 BC9{ VBC3 VBC4 VBC5 FC4[10]} BC6 BC2} vd}


 S19884C10 ::~S19884C10(){ note_dtor("S19884C10", this);}
S19884C10 ::S19884C10(){ note_ctor("S19884C10", this);} // tgen

static void Test_S19884C10()
{
  extern Class_Descriptor cd_S19884C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,295)];
    init_test(&cd_S19884C10, buf);
    S19884C10 *dp, &lv = *(dp=new (buf) S19884C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,1176), "sizeof(S19884C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19884C10)");
    /*is_ambiguous_... S19884C10::S19884C8 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S19884C8*), ABISELECT(32,8), "S19884C10");
    /*is_ambiguous_... S19884C10::S19884C8 */ AMB_check_base_class_offset(lv, (S5643C2*)(S19884C8*), ABISELECT(48,20), "S19884C10");
    /*is_ambiguous_... S19884C10::S19884C8 */ AMB_check_base_class_offset(lv, (S16130C17_nt*)(S19884C8*), 0, "S19884C10");
    /*is_ambiguous_... S19884C10::S19884C7 */ AMB_check_base_class_offset(lv, (S16130C17_nt*)(S19884C7*), 0, "S19884C10");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C3*), 0, "S19884C10");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C4*)(S19884C3*), 0, "S19884C10");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C7*)(S19884C3*), 0, "S19884C10");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C8*)(S19884C3*), 0, "S19884C10");
    /*is_ambiguous_... S19884C10::S19884C8 */ AMB_check_base_class_offset(lv, (S19884C8*), ABISELECT(16,4), "S19884C10");
    /*is_ambiguous_... S19884C10::S19884C7 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S19884C7*), ABISELECT(176,108), "S19884C10");
    /*is_ambiguous_... S19884C10::S19884C7 */ AMB_check_base_class_offset(lv, (S5643C2*)(S19884C7*), ABISELECT(192,120), "S19884C10");
    check_base_class_offset(lv, (S5643C2*)(S19884C4*)(S19884C3*), ABISELECT(192,120), "S19884C10");
    check_base_class_offset(lv, (S5643C2*)(S19884C7*)(S19884C3*), ABISELECT(192,120), "S19884C10");
    /*is_ambiguous_... S19884C10::S19884C7 */ AMB_check_base_class_offset(lv, (S19884C7*), ABISELECT(160,104), "S19884C10");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S19884C10");
    check_base_class_offset(lv, (S5643C3_nt*)(S19884C4*)(S19884C3*), ABISELECT(1616,1164), "S19884C10");
    check_base_class_offset(lv, (S19884C4*)(S19884C3*), ABISELECT(304,204), "S19884C10");
    check_base_class_offset(lv, (S5643C3_nt*)(S19884C7*)(S19884C3*), ABISELECT(1456,1052), "S19884C10");
    check_base_class_offset(lv, (S19884C7*)(S19884C3*), ABISELECT(1440,1048), "S19884C10");
    check_base_class_offset(lv, (S5643C3_nt*)(S19884C8*)(S19884C3*), ABISELECT(1488,1068), "S19884C10");
    check_base_class_offset(lv, (S5643C2*)(S19884C8*)(S19884C3*), ABISELECT(1504,1080), "S19884C10");
    check_base_class_offset(lv, (S19884C8*)(S19884C3*), ABISELECT(1472,1064), "S19884C10");
    check_base_class_offset(lv, (S19884C3*), ABISELECT(304,204), "S19884C10");
    test_class_info(&lv, &cd_S19884C10);
    dp->~S19884C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19884C10(Test_S19884C10, "S19884C10", ABISELECT(1632,1176));

#else // __cplusplus

extern void _ZN9S19884C10C1Ev();
extern void _ZN9S19884C10D2Ev();
Name_Map name_map_S19884C10[] = {
  NSPAIR(_ZN9S19884C10C1Ev),
  NSPAIR(_ZN9S19884C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
extern Class_Descriptor cd_S19884C8;
extern VTBL_ENTRY _ZTI8S19884C8[];
extern  VTBL_ENTRY _ZTV8S19884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C8[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S19884C7;
extern VTBL_ENTRY _ZTI8S19884C7[];
extern  VTBL_ENTRY _ZTV8S19884C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C7[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S19884C4;
extern VTBL_ENTRY _ZTI8S19884C4[];
extern  VTBL_ENTRY _ZTV8S19884C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S19884C7;
extern VTBL_ENTRY _ZTI8S19884C7[];
extern  VTBL_ENTRY _ZTV8S19884C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C7[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S19884C8;
extern VTBL_ENTRY _ZTI8S19884C8[];
extern  VTBL_ENTRY _ZTV8S19884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C8[];
extern Class_Descriptor cd_S19884C3;
extern VTBL_ENTRY _ZTI8S19884C3[];
extern  VTBL_ENTRY _ZTV8S19884C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C3[];
static Base_Class bases_S19884C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(32,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_S5643C2,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C8,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(176,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
    6, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(192,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
    6, //immediately_derived
  0, 1},
  {&cd_S19884C7,    ABISELECT(160,104), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5643C3_nt,    ABISELECT(1616,1164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C4,    ABISELECT(304,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    15, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1456,1052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C7,    ABISELECT(1440,1048), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1488,1068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1504,1080), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C8,    ABISELECT(1472,1064), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19884C3,    ABISELECT(304,204), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19884C10[];
extern void _ZN9S19884C10D1Ev();
extern void _ZN9S19884C10D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S19884C10D1Ev,_ZTv0_n20_N9S19884C10D1Ev)();
extern void ABISELECT(_ZThn160_N9S19884C10D1Ev,_ZThn104_N9S19884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19884C10D0Ev,_ZTv0_n20_N9S19884C10D0Ev)();
extern void ABISELECT(_ZThn160_N9S19884C10D0Ev,_ZThn104_N9S19884C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19884C10D1Ev,_ZTv0_n24_N9S19884C10D1Ev)();
extern void ABISELECT(_ZThn304_N9S19884C10D1Ev,_ZThn204_N9S19884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19884C10D0Ev,_ZTv0_n24_N9S19884C10D0Ev)();
extern void ABISELECT(_ZThn304_N9S19884C10D0Ev,_ZThn204_N9S19884C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n48_N9S19884C10D1Ev,_ZTvn844_n24_N9S19884C10D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N9S19884C10D0Ev,_ZTvn844_n24_N9S19884C10D0Ev)();
static  VTBL_ENTRY vtc_S19884C10[] = {
  ABISELECT(1616,1164),
  ABISELECT(304,204),
  ABISELECT(192,120),
  ABISELECT(160,104),
  0,
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
  (VTBL_ENTRY)&_ZN9S19884C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19884C10D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
  ABISELECT(-160,-104),
  ABISELECT(32,16),
  ABISELECT(-160,-104),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19884C10D1Ev,_ZTv0_n20_N9S19884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19884C10D0Ev,_ZTv0_n20_N9S19884C10D0Ev),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1312,960),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19884C10D1Ev,_ZTv0_n24_N9S19884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19884C10D0Ev,_ZTv0_n24_N9S19884C10D0Ev),
  ABISELECT(-1248,-928),
  ABISELECT(-1440,-1048),
  ABISELECT(-1440,-1048),
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N9S19884C10D1Ev,_ZTvn844_n24_N9S19884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N9S19884C10D0Ev,_ZTvn844_n24_N9S19884C10D0Ev),
  ABISELECT(-1472,-1064),
  ABISELECT(-1472,-1064),
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
};
extern VTBL_ENTRY _ZTV9S19884C10[];
static  VTBL_ENTRY _tg__ZTV8S19884C8__9S19884C10[] = {
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C8[0]),
};
extern void _ZN8S19884C7D1Ev();
extern void _ZN8S19884C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19884C7__9S19884C10[] = {
  ABISELECT(32,16),
  ABISELECT(-160,-104),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C7[0]),
  (VTBL_ENTRY)&_ZN8S19884C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19884C7D0Ev,
};
extern void _ZN8S19884C3D1Ev();
extern void _ZN8S19884C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19884C3__9S19884C10[] = {
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C3[0]),
  (VTBL_ENTRY)&_ZN8S19884C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19884C3D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19884C48S19884C3__9S19884C10[] = {
  ABISELECT(-304,-204),
  ABISELECT(-112,-84),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C4[0]),
};
extern void _ZN8S19884C7D1Ev();
extern void _ZN8S19884C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19884C78S19884C3__A1__9S19884C10[] = {
  ABISELECT(-1248,-928),
  ABISELECT(-1440,-1048),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C7[0]),
  (VTBL_ENTRY)&_ZN8S19884C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19884C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19884C88S19884C3__A1__9S19884C10[] = {
  ABISELECT(-1472,-1064),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C8[0]),
};
extern void ABISELECT(_ZThn1136_N8S19884C3D1Ev,_ZThn844_N8S19884C3D1Ev)();
extern void ABISELECT(_ZThn1136_N8S19884C3D0Ev,_ZThn844_N8S19884C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19884C7__8S19884C3__9S19884C10[] = {
  ABISELECT(-1248,-928),
  ABISELECT(-1440,-1048),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S19884C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S19884C3D1Ev,_ZThn844_N8S19884C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S19884C3D0Ev,_ZThn844_N8S19884C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19884C8__8S19884C3__9S19884C10[] = {
  ABISELECT(-1472,-1064),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S19884C3[0]),
};
static  VTT_ENTRY vtt_S19884C10[] = {
  {&(_ZTV9S19884C10[8]),  8,37},
  {&(_ZTV9S19884C10[13]),  13,37},
  {&(_ZTV9S19884C10[18]),  18,37},
  {&(_ZTV9S19884C10[26]),  26,37},
  {&(_ZTV9S19884C10[32]),  32,37},
  {&(_ZTV9S19884C10[37]),  37,37},
  {&(_tg__ZTV8S19884C8__9S19884C10[3]),  3,3},
  {&(_tg__ZTV8S19884C7__9S19884C10[4]),  4,6},
  {&(_tg__ZTV8S19884C3__9S19884C10[5]),  5,7},
  {&(_tg__ZTV8S19884C48S19884C3__9S19884C10[5]),  5,5},
  {&(_tg__ZTV8S19884C78S19884C3__A1__9S19884C10[4]),  4,6},
  {&(_tg__ZTV8S19884C88S19884C3__A1__9S19884C10[3]),  3,3},
  {&(_tg__ZTV8S19884C7__8S19884C3__9S19884C10[4]),  4,6},
  {&(_tg__ZTV8S19884C8__8S19884C3__9S19884C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19884C10[];
extern  VTBL_ENTRY _ZTV9S19884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19884C10[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19884C10D0Ev,_ZTv0_n24_N9S19884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19884C10D0Ev,_ZThn204_N9S19884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19884C10D1Ev,_ZTv0_n24_N9S19884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19884C10D1Ev,_ZThn204_N9S19884C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19884C10D0Ev,_ZTv0_n20_N9S19884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19884C10D0Ev,_ZThn104_N9S19884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19884C10D1Ev,_ZTv0_n20_N9S19884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19884C10D1Ev,_ZThn104_N9S19884C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19884C10 = {  "S19884C10", // class name
  bases_S19884C10, 16,
  &(vtc_S19884C10[0]), // expected_vtbl_contents
  &(vtt_S19884C10[0]), // expected_vtt_contents
  ABISELECT(1632,1176), // object size
  NSPAIRA(_ZTI9S19884C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19884C10),37, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19884C10),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19884C12  : virtual S5643C2 , virtual S19884C4 , virtual S19884C8 , S16130C17_nt {
  ::S16130C17_nt s19884c12f0;
  ~S19884C12(); // tgen
  S19884C12(); // tgen
};
//SIG(-1 S19884C12) C1{ VBC2{ m FC3{ m FD}[7]} VBC4{ VBC3 VBC2 VBC5{ m} FC2[10]} VBC6{ BC3 BC2 VBC5} BC5 FC5}


S19884C12 ::~S19884C12(){ note_dtor("S19884C12", this);} // tgen
S19884C12 ::S19884C12(){ note_ctor("S19884C12", this);} // tgen

static void Test_S19884C12()
{
  extern Class_Descriptor cd_S19884C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,263)];
    init_test(&cd_S19884C12, buf);
    S19884C12 *dp, &lv = *(dp=new (buf) S19884C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1048), "sizeof(S19884C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19884C12)");
    /*is_ambiguous_... S19884C12::S5643C2 */ AMB_check_base_class_offset(lv, (S5643C2*), ABISELECT(16,8), "S19884C12");
    check_base_class_offset(lv, (S5643C2*)(S19884C4*), ABISELECT(16,8), "S19884C12");
    check_base_class_offset(lv, (S5643C3_nt*)(S19884C4*), ABISELECT(1264,936), "S19884C12");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C4*), ABISELECT(1280,948), "S19884C12");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C8*), ABISELECT(1280,948), "S19884C12");
    check_base_class_offset(lv, (S19884C4*), ABISELECT(128,92), "S19884C12");
    check_base_class_offset(lv, (S5643C3_nt*)(S19884C8*), ABISELECT(1296,952), "S19884C12");
    check_base_class_offset(lv, (S5643C2*)(S19884C8*), ABISELECT(1312,964), "S19884C12");
    check_base_class_offset(lv, (S19884C8*), ABISELECT(1280,948), "S19884C12");
    /*is_ambiguous_... S19884C12::S16130C17_nt */ AMB_check_base_class_offset(lv, (S16130C17_nt*), 0, "S19884C12");
    check_field_offset(lv, s19884c12f0, ABISELECT(8,4), "S19884C12.s19884c12f0");
    test_class_info(&lv, &cd_S19884C12);
    dp->~S19884C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19884C12(Test_S19884C12, "S19884C12", ABISELECT(1424,1048));

#else // __cplusplus

extern void _ZN9S19884C12C1Ev();
extern void _ZN9S19884C12D1Ev();
Name_Map name_map_S19884C12[] = {
  NSPAIR(_ZN9S19884C12C1Ev),
  NSPAIR(_ZN9S19884C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
extern Class_Descriptor cd_S19884C4;
extern VTBL_ENTRY _ZTI8S19884C4[];
extern  VTBL_ENTRY _ZTV8S19884C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S19884C8;
extern VTBL_ENTRY _ZTI8S19884C8[];
extern  VTBL_ENTRY _ZTV8S19884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C8[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
static Base_Class bases_S19884C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C2,    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, 1},
  {&cd_S5643C3_nt,    ABISELECT(1264,936), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S16130C17_nt,    ABISELECT(1280,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
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19884C4,    ABISELECT(128,92), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(1296,952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1312,964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C8,    ABISELECT(1280,948), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19884C12[];
static  VTBL_ENTRY vtc_S19884C12[] = {
  ABISELECT(1280,948),
  ABISELECT(1280,948),
  ABISELECT(1264,936),
  ABISELECT(128,92),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19884C12[0]),
  ABISELECT(1152,856),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI9S19884C12[0]),
  0,
  ABISELECT(-1280,-948),
  (VTBL_ENTRY)&(_ZTI9S19884C12[0]),
};
extern VTBL_ENTRY _ZTV9S19884C12[];
static  VTBL_ENTRY _tg__ZTV8S19884C4__9S19884C12[] = {
  ABISELECT(1152,856),
  ABISELECT(-112,-84),
  ABISELECT(1136,844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19884C8__9S19884C12[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C8[0]),
};
static  VTT_ENTRY vtt_S19884C12[] = {
  {&(_ZTV9S19884C12[7]),  7,15},
  {&(_ZTV9S19884C12[12]),  12,15},
  {&(_ZTV9S19884C12[15]),  15,15},
  {&(_tg__ZTV8S19884C4__9S19884C12[5]),  5,5},
  {&(_tg__ZTV8S19884C8__9S19884C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19884C12[];
extern  VTBL_ENTRY _ZTV9S19884C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19884C12[];
Class_Descriptor cd_S19884C12 = {  "S19884C12", // class name
  bases_S19884C12, 8,
  &(vtc_S19884C12[0]), // expected_vtbl_contents
  &(vtt_S19884C12[0]), // expected_vtt_contents
  ABISELECT(1424,1048), // object size
  NSPAIRA(_ZTI9S19884C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19884C12),15, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19884C12),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  S19884C9  : virtual S19884C7 , virtual S19884C10 , virtual S19884C12 , S16130C17_nt {
  virtual  ~S19884C9(); // _ZN8S19884C9D2Ev
  S19884C9(); // tgen
};
//SIG(-1 S19884C9) C1{ VBC2{ BC3{ m FD} VBC4{ m} VBC5{ m FC3[7]} vd} VBC6{ VBC7{ BC3 BC5 VBC4} VBC2 BC8{ m} VBC9{ VBC4 BC10{ VBC3 VBC5 VBC4 FC5[10]} BC2 BC7} vd} VBC11{ VBC5 VBC10 VBC7 BC4 FC4} BC4 vd}


 S19884C9 ::~S19884C9(){ note_dtor("S19884C9", this);}
S19884C9 ::S19884C9(){ note_ctor("S19884C9", this);} // tgen

static void Test_S19884C9()
{
  extern Class_Descriptor cd_S19884C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(175,508)];
    init_test(&cd_S19884C9, buf);
    S19884C9 *dp, &lv = *(dp=new (buf) S19884C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2784,2028), "sizeof(S19884C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19884C9)");
    /*is_ambiguous_... S19884C9::S19884C7 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S19884C7*), ABISELECT(32,8), "S19884C9");
    /*is_ambiguous_... S19884C9::S19884C7 */ AMB_check_base_class_offset(lv, (S16130C17_nt*)(S19884C7*), ABISELECT(48,20), "S19884C9");
    /*is_ambiguous_... S19884C9::S19884C8 */ AMB_check_base_class_offset(lv, (S16130C17_nt*)(S19884C8*), ABISELECT(48,20), "S19884C9");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C3*), ABISELECT(48,20), "S19884C9");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C4*)(S19884C3*), ABISELECT(48,20), "S19884C9");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C7*)(S19884C3*), ABISELECT(48,20), "S19884C9");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C8*)(S19884C3*), ABISELECT(48,20), "S19884C9");
    /*is_ambiguous_... S19884C9::S19884C4 */ AMB_check_base_class_offset(lv, (S16130C17_nt*)(S19884C4*), ABISELECT(48,20), "S19884C9");
    /*is_ambiguous_... S19884C9::S19884C7 */ AMB_check_base_class_offset(lv, (S5643C2*)(S19884C7*), ABISELECT(48,20), "S19884C9");
    check_base_class_offset(lv, (S5643C2*)(S19884C4*)(S19884C3*), ABISELECT(48,20), "S19884C9");
    check_base_class_offset(lv, (S5643C2*)(S19884C7*)(S19884C3*), ABISELECT(48,20), "S19884C9");
    /*is_ambiguous_... S19884C12::S5643C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S19884C12*), ABISELECT(48,20), "S19884C9");
    /*is_ambiguous_... S19884C9::S19884C4 */ AMB_check_base_class_offset(lv, (S5643C2*)(S19884C4*), ABISELECT(48,20), "S19884C9");
    /*is_ambiguous_... S19884C9::S19884C7 */ AMB_check_base_class_offset(lv, (S19884C7*), ABISELECT(16,4), "S19884C9");
    /*is_ambiguous_... S19884C10::S19884C7 */ AMB_check_base_class_offset(lv, (S19884C7*)(S19884C10*), ABISELECT(16,4), "S19884C9");
    /*is_ambiguous_... S19884C9::S19884C8 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S19884C8*), ABISELECT(176,108), "S19884C9");
    /*is_ambiguous_... S19884C9::S19884C8 */ AMB_check_base_class_offset(lv, (S5643C2*)(S19884C8*), ABISELECT(192,120), "S19884C9");
    /*is_ambiguous_... S19884C10::S19884C8 */ AMB_check_base_class_offset(lv, (S19884C8*)(S19884C10*), ABISELECT(160,104), "S19884C9");
    check_base_class_offset(lv, (S19884C8*)(S19884C12*), ABISELECT(160,104), "S19884C9");
    check_base_class_offset(lv, (S5408C7_nt*)(S19884C10*), 0, "S19884C9");
    check_base_class_offset(lv, (S5643C3_nt*)(S19884C4*)(S19884C3*), ABISELECT(1616,1164), "S19884C9");
    /*is_ambiguous_... S19884C9::S19884C4 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S19884C4*), ABISELECT(1616,1164), "S19884C9");
    check_base_class_offset(lv, (S19884C4*)(S19884C3*), ABISELECT(304,204), "S19884C9");
    check_base_class_offset(lv, (S5643C3_nt*)(S19884C7*)(S19884C3*), ABISELECT(1456,1052), "S19884C9");
    check_base_class_offset(lv, (S19884C7*)(S19884C3*), ABISELECT(1440,1048), "S19884C9");
    check_base_class_offset(lv, (S5643C3_nt*)(S19884C8*)(S19884C3*), ABISELECT(1488,1068), "S19884C9");
    check_base_class_offset(lv, (S5643C2*)(S19884C8*)(S19884C3*), ABISELECT(1504,1080), "S19884C9");
    check_base_class_offset(lv, (S19884C8*)(S19884C3*), ABISELECT(1472,1064), "S19884C9");
    check_base_class_offset(lv, (S19884C3*)(S19884C10*), ABISELECT(304,204), "S19884C9");
    check_base_class_offset(lv, (S19884C10*), 0, "S19884C9");
    check_base_class_offset(lv, (S19884C4*)(S19884C12*), ABISELECT(1648,1184), "S19884C9");
    /*is_ambiguous_... S19884C12::S16130C17_nt */ AMB_check_base_class_offset(lv, (S16130C17_nt*)(S19884C12*), ABISELECT(1632,1176), "S19884C9");
    check_base_class_offset(lv, (S19884C12*), ABISELECT(1632,1176), "S19884C9");
    /*is_ambiguous_... S19884C9::S16130C17_nt */ AMB_check_base_class_offset(lv, (S16130C17_nt*), 0, "S19884C9");
    test_class_info(&lv, &cd_S19884C9);
    dp->~S19884C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19884C9(Test_S19884C9, "S19884C9", ABISELECT(2784,2028));

#else // __cplusplus

extern void _ZN8S19884C9C1Ev();
extern void _ZN8S19884C9D2Ev();
Name_Map name_map_S19884C9[] = {
  NSPAIR(_ZN8S19884C9C1Ev),
  NSPAIR(_ZN8S19884C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S19884C7;
extern VTBL_ENTRY _ZTI8S19884C7[];
extern  VTBL_ENTRY _ZTV8S19884C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C7[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S19884C8;
extern VTBL_ENTRY _ZTI8S19884C8[];
extern  VTBL_ENTRY _ZTV8S19884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C8[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S19884C4;
extern VTBL_ENTRY _ZTI8S19884C4[];
extern  VTBL_ENTRY _ZTV8S19884C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S19884C7;
extern VTBL_ENTRY _ZTI8S19884C7[];
extern  VTBL_ENTRY _ZTV8S19884C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C7[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S19884C8;
extern VTBL_ENTRY _ZTI8S19884C8[];
extern  VTBL_ENTRY _ZTV8S19884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C8[];
extern Class_Descriptor cd_S19884C3;
extern VTBL_ENTRY _ZTI8S19884C3[];
extern  VTBL_ENTRY _ZTV8S19884C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C3[];
extern Class_Descriptor cd_S19884C10;
extern VTBL_ENTRY _ZTI9S19884C10[];
extern  VTBL_ENTRY _ZTV9S19884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19884C10[];
extern Class_Descriptor cd_S19884C4;
extern VTBL_ENTRY _ZTI8S19884C4[];
extern  VTBL_ENTRY _ZTV8S19884C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C4[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
extern Class_Descriptor cd_S19884C12;
extern VTBL_ENTRY _ZTI9S19884C12[];
extern  VTBL_ENTRY _ZTV9S19884C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19884C12[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
static Base_Class bases_S19884C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5643C3_nt,    ABISELECT(32,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_S16130C17_nt,    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
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5643C2,    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
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19884C7,    ABISELECT(16,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(176,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
    6, //immediately_derived
  0, 0},
  {&cd_S5643C2,    ABISELECT(192,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
    6, //immediately_derived
  0, 0},
  {&cd_S19884C8,    ABISELECT(160,104), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C3_nt,    ABISELECT(1616,1164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C4,    ABISELECT(304,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1456,1052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C7,    ABISELECT(1440,1048), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1488,1068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1504,1080), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C8,    ABISELECT(1472,1064), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19884C3,    ABISELECT(304,204), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19884C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19884C4,    ABISELECT(1648,1184), //bcp->offset
    48, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S16130C17_nt,    ABISELECT(1632,1176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C12,    ABISELECT(1632,1176), //bcp->offset
    41, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19884C9[];
extern void _ZN8S19884C9D1Ev();
extern void _ZN8S19884C9D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19884C9D1Ev,_ZTv0_n20_N8S19884C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19884C9D1Ev,_ZThn4_N8S19884C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19884C9D0Ev,_ZTv0_n20_N8S19884C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19884C9D0Ev,_ZThn4_N8S19884C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19884C9D1Ev,_ZTv0_n24_N8S19884C9D1Ev)();
extern void ABISELECT(_ZThn304_N8S19884C9D1Ev,_ZThn204_N8S19884C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19884C9D0Ev,_ZTv0_n24_N8S19884C9D0Ev)();
extern void ABISELECT(_ZThn304_N8S19884C9D0Ev,_ZThn204_N8S19884C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n48_N8S19884C9D1Ev,_ZTvn844_n24_N8S19884C9D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S19884C9D0Ev,_ZTvn844_n24_N8S19884C9D0Ev)();
static  VTBL_ENTRY vtc_S19884C9[] = {
  ABISELECT(1648,1184),
  ABISELECT(1632,1176),
  0,
  0,
  ABISELECT(1616,1164),
  ABISELECT(304,204),
  ABISELECT(48,20),
  ABISELECT(16,4),
  ABISELECT(48,20),
  ABISELECT(160,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
  (VTBL_ENTRY)&_ZN8S19884C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19884C9D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19884C9D1Ev,_ZTv0_n20_N8S19884C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19884C9D0Ev,_ZTv0_n20_N8S19884C9D0Ev),
  ABISELECT(-112,-84),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
  ABISELECT(-304,-204),
  ABISELECT(-256,-184),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19884C9D1Ev,_ZTv0_n24_N8S19884C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19884C9D0Ev,_ZTv0_n24_N8S19884C9D0Ev),
  ABISELECT(-1392,-1028),
  ABISELECT(-1392,-1028),
  ABISELECT(-1440,-1048),
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S19884C9D1Ev,_ZTvn844_n24_N8S19884C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S19884C9D0Ev,_ZTvn844_n24_N8S19884C9D0Ev),
  ABISELECT(-1424,-1044),
  ABISELECT(-1472,-1064),
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
  ABISELECT(-1472,-1072),
  ABISELECT(-1584,-1156),
  ABISELECT(-16,-12),
  ABISELECT(16,8),
  ABISELECT(-1584,-1156),
  ABISELECT(-1632,-1176),
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
  ABISELECT(-1600,-1164),
  ABISELECT(-1600,-1164),
  ABISELECT(-32,-20),
  ABISELECT(-1648,-1184),
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
};
extern VTBL_ENTRY _ZTV8S19884C9[];
extern void _ZN8S19884C7D1Ev();
extern void _ZN8S19884C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19884C7__8S19884C9[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C7[0]),
  (VTBL_ENTRY)&_ZN8S19884C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19884C7D0Ev,
};
extern void _ZN9S19884C10D1Ev();
extern void _ZN9S19884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19884C10__8S19884C9[] = {
  ABISELECT(1616,1164),
  ABISELECT(304,204),
  ABISELECT(48,20),
  ABISELECT(16,4),
  ABISELECT(48,20),
  ABISELECT(160,104),
  0,
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
  (VTBL_ENTRY)&_ZN9S19884C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19884C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19884C8__9S19884C10__8S19884C9[] = {
  ABISELECT(-112,-84),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19884C10D1Ev,_ZTv0_n20_N9S19884C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19884C10D1Ev,_ZThn4_N9S19884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19884C10D0Ev,_ZTv0_n20_N9S19884C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19884C10D0Ev,_ZThn4_N9S19884C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19884C7__9S19884C10__8S19884C9[] = {
  ABISELECT(-16,-4),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19884C10D1Ev,_ZTv0_n20_N9S19884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19884C10D0Ev,_ZTv0_n20_N9S19884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19884C10D1Ev,_ZTv0_n24_N9S19884C10D1Ev)();
extern void ABISELECT(_ZThn304_N9S19884C10D1Ev,_ZThn204_N9S19884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19884C10D0Ev,_ZTv0_n24_N9S19884C10D0Ev)();
extern void ABISELECT(_ZThn304_N9S19884C10D0Ev,_ZThn204_N9S19884C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19884C3__9S19884C10__8S19884C9[] = {
  ABISELECT(-304,-204),
  ABISELECT(-256,-184),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19884C10D1Ev,_ZTv0_n24_N9S19884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19884C10D0Ev,_ZTv0_n24_N9S19884C10D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N9S19884C10D1Ev,_ZTvn844_n24_N9S19884C10D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N9S19884C10D0Ev,_ZTvn844_n24_N9S19884C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19884C78S19884C3__A1__9S19884C10__8S19884C9[] = {
  ABISELECT(-1392,-1028),
  ABISELECT(-1392,-1028),
  ABISELECT(-1440,-1048),
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N9S19884C10D1Ev,_ZTvn844_n24_N9S19884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N9S19884C10D0Ev,_ZTvn844_n24_N9S19884C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19884C88S19884C3__A1__9S19884C10__8S19884C9[] = {
  ABISELECT(-1424,-1044),
  ABISELECT(-1472,-1064),
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19884C8__8S19884C9[] = {
  ABISELECT(-112,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C8[0]),
};
extern void _ZN8S19884C3D1Ev();
extern void _ZN8S19884C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19884C3__8S19884C9[] = {
  ABISELECT(-256,-184),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C3[0]),
  (VTBL_ENTRY)&_ZN8S19884C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19884C3D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19884C48S19884C3__8S19884C9[] = {
  ABISELECT(-256,-184),
  ABISELECT(-256,-184),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C4[0]),
};
extern void _ZN8S19884C7D1Ev();
extern void _ZN8S19884C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19884C78S19884C3__A1__8S19884C9[] = {
  ABISELECT(-1392,-1028),
  ABISELECT(-1392,-1028),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C7[0]),
  (VTBL_ENTRY)&_ZN8S19884C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19884C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19884C88S19884C3__A1__8S19884C9[] = {
  ABISELECT(-1424,-1044),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C8[0]),
};
extern void ABISELECT(_ZThn1136_N8S19884C3D1Ev,_ZThn844_N8S19884C3D1Ev)();
extern void ABISELECT(_ZThn1136_N8S19884C3D0Ev,_ZThn844_N8S19884C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19884C7__8S19884C3__8S19884C9[] = {
  ABISELECT(-1392,-1028),
  ABISELECT(-1392,-1028),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S19884C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S19884C3D1Ev,_ZThn844_N8S19884C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S19884C3D0Ev,_ZThn844_N8S19884C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19884C8__8S19884C3__8S19884C9[] = {
  ABISELECT(-1424,-1044),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S19884C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19884C12__8S19884C9[] = {
  ABISELECT(-1472,-1072),
  ABISELECT(-1584,-1156),
  ABISELECT(-16,-12),
  ABISELECT(16,8),
  ABISELECT(-1584,-1156),
  0,
  (VTBL_ENTRY)&(_ZTI9S19884C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19884C4__9S19884C12__8S19884C9[] = {
  ABISELECT(-1600,-1164),
  ABISELECT(-1600,-1164),
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19884C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19884C8__9S19884C12__8S19884C9[] = {
  ABISELECT(-112,-84),
  ABISELECT(1472,1072),
  (VTBL_ENTRY)&(_ZTI9S19884C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19884C4__A1__8S19884C9[] = {
  ABISELECT(-1600,-1164),
  ABISELECT(-1600,-1164),
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C4[0]),
};
static  VTT_ENTRY vtt_S19884C9[] = {
  {&(_ZTV8S19884C9[12]),  12,53},
  {&(_ZTV8S19884C9[19]),  19,53},
  {&(_ZTV8S19884C9[12]),  12,53},
  {&(_ZTV8S19884C9[24]),  24,53},
  {&(_ZTV8S19884C9[30]),  30,53},
  {&(_ZTV8S19884C9[36]),  36,53},
  {&(_ZTV8S19884C9[41]),  41,53},
  {&(_ZTV8S19884C9[48]),  48,53},
  {&(_ZTV8S19884C9[53]),  53,53},
  {&(_tg__ZTV8S19884C7__8S19884C9[4]),  4,6},
  {&(_tg__ZTV9S19884C10__8S19884C9[8]),  8,10},
  {&(_tg__ZTV8S19884C8__9S19884C10__8S19884C9[3]),  3,3},
  {&(_tg__ZTV8S19884C7__9S19884C10__8S19884C9[5]),  5,7},
  {&(_tg__ZTV8S19884C3__9S19884C10__8S19884C9[6]),  6,8},
  {&(_tg__ZTV8S19884C78S19884C3__A1__9S19884C10__8S19884C9[4]),  4,6},
  {&(_tg__ZTV8S19884C88S19884C3__A1__9S19884C10__8S19884C9[3]),  3,3},
  {&(_tg__ZTV8S19884C8__8S19884C9[3]),  3,3},
  {&(_tg__ZTV8S19884C3__8S19884C9[5]),  5,7},
  {&(_tg__ZTV8S19884C48S19884C3__8S19884C9[5]),  5,5},
  {&(_tg__ZTV8S19884C78S19884C3__A1__8S19884C9[4]),  4,6},
  {&(_tg__ZTV8S19884C88S19884C3__A1__8S19884C9[3]),  3,3},
  {&(_tg__ZTV8S19884C7__8S19884C3__8S19884C9[4]),  4,6},
  {&(_tg__ZTV8S19884C8__8S19884C3__8S19884C9[3]),  3,3},
  {&(_tg__ZTV9S19884C12__8S19884C9[7]),  7,7},
  {&(_tg__ZTV8S19884C4__9S19884C12__8S19884C9[5]),  5,5},
  {&(_tg__ZTV8S19884C8__9S19884C12__8S19884C9[3]),  3,3},
  {&(_tg__ZTV8S19884C4__A1__8S19884C9[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S19884C9[];
extern  VTBL_ENTRY _ZTV8S19884C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C9[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19884C10D0Ev,_ZTv0_n24_N9S19884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19884C10D0Ev,_ZThn204_N9S19884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19884C10D1Ev,_ZTv0_n24_N9S19884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19884C10D1Ev,_ZThn204_N9S19884C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19884C10D0Ev,_ZTv0_n20_N9S19884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19884C10D0Ev,_ZThn4_N9S19884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19884C10D1Ev,_ZTv0_n20_N9S19884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19884C10D1Ev,_ZThn4_N9S19884C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19884C9D0Ev,_ZTv0_n24_N8S19884C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19884C9D0Ev,_ZThn204_N8S19884C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19884C9D1Ev,_ZTv0_n24_N8S19884C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19884C9D1Ev,_ZThn204_N8S19884C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19884C9D0Ev,_ZTv0_n20_N8S19884C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19884C9D0Ev,_ZThn4_N8S19884C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19884C9D1Ev,_ZTv0_n20_N8S19884C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19884C9D1Ev,_ZThn4_N8S19884C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19884C9 = {  "S19884C9", // class name
  bases_S19884C9, 21,
  &(vtc_S19884C9[0]), // expected_vtbl_contents
  &(vtt_S19884C9[0]), // expected_vtt_contents
  ABISELECT(2784,2028), // object size
  NSPAIRA(_ZTI8S19884C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19884C9),53, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19884C9),27, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19884C1  : virtual S16130C17_nt , virtual S19884C3 , virtual S19884C4 , S19884C9 {
  int s19884c1f0;
  virtual  ~S19884C1(); // _ZN8S19884C1D2Ev
  S19884C1(); // tgen
};
//SIG(1 S19884C1) C1{ VBC2{ m} VBC3{ VBC2 BC4{ VBC5{ m FD} VBC6{ m FC5[7]} VBC2 FC6[10]} BC7{ BC5 VBC2 VBC6 vd} BC8{ BC5 BC6 VBC2}} VBC4 BC9{ VBC7 VBC10{ VBC8 VBC7 BC11{ m} VBC3 vd} VBC12{ VBC6 VBC4 VBC8 BC2 FC2} BC2 vd} vd Fi}


 S19884C1 ::~S19884C1(){ note_dtor("S19884C1", this);}
S19884C1 ::S19884C1(){ note_ctor("S19884C1", this);} // tgen

static void Test_S19884C1()
{
  extern Class_Descriptor cd_S19884C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(175,509)];
    init_test(&cd_S19884C1, buf);
    S19884C1 *dp, &lv = *(dp=new (buf) S19884C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2784,2032), "sizeof(S19884C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19884C1)");
    /*is_ambiguous_... S19884C1::S16130C17_nt */ AMB_check_base_class_offset(lv, (S16130C17_nt*), ABISELECT(12,8), "S19884C1");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C3*), ABISELECT(12,8), "S19884C1");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C4*)(S19884C3*), ABISELECT(12,8), "S19884C1");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C7*)(S19884C3*), ABISELECT(12,8), "S19884C1");
    check_base_class_offset(lv, (S16130C17_nt*)(S19884C8*)(S19884C3*), ABISELECT(12,8), "S19884C1");
    /*is_ambiguous_... S19884C1::S19884C4 */ AMB_check_base_class_offset(lv, (S16130C17_nt*)(S19884C4*), ABISELECT(12,8), "S19884C1");
    /*is_ambiguous_... S19884C1::S19884C7 */ AMB_check_base_class_offset(lv, (S16130C17_nt*)(S19884C7*), ABISELECT(12,8), "S19884C1");
    /*is_ambiguous_... S19884C1::S19884C8 */ AMB_check_base_class_offset(lv, (S16130C17_nt*)(S19884C8*), ABISELECT(12,8), "S19884C1");
    check_base_class_offset(lv, (S5643C3_nt*)(S19884C4*)(S19884C3*), ABISELECT(1328,968), "S19884C1");
    /*is_ambiguous_... S19884C1::S19884C4 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S19884C4*), ABISELECT(1328,968), "S19884C1");
    check_base_class_offset(lv, (S5643C2*)(S19884C4*)(S19884C3*), ABISELECT(1344,980), "S19884C1");
    check_base_class_offset(lv, (S5643C2*)(S19884C7*)(S19884C3*), ABISELECT(1344,980), "S19884C1");
    /*is_ambiguous_... S19884C1::S19884C4 */ AMB_check_base_class_offset(lv, (S5643C2*)(S19884C4*), ABISELECT(1344,980), "S19884C1");
    /*is_ambiguous_... S19884C1::S19884C7 */ AMB_check_base_class_offset(lv, (S5643C2*)(S19884C7*), ABISELECT(1344,980), "S19884C1");
    /*is_ambiguous_... S19884C12::S5643C2 */ AMB_check_base_class_offset(lv, (S5643C2*)(S19884C12*), ABISELECT(1344,980), "S19884C1");
    check_base_class_offset(lv, (S19884C4*)(S19884C3*), ABISELECT(16,8), "S19884C1");
    check_base_class_offset(lv, (S5643C3_nt*)(S19884C7*)(S19884C3*), ABISELECT(1168,856), "S19884C1");
    check_base_class_offset(lv, (S19884C7*)(S19884C3*), ABISELECT(1152,852), "S19884C1");
    check_base_class_offset(lv, (S5643C3_nt*)(S19884C8*)(S19884C3*), ABISELECT(1200,872), "S19884C1");
    check_base_class_offset(lv, (S5643C2*)(S19884C8*)(S19884C3*), ABISELECT(1216,884), "S19884C1");
    check_base_class_offset(lv, (S19884C8*)(S19884C3*), ABISELECT(1184,868), "S19884C1");
    check_base_class_offset(lv, (S19884C3*), ABISELECT(16,8), "S19884C1");
    check_base_class_offset(lv, (S19884C3*)(S19884C10*), ABISELECT(16,8), "S19884C1");
    /*is_ambiguous_... S19884C1::S19884C4 */ AMB_check_base_class_offset(lv, (S19884C4*), ABISELECT(1456,1064), "S19884C1");
    check_base_class_offset(lv, (S19884C4*)(S19884C12*), ABISELECT(1456,1064), "S19884C1");
    /*is_ambiguous_... S19884C1::S19884C7 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S19884C7*), ABISELECT(2608,1912), "S19884C1");
    /*is_ambiguous_... S19884C9::S19884C7 */ AMB_check_base_class_offset(lv, (S19884C7*)(S19884C9*), ABISELECT(2592,1908), "S19884C1");
    /*is_ambiguous_... S19884C10::S19884C7 */ AMB_check_base_class_offset(lv, (S19884C7*)(S19884C10*), ABISELECT(2592,1908), "S19884C1");
    /*is_ambiguous_... S19884C1::S19884C8 */ AMB_check_base_class_offset(lv, (S5643C3_nt*)(S19884C8*), ABISELECT(2640,1928), "S19884C1");
    /*is_ambiguous_... S19884C1::S19884C8 */ AMB_check_base_class_offset(lv, (S5643C2*)(S19884C8*), ABISELECT(2656,1940), "S19884C1");
    /*is_ambiguous_... S19884C10::S19884C8 */ AMB_check_base_class_offset(lv, (S19884C8*)(S19884C10*), ABISELECT(2624,1924), "S19884C1");
    check_base_class_offset(lv, (S19884C8*)(S19884C12*), ABISELECT(2624,1924), "S19884C1");
    check_base_class_offset(lv, (S5408C7_nt*)(S19884C10*), 0, "S19884C1");
    check_base_class_offset(lv, (S19884C10*)(S19884C9*), 0, "S19884C1");
    /*is_ambiguous_... S19884C12::S16130C17_nt */ AMB_check_base_class_offset(lv, (S16130C17_nt*)(S19884C12*), ABISELECT(2768,2024), "S19884C1");
    check_base_class_offset(lv, (S19884C12*)(S19884C9*), ABISELECT(2768,2024), "S19884C1");
    /*is_ambiguous_... S19884C9::S16130C17_nt */ AMB_check_base_class_offset(lv, (S16130C17_nt*)(S19884C9*), 0, "S19884C1");
    check_base_class_offset(lv, (S19884C9*), 0, "S19884C1");
    check_field_offset(lv, s19884c1f0, ABISELECT(8,4), "S19884C1.s19884c1f0");
    test_class_info(&lv, &cd_S19884C1);
    dp->~S19884C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19884C1(Test_S19884C1, "S19884C1", ABISELECT(2784,2032));

#else // __cplusplus

extern void _ZN8S19884C1C1Ev();
extern void _ZN8S19884C1D2Ev();
Name_Map name_map_S19884C1[] = {
  NSPAIR(_ZN8S19884C1C1Ev),
  NSPAIR(_ZN8S19884C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S19884C4;
extern VTBL_ENTRY _ZTI8S19884C4[];
extern  VTBL_ENTRY _ZTV8S19884C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S19884C7;
extern VTBL_ENTRY _ZTI8S19884C7[];
extern  VTBL_ENTRY _ZTV8S19884C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C7[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S19884C8;
extern VTBL_ENTRY _ZTI8S19884C8[];
extern  VTBL_ENTRY _ZTV8S19884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C8[];
extern Class_Descriptor cd_S19884C3;
extern VTBL_ENTRY _ZTI8S19884C3[];
extern  VTBL_ENTRY _ZTV8S19884C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C3[];
extern Class_Descriptor cd_S19884C4;
extern VTBL_ENTRY _ZTI8S19884C4[];
extern  VTBL_ENTRY _ZTV8S19884C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C4[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S19884C7;
extern VTBL_ENTRY _ZTI8S19884C7[];
extern  VTBL_ENTRY _ZTV8S19884C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C7[];
extern Class_Descriptor cd_S5643C3_nt;
extern VTBL_ENTRY _ZTI10S5643C3_nt[];
extern Class_Descriptor cd_S5643C2;
extern VTBL_ENTRY _ZTI7S5643C2[];
extern Class_Descriptor cd_S19884C8;
extern VTBL_ENTRY _ZTI8S19884C8[];
extern  VTBL_ENTRY _ZTV8S19884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C8[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
extern Class_Descriptor cd_S19884C10;
extern VTBL_ENTRY _ZTI9S19884C10[];
extern  VTBL_ENTRY _ZTV9S19884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19884C10[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
extern Class_Descriptor cd_S19884C12;
extern VTBL_ENTRY _ZTI9S19884C12[];
extern  VTBL_ENTRY _ZTV9S19884C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19884C12[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
extern Class_Descriptor cd_S19884C9;
extern VTBL_ENTRY _ZTI8S19884C9[];
extern  VTBL_ENTRY _ZTV8S19884C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C9[];
static Base_Class bases_S19884C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16130C17_nt,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(1328,968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1344,980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C4,    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
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1168,856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C7,    ABISELECT(1152,852), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5643C3_nt,    ABISELECT(1200,872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(1216,884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C8,    ABISELECT(1184,868), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19884C3,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19884C4,    ABISELECT(1456,1064), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S5643C3_nt,    ABISELECT(2608,1912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C7,    ABISELECT(2592,1908), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S5643C3_nt,    ABISELECT(2640,1928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5643C2,    ABISELECT(2656,1940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C8,    ABISELECT(2624,1924), //bcp->offset
    43, //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
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S16130C17_nt,    ABISELECT(2768,2024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C12,    ABISELECT(2768,2024), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19884C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19884C1[];
extern void _ZN8S19884C1D1Ev();
extern void _ZN8S19884C1D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S19884C1D1Ev,_ZTv0_n24_N8S19884C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19884C1D1Ev,_ZThn8_N8S19884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19884C1D0Ev,_ZTv0_n24_N8S19884C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19884C1D0Ev,_ZThn8_N8S19884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1136_n48_N8S19884C1D1Ev,_ZTvn844_n24_N8S19884C1D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S19884C1D0Ev,_ZTvn844_n24_N8S19884C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19884C1D1Ev,_ZTv0_n20_N8S19884C1D1Ev)();
extern void ABISELECT(_ZThn2592_N8S19884C1D1Ev,_ZThn1908_N8S19884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19884C1D0Ev,_ZTv0_n20_N8S19884C1D0Ev)();
extern void ABISELECT(_ZThn2592_N8S19884C1D0Ev,_ZThn1908_N8S19884C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19884C1[] = {
  ABISELECT(1456,1064),
  ABISELECT(2768,2024),
  0,
  0,
  ABISELECT(1328,968),
  ABISELECT(16,8),
  ABISELECT(1344,980),
  ABISELECT(2592,1908),
  ABISELECT(12,8),
  ABISELECT(2624,1924),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C1[0]),
  (VTBL_ENTRY)&_ZN8S19884C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19884C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-4,0),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19884C1D1Ev,_ZTv0_n24_N8S19884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19884C1D0Ev,_ZTv0_n24_N8S19884C1D0Ev),
  ABISELECT(192,128),
  ABISELECT(-1140,-844),
  ABISELECT(-1152,-852),
  (VTBL_ENTRY)&(_ZTI8S19884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S19884C1D1Ev,_ZTvn844_n24_N8S19884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S19884C1D0Ev,_ZTvn844_n24_N8S19884C1D0Ev),
  ABISELECT(-1172,-860),
  ABISELECT(-1184,-868),
  (VTBL_ENTRY)&(_ZTI8S19884C1[0]),
  ABISELECT(-1444,-1056),
  ABISELECT(-112,-84),
  ABISELECT(-128,-96),
  ABISELECT(-1456,-1064),
  (VTBL_ENTRY)&(_ZTI8S19884C1[0]),
  ABISELECT(-2592,-1908),
  ABISELECT(-1248,-928),
  ABISELECT(-2580,-1900),
  ABISELECT(-2592,-1908),
  (VTBL_ENTRY)&(_ZTI8S19884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19884C1D1Ev,_ZTv0_n20_N8S19884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19884C1D0Ev,_ZTv0_n20_N8S19884C1D0Ev),
  ABISELECT(-2612,-1916),
  ABISELECT(-2624,-1924),
  (VTBL_ENTRY)&(_ZTI8S19884C1[0]),
  ABISELECT(-144,-100),
  ABISELECT(-2756,-2016),
  ABISELECT(-1440,-1056),
  ABISELECT(-1312,-960),
  ABISELECT(-1424,-1044),
  ABISELECT(-2768,-2024),
  (VTBL_ENTRY)&(_ZTI8S19884C1[0]),
};
extern VTBL_ENTRY _ZTV8S19884C1[];
extern void _ZN8S19884C9D1Ev();
extern void _ZN8S19884C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19884C9__8S19884C1[] = {
  ABISELECT(1456,1064),
  ABISELECT(2768,2024),
  0,
  0,
  ABISELECT(1328,968),
  ABISELECT(16,8),
  ABISELECT(1344,980),
  ABISELECT(2592,1908),
  ABISELECT(12,8),
  ABISELECT(2624,1924),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
  (VTBL_ENTRY)&_ZN8S19884C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19884C9D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19884C9D1Ev,_ZTv0_n20_N8S19884C9D1Ev)();
extern void ABISELECT(_ZThn2592_N8S19884C9D1Ev,_ZThn1908_N8S19884C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19884C9D0Ev,_ZTv0_n20_N8S19884C9D0Ev)();
extern void ABISELECT(_ZThn2592_N8S19884C9D0Ev,_ZThn1908_N8S19884C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19884C7__8S19884C9__8S19884C1[] = {
  ABISELECT(-2592,-1908),
  ABISELECT(-1248,-928),
  ABISELECT(-2580,-1900),
  ABISELECT(-2592,-1908),
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19884C9D1Ev,_ZTv0_n20_N8S19884C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19884C9D0Ev,_ZTv0_n20_N8S19884C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19884C8__8S19884C9__8S19884C1[] = {
  ABISELECT(-2612,-1916),
  ABISELECT(-2624,-1924),
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19884C9D1Ev,_ZTv0_n24_N8S19884C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19884C9D1Ev,_ZThn8_N8S19884C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19884C9D0Ev,_ZTv0_n24_N8S19884C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19884C9D0Ev,_ZThn8_N8S19884C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19884C3__8S19884C9__8S19884C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-4,0),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19884C9D1Ev,_ZTv0_n24_N8S19884C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19884C9D0Ev,_ZTv0_n24_N8S19884C9D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N8S19884C9D1Ev,_ZTvn844_n24_N8S19884C9D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N8S19884C9D0Ev,_ZTvn844_n24_N8S19884C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19884C78S19884C3__A1__8S19884C9__8S19884C1[] = {
  ABISELECT(192,128),
  ABISELECT(-1140,-844),
  ABISELECT(-1152,-852),
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S19884C9D1Ev,_ZTvn844_n24_N8S19884C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N8S19884C9D0Ev,_ZTvn844_n24_N8S19884C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19884C88S19884C3__A1__8S19884C9__8S19884C1[] = {
  ABISELECT(-1172,-860),
  ABISELECT(-1184,-868),
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19884C12__8S19884C9__8S19884C1[] = {
  ABISELECT(-144,-100),
  ABISELECT(-2756,-2016),
  ABISELECT(-1440,-1056),
  ABISELECT(-1312,-960),
  ABISELECT(-1424,-1044),
  ABISELECT(-2768,-2024),
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19884C4__A1__8S19884C9__8S19884C1[] = {
  ABISELECT(-1444,-1056),
  ABISELECT(-112,-84),
  ABISELECT(-128,-96),
  ABISELECT(-1456,-1064),
  (VTBL_ENTRY)&(_ZTI8S19884C9[0]),
};
extern void _ZN8S19884C3D1Ev();
extern void _ZN8S19884C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19884C3__8S19884C1[] = {
  ABISELECT(-4,0),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C3[0]),
  (VTBL_ENTRY)&_ZN8S19884C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19884C3D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19884C48S19884C3__8S19884C1[] = {
  ABISELECT(-4,0),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C4[0]),
};
extern void _ZN8S19884C7D1Ev();
extern void _ZN8S19884C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19884C78S19884C3__8S19884C1[] = {
  ABISELECT(192,128),
  ABISELECT(-1140,-844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C7[0]),
  (VTBL_ENTRY)&_ZN8S19884C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19884C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19884C88S19884C3__8S19884C1[] = {
  ABISELECT(-1172,-860),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C8[0]),
};
extern void ABISELECT(_ZThn1136_N8S19884C3D1Ev,_ZThn844_N8S19884C3D1Ev)();
extern void ABISELECT(_ZThn1136_N8S19884C3D0Ev,_ZThn844_N8S19884C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19884C7__8S19884C3__8S19884C1[] = {
  ABISELECT(192,128),
  ABISELECT(-1140,-844),
  ABISELECT(-1136,-844),
  (VTBL_ENTRY)&(_ZTI8S19884C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S19884C3D1Ev,_ZThn844_N8S19884C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1136_N8S19884C3D0Ev,_ZThn844_N8S19884C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19884C8__8S19884C3__8S19884C1[] = {
  ABISELECT(-1172,-860),
  ABISELECT(-1168,-860),
  (VTBL_ENTRY)&(_ZTI8S19884C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19884C4__A1__8S19884C1[] = {
  ABISELECT(-1444,-1056),
  ABISELECT(-112,-84),
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C4[0]),
};
extern void _ZN8S19884C7D1Ev();
extern void _ZN8S19884C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19884C7__A1__8S19884C1[] = {
  ABISELECT(-1248,-928),
  ABISELECT(-2580,-1900),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C7[0]),
  (VTBL_ENTRY)&_ZN8S19884C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19884C7D0Ev,
};
extern void _ZN9S19884C10D1Ev();
extern void _ZN9S19884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19884C10__8S19884C1[] = {
  ABISELECT(1328,968),
  ABISELECT(16,8),
  ABISELECT(1344,980),
  ABISELECT(2592,1908),
  ABISELECT(12,8),
  ABISELECT(2624,1924),
  0,
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
  (VTBL_ENTRY)&_ZN9S19884C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19884C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19884C8__9S19884C10__8S19884C1[] = {
  ABISELECT(-2612,-1916),
  ABISELECT(-2624,-1924),
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19884C10D1Ev,_ZTv0_n20_N9S19884C10D1Ev)();
extern void ABISELECT(_ZThn2592_N9S19884C10D1Ev,_ZThn1908_N9S19884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19884C10D0Ev,_ZTv0_n20_N9S19884C10D0Ev)();
extern void ABISELECT(_ZThn2592_N9S19884C10D0Ev,_ZThn1908_N9S19884C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19884C7__9S19884C10__8S19884C1[] = {
  ABISELECT(-2592,-1908),
  ABISELECT(-1248,-928),
  ABISELECT(-2580,-1900),
  ABISELECT(-2592,-1908),
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19884C10D1Ev,_ZTv0_n20_N9S19884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19884C10D0Ev,_ZTv0_n20_N9S19884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19884C10D1Ev,_ZTv0_n24_N9S19884C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19884C10D1Ev,_ZThn8_N9S19884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19884C10D0Ev,_ZTv0_n24_N9S19884C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19884C10D0Ev,_ZThn8_N9S19884C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19884C3__9S19884C10__8S19884C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-4,0),
  ABISELECT(1328,972),
  ABISELECT(1312,960),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19884C10D1Ev,_ZTv0_n24_N9S19884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19884C10D0Ev,_ZTv0_n24_N9S19884C10D0Ev),
};
extern void ABISELECT(_ZTvn1136_n48_N9S19884C10D1Ev,_ZTvn844_n24_N9S19884C10D1Ev)();
extern void ABISELECT(_ZTvn1136_n48_N9S19884C10D0Ev,_ZTvn844_n24_N9S19884C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19884C78S19884C3__A1__9S19884C10__8S19884C1[] = {
  ABISELECT(192,128),
  ABISELECT(-1140,-844),
  ABISELECT(-1152,-852),
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N9S19884C10D1Ev,_ZTvn844_n24_N9S19884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1136_n48_N9S19884C10D0Ev,_ZTvn844_n24_N9S19884C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19884C88S19884C3__A1__9S19884C10__8S19884C1[] = {
  ABISELECT(-1172,-860),
  ABISELECT(-1184,-868),
  (VTBL_ENTRY)&(_ZTI9S19884C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19884C8__A1__8S19884C1[] = {
  ABISELECT(-2612,-1916),
  0,
  (VTBL_ENTRY)&(_ZTI8S19884C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19884C12__8S19884C1[] = {
  ABISELECT(-144,-100),
  ABISELECT(-2756,-2016),
  ABISELECT(-1440,-1056),
  ABISELECT(-1312,-960),
  ABISELECT(-1424,-1044),
  0,
  (VTBL_ENTRY)&(_ZTI9S19884C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19884C4__9S19884C12__8S19884C1[] = {
  ABISELECT(-1444,-1056),
  ABISELECT(-112,-84),
  ABISELECT(-128,-96),
  ABISELECT(1312,960),
  (VTBL_ENTRY)&(_ZTI9S19884C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19884C8__9S19884C12__8S19884C1[] = {
  ABISELECT(-2612,-1916),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S19884C12[0]),
};
static  VTT_ENTRY vtt_S19884C1[] = {
  {&(_ZTV8S19884C1[12]),  12,53},
  {&(_tg__ZTV8S19884C9__8S19884C1[12]),  12,14},
  {&(_tg__ZTV8S19884C7__8S19884C9__8S19884C1[5]),  5,7},
  {&(_tg__ZTV8S19884C9__8S19884C1[12]),  12,14},
  {&(_tg__ZTV8S19884C8__8S19884C9__8S19884C1[3]),  3,3},
  {&(_tg__ZTV8S19884C3__8S19884C9__8S19884C1[6]),  6,8},
  {&(_tg__ZTV8S19884C78S19884C3__A1__8S19884C9__8S19884C1[4]),  4,6},
  {&(_tg__ZTV8S19884C88S19884C3__A1__8S19884C9__8S19884C1[3]),  3,3},
  {&(_tg__ZTV9S19884C12__8S19884C9__8S19884C1[7]),  7,7},
  {&(_tg__ZTV8S19884C4__A1__8S19884C9__8S19884C1[5]),  5,5},
  {&(_ZTV8S19884C1[20]),  20,53},
  {&(_ZTV8S19884C1[26]),  26,53},
  {&(_ZTV8S19884C1[31]),  31,53},
  {&(_ZTV8S19884C1[36]),  36,53},
  {&(_ZTV8S19884C1[41]),  41,53},
  {&(_ZTV8S19884C1[12]),  12,53},
  {&(_ZTV8S19884C1[46]),  46,53},
  {&(_ZTV8S19884C1[53]),  53,53},
  {&(_tg__ZTV8S19884C3__8S19884C1[5]),  5,7},
  {&(_tg__ZTV8S19884C48S19884C3__8S19884C1[5]),  5,5},
  {&(_tg__ZTV8S19884C78S19884C3__8S19884C1[4]),  4,6},
  {&(_tg__ZTV8S19884C88S19884C3__8S19884C1[3]),  3,3},
  {&(_tg__ZTV8S19884C7__8S19884C3__8S19884C1[4]),  4,6},
  {&(_tg__ZTV8S19884C8__8S19884C3__8S19884C1[3]),  3,3},
  {&(_tg__ZTV8S19884C4__A1__8S19884C1[5]),  5,5},
  {&(_tg__ZTV8S19884C7__A1__8S19884C1[4]),  4,6},
  {&(_tg__ZTV9S19884C10__8S19884C1[8]),  8,10},
  {&(_tg__ZTV8S19884C8__9S19884C10__8S19884C1[3]),  3,3},
  {&(_tg__ZTV8S19884C7__9S19884C10__8S19884C1[5]),  5,7},
  {&(_tg__ZTV8S19884C3__9S19884C10__8S19884C1[6]),  6,8},
  {&(_tg__ZTV8S19884C78S19884C3__A1__9S19884C10__8S19884C1[4]),  4,6},
  {&(_tg__ZTV8S19884C88S19884C3__A1__9S19884C10__8S19884C1[3]),  3,3},
  {&(_tg__ZTV8S19884C8__A1__8S19884C1[3]),  3,3},
  {&(_tg__ZTV9S19884C12__8S19884C1[7]),  7,7},
  {&(_tg__ZTV8S19884C4__9S19884C12__8S19884C1[5]),  5,5},
  {&(_tg__ZTV8S19884C8__9S19884C12__8S19884C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19884C1[];
extern  VTBL_ENTRY _ZTV8S19884C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19884C1[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19884C10D0Ev,_ZTv0_n24_N9S19884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19884C10D0Ev,_ZThn8_N9S19884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19884C10D1Ev,_ZTv0_n24_N9S19884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19884C10D1Ev,_ZThn8_N9S19884C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19884C10D0Ev,_ZTv0_n20_N9S19884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N9S19884C10D0Ev,_ZThn1908_N9S19884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19884C10D1Ev,_ZTv0_n20_N9S19884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N9S19884C10D1Ev,_ZThn1908_N9S19884C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19884C9D0Ev,_ZTv0_n24_N8S19884C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19884C9D0Ev,_ZThn8_N8S19884C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19884C9D1Ev,_ZTv0_n24_N8S19884C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19884C9D1Ev,_ZThn8_N8S19884C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19884C9D0Ev,_ZTv0_n20_N8S19884C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N8S19884C9D0Ev,_ZThn1908_N8S19884C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19884C9D1Ev,_ZTv0_n20_N8S19884C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N8S19884C9D1Ev,_ZThn1908_N8S19884C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19884C1D0Ev,_ZTv0_n20_N8S19884C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N8S19884C1D0Ev,_ZThn1908_N8S19884C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19884C1D1Ev,_ZTv0_n20_N8S19884C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N8S19884C1D1Ev,_ZThn1908_N8S19884C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19884C1D0Ev,_ZTv0_n24_N8S19884C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19884C1D0Ev,_ZThn8_N8S19884C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19884C1D1Ev,_ZTv0_n24_N8S19884C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19884C1D1Ev,_ZThn8_N8S19884C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19884C1 = {  "S19884C1", // class name
  bases_S19884C1, 22,
  &(vtc_S19884C1[0]), // expected_vtbl_contents
  &(vtt_S19884C1[0]), // expected_vtt_contents
  ABISELECT(2784,2032), // object size
  NSPAIRA(_ZTI8S19884C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19884C1),53, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19884C1),36, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13396C3_nt  {
  int s13396c3f0;
};
//SIG(-1 S13396C3_nt) C1{ Fi}



//skip512 S13396C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13396C2_nt  {
  char s13396c2f0[2];
  short s13396c2f1;
  ::S13396C3_nt s13396c2f2;
  short s13396c2f3;
  char s13396c2f4[6];
};
//SIG(-1 S13396C2_nt) C1{ Fc[2] Fs FC2{ Fi} Fs Fc[6]}



//skip512 S13396C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13396C6  {
  void *s13396c6f0;
  int s13396c6f1[4];
};
//SIG(-1 S13396C6) C1{ Fp Fi[4]}



static void Test_S13396C6()
{
  {
    init_simple_test("S13396C6");
    S13396C6 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S13396C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13396C6)");
    check_field_offset(lv, s13396c6f0, 0, "S13396C6.s13396c6f0");
    check_field_offset(lv, s13396c6f1, ABISELECT(8,4), "S13396C6.s13396c6f1");
  }
}
static Arrange_To_Call_Me vS13396C6(Test_S13396C6, "S13396C6", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13396C1  {
  int s13396c1f0[3];
  void *s13396c1f1[2];
  int s13396c1f2[7];
  ::S13396C2_nt s13396c1f3;
  void *s13396c1f4[4];
  int s13396c1f5[4];
  void *s13396c1f6;
  ::S13388C2 s13396c1f7;
  short s13396c1f8;
  char s13396c1f9[2];
  ::S13396C6 s13396c1f10;
  int s13396c1f11[2];
  ::S857C10_nt s13396c1f12;
  int s13396c1f13;
};
//SIG(1 S13396C1) C1{ Fi[3] Fp[2] Fi[7] FC2{ Fc[2] Fs FC3{ Fi} Fs Fc[6]} Fp[4] Fi[4] Fp FC4{ Fi[3] Fp[2] Fi[24] Fp[15] FC5{ Fp[3]} Fp Fi Fp[2] Fs Fc Fi Fc[13]} Fs Fc[2] FC6{ Fp Fi[4]} Fi[2] FC7{ FL[4]} Fi}



static void Test_S13396C1()
{
  {
    init_simple_test("S13396C1");
    S13396C1 lv;
    check2(sizeof(lv), ABISELECT(544,396), "sizeof(S13396C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13396C1)");
    check_field_offset(lv, s13396c1f0, 0, "S13396C1.s13396c1f0");
    check_field_offset(lv, s13396c1f1, ABISELECT(16,12), "S13396C1.s13396c1f1");
    check_field_offset(lv, s13396c1f2, ABISELECT(32,20), "S13396C1.s13396c1f2");
    check_field_offset(lv, s13396c1f3, ABISELECT(60,48), "S13396C1.s13396c1f3");
    check_field_offset(lv, s13396c1f4, ABISELECT(80,64), "S13396C1.s13396c1f4");
    check_field_offset(lv, s13396c1f5, ABISELECT(112,80), "S13396C1.s13396c1f5");
    check_field_offset(lv, s13396c1f6, ABISELECT(128,96), "S13396C1.s13396c1f6");
    check_field_offset(lv, s13396c1f7, ABISELECT(136,100), "S13396C1.s13396c1f7");
    check_field_offset(lv, s13396c1f8, ABISELECT(464,328), "S13396C1.s13396c1f8");
    check_field_offset(lv, s13396c1f9, ABISELECT(466,330), "S13396C1.s13396c1f9");
    check_field_offset(lv, s13396c1f10, ABISELECT(472,332), "S13396C1.s13396c1f10");
    check_field_offset(lv, s13396c1f11, ABISELECT(496,352), "S13396C1.s13396c1f11");
    check_field_offset(lv, s13396c1f12, ABISELECT(504,360), "S13396C1.s13396c1f12");
    check_field_offset(lv, s13396c1f13, ABISELECT(536,392), "S13396C1.s13396c1f13");
  }
}
static Arrange_To_Call_Me vS13396C1(Test_S13396C1, "S13396C1", ABISELECT(544,396));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13395C1  {
  int s13395c1f0[3];
  void *s13395c1f1[2];
  int s13395c1f2[7];
  ::S13396C2_nt s13395c1f3;
  void *s13395c1f4[4];
  int s13395c1f5[4];
  void *s13395c1f6;
  ::S13388C2 s13395c1f7;
  short s13395c1f8;
  char s13395c1f9[2];
  ::S13396C6 s13395c1f10;
  int s13395c1f11[2];
  ::S856C10_nt s13395c1f12;
  int s13395c1f13;
};
//SIG(1 S13395C1) C1{ Fi[3] Fp[2] Fi[7] FC2{ Fc[2] Fs FC3{ Fi} Fs Fc[6]} Fp[4] Fi[4] Fp FC4{ Fi[3] Fp[2] Fi[24] Fp[15] FC5{ Fp[3]} Fp Fi Fp[2] Fs Fc Fi Fc[13]} Fs Fc[2] FC6{ Fp Fi[4]} Fi[2] FC7{ Fl[4]} Fi}



static void Test_S13395C1()
{
  {
    init_simple_test("S13395C1");
    S13395C1 lv;
    check2(sizeof(lv), ABISELECT(544,380), "sizeof(S13395C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13395C1)");
    check_field_offset(lv, s13395c1f0, 0, "S13395C1.s13395c1f0");
    check_field_offset(lv, s13395c1f1, ABISELECT(16,12), "S13395C1.s13395c1f1");
    check_field_offset(lv, s13395c1f2, ABISELECT(32,20), "S13395C1.s13395c1f2");
    check_field_offset(lv, s13395c1f3, ABISELECT(60,48), "S13395C1.s13395c1f3");
    check_field_offset(lv, s13395c1f4, ABISELECT(80,64), "S13395C1.s13395c1f4");
    check_field_offset(lv, s13395c1f5, ABISELECT(112,80), "S13395C1.s13395c1f5");
    check_field_offset(lv, s13395c1f6, ABISELECT(128,96), "S13395C1.s13395c1f6");
    check_field_offset(lv, s13395c1f7, ABISELECT(136,100), "S13395C1.s13395c1f7");
    check_field_offset(lv, s13395c1f8, ABISELECT(464,328), "S13395C1.s13395c1f8");
    check_field_offset(lv, s13395c1f9, ABISELECT(466,330), "S13395C1.s13395c1f9");
    check_field_offset(lv, s13395c1f10, ABISELECT(472,332), "S13395C1.s13395c1f10");
    check_field_offset(lv, s13395c1f11, ABISELECT(496,352), "S13395C1.s13395c1f11");
    check_field_offset(lv, s13395c1f12, ABISELECT(504,360), "S13395C1.s13395c1f12");
    check_field_offset(lv, s13395c1f13, ABISELECT(536,376), "S13395C1.s13395c1f13");
  }
}
static Arrange_To_Call_Me vS13395C1(Test_S13395C1, "S13395C1", ABISELECT(544,380));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13394C1  {
  int s13394c1f0[3];
  void *s13394c1f1[2];
  int s13394c1f2[7];
  ::S13396C2_nt s13394c1f3;
  void *s13394c1f4[4];
  int s13394c1f5[4];
  ::S13388C2 s13394c1f6;
  short s13394c1f7;
  char s13394c1f8[2];
  ::S13396C6 s13394c1f9;
  int s13394c1f10[2];
  ::S857C10_nt s13394c1f11;
  int s13394c1f12;
};
//SIG(1 S13394C1) C1{ Fi[3] Fp[2] Fi[7] FC2{ Fc[2] Fs FC3{ Fi} Fs Fc[6]} Fp[4] Fi[4] FC4{ Fi[3] Fp[2] Fi[24] Fp[15] FC5{ Fp[3]} Fp Fi Fp[2] Fs Fc Fi Fc[13]} Fs Fc[2] FC6{ Fp Fi[4]} Fi[2] FC7{ FL[4]} Fi}



static void Test_S13394C1()
{
  {
    init_simple_test("S13394C1");
    S13394C1 lv;
    check2(sizeof(lv), ABISELECT(536,392), "sizeof(S13394C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13394C1)");
    check_field_offset(lv, s13394c1f0, 0, "S13394C1.s13394c1f0");
    check_field_offset(lv, s13394c1f1, ABISELECT(16,12), "S13394C1.s13394c1f1");
    check_field_offset(lv, s13394c1f2, ABISELECT(32,20), "S13394C1.s13394c1f2");
    check_field_offset(lv, s13394c1f3, ABISELECT(60,48), "S13394C1.s13394c1f3");
    check_field_offset(lv, s13394c1f4, ABISELECT(80,64), "S13394C1.s13394c1f4");
    check_field_offset(lv, s13394c1f5, ABISELECT(112,80), "S13394C1.s13394c1f5");
    check_field_offset(lv, s13394c1f6, ABISELECT(128,96), "S13394C1.s13394c1f6");
    check_field_offset(lv, s13394c1f7, ABISELECT(456,324), "S13394C1.s13394c1f7");
    check_field_offset(lv, s13394c1f8, ABISELECT(458,326), "S13394C1.s13394c1f8");
    check_field_offset(lv, s13394c1f9, ABISELECT(464,328), "S13394C1.s13394c1f9");
    check_field_offset(lv, s13394c1f10, ABISELECT(488,348), "S13394C1.s13394c1f10");
    check_field_offset(lv, s13394c1f11, ABISELECT(496,356), "S13394C1.s13394c1f11");
    check_field_offset(lv, s13394c1f12, ABISELECT(528,388), "S13394C1.s13394c1f12");
  }
}
static Arrange_To_Call_Me vS13394C1(Test_S13394C1, "S13394C1", ABISELECT(536,392));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13393C1  {
  int s13393c1f0[3];
  void *s13393c1f1[2];
  int s13393c1f2[7];
  ::S13396C2_nt s13393c1f3;
  void *s13393c1f4[4];
  int s13393c1f5[4];
  ::S13388C2 s13393c1f6;
  short s13393c1f7;
  char s13393c1f8[2];
  ::S13396C6 s13393c1f9;
  int s13393c1f10[2];
  ::S856C10_nt s13393c1f11;
  int s13393c1f12;
};
//SIG(1 S13393C1) C1{ Fi[3] Fp[2] Fi[7] FC2{ Fc[2] Fs FC3{ Fi} Fs Fc[6]} Fp[4] Fi[4] FC4{ Fi[3] Fp[2] Fi[24] Fp[15] FC5{ Fp[3]} Fp Fi Fp[2] Fs Fc Fi Fc[13]} Fs Fc[2] FC6{ Fp Fi[4]} Fi[2] FC7{ Fl[4]} Fi}



static void Test_S13393C1()
{
  {
    init_simple_test("S13393C1");
    S13393C1 lv;
    check2(sizeof(lv), ABISELECT(536,376), "sizeof(S13393C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13393C1)");
    check_field_offset(lv, s13393c1f0, 0, "S13393C1.s13393c1f0");
    check_field_offset(lv, s13393c1f1, ABISELECT(16,12), "S13393C1.s13393c1f1");
    check_field_offset(lv, s13393c1f2, ABISELECT(32,20), "S13393C1.s13393c1f2");
    check_field_offset(lv, s13393c1f3, ABISELECT(60,48), "S13393C1.s13393c1f3");
    check_field_offset(lv, s13393c1f4, ABISELECT(80,64), "S13393C1.s13393c1f4");
    check_field_offset(lv, s13393c1f5, ABISELECT(112,80), "S13393C1.s13393c1f5");
    check_field_offset(lv, s13393c1f6, ABISELECT(128,96), "S13393C1.s13393c1f6");
    check_field_offset(lv, s13393c1f7, ABISELECT(456,324), "S13393C1.s13393c1f7");
    check_field_offset(lv, s13393c1f8, ABISELECT(458,326), "S13393C1.s13393c1f8");
    check_field_offset(lv, s13393c1f9, ABISELECT(464,328), "S13393C1.s13393c1f9");
    check_field_offset(lv, s13393c1f10, ABISELECT(488,348), "S13393C1.s13393c1f10");
    check_field_offset(lv, s13393c1f11, ABISELECT(496,356), "S13393C1.s13393c1f11");
    check_field_offset(lv, s13393c1f12, ABISELECT(528,372), "S13393C1.s13393c1f12");
  }
}
static Arrange_To_Call_Me vS13393C1(Test_S13393C1, "S13393C1", ABISELECT(536,376));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10136C2  {
  void *s10136c2f0;
  ::S857C9_nt s10136c2f1;
  ::S857C13_nt s10136c2f2;
  int s10136c2f3;
  ::S16130C9_nt s10136c2f4;
  virtual  ~S10136C2(); // _ZN8S10136C2D1Ev
  virtual void  v7(); // _ZN8S10136C22v7Ev
  virtual void  v8(); // _ZN8S10136C22v8Ev
  virtual void  v9(); // _ZN8S10136C22v9Ev
  virtual void  v10(); // _ZN8S10136C23v10Ev
  virtual void  v11(); // _ZN8S10136C23v11Ev
  virtual void  v12(); // _ZN8S10136C23v12Ev
  virtual void  v13(); // _ZN8S10136C23v13Ev
  virtual void  v14(); // _ZN8S10136C23v14Ev
  virtual void  v15(); // _ZN8S10136C23v15Ev
  virtual void  v16(); // _ZN8S10136C23v16Ev
  virtual void  v17(); // _ZN8S10136C23v17Ev
  virtual void  v18(); // _ZN8S10136C23v18Ev
  virtual void  v19(); // _ZN8S10136C23v19Ev
  virtual void  v20(); // _ZN8S10136C23v20Ev
  S10136C2(); // tgen
};
//SIG(-1 S10136C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp FC2{ m FC3{ FL[4]}} FC4{ m Fp FC2 FC5{ m Fp FC6{ Fi[4]}} Fi Fc} Fi FC7{ m Fp Fi FC8{ m}}}


 S10136C2 ::~S10136C2(){ note_dtor("S10136C2", this);}
void  S10136C2 ::v7(){vfunc_called(this, "_ZN8S10136C22v7Ev");}
void  S10136C2 ::v8(){vfunc_called(this, "_ZN8S10136C22v8Ev");}
void  S10136C2 ::v9(){vfunc_called(this, "_ZN8S10136C22v9Ev");}
void  S10136C2 ::v10(){vfunc_called(this, "_ZN8S10136C23v10Ev");}
void  S10136C2 ::v11(){vfunc_called(this, "_ZN8S10136C23v11Ev");}
void  S10136C2 ::v12(){vfunc_called(this, "_ZN8S10136C23v12Ev");}
void  S10136C2 ::v13(){vfunc_called(this, "_ZN8S10136C23v13Ev");}
void  S10136C2 ::v14(){vfunc_called(this, "_ZN8S10136C23v14Ev");}
void  S10136C2 ::v15(){vfunc_called(this, "_ZN8S10136C23v15Ev");}
void  S10136C2 ::v16(){vfunc_called(this, "_ZN8S10136C23v16Ev");}
void  S10136C2 ::v17(){vfunc_called(this, "_ZN8S10136C23v17Ev");}
void  S10136C2 ::v18(){vfunc_called(this, "_ZN8S10136C23v18Ev");}
void  S10136C2 ::v19(){vfunc_called(this, "_ZN8S10136C23v19Ev");}
void  S10136C2 ::v20(){vfunc_called(this, "_ZN8S10136C23v20Ev");}
S10136C2 ::S10136C2(){ note_ctor("S10136C2", this);} // tgen

static void Test_S10136C2()
{
  extern Class_Descriptor cd_S10136C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,31)];
    init_test(&cd_S10136C2, buf);
    S10136C2 *dp, &lv = *(dp=new (buf) S10136C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,120), "sizeof(S10136C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10136C2)");
    check_field_offset(lv, s10136c2f0, ABISELECT(8,4), "S10136C2.s10136c2f0");
    check_field_offset(lv, s10136c2f1, ABISELECT(16,8), "S10136C2.s10136c2f1");
    check_field_offset(lv, s10136c2f2, ABISELECT(48,40), "S10136C2.s10136c2f2");
    check_field_offset(lv, s10136c2f3, ABISELECT(120,104), "S10136C2.s10136c2f3");
    check_field_offset(lv, s10136c2f4, ABISELECT(128,108), "S10136C2.s10136c2f4");
    test_class_info(&lv, &cd_S10136C2);
    dp->~S10136C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10136C2(Test_S10136C2, "S10136C2", ABISELECT(144,120));

#else // __cplusplus

extern void _ZN8S10136C2C1Ev();
extern void _ZN8S10136C2D1Ev();
Name_Map name_map_S10136C2[] = {
  NSPAIR(_ZN8S10136C2C1Ev),
  NSPAIR(_ZN8S10136C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10136C2[];
extern void _ZN8S10136C2D1Ev();
extern void _ZN8S10136C2D0Ev();
extern void _ZN8S10136C22v7Ev();
extern void _ZN8S10136C22v8Ev();
extern void _ZN8S10136C22v9Ev();
extern void _ZN8S10136C23v10Ev();
extern void _ZN8S10136C23v11Ev();
extern void _ZN8S10136C23v12Ev();
extern void _ZN8S10136C23v13Ev();
extern void _ZN8S10136C23v14Ev();
extern void _ZN8S10136C23v15Ev();
extern void _ZN8S10136C23v16Ev();
extern void _ZN8S10136C23v17Ev();
extern void _ZN8S10136C23v18Ev();
extern void _ZN8S10136C23v19Ev();
extern void _ZN8S10136C23v20Ev();
static  VTBL_ENTRY vtc_S10136C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10136C2[0]),
  (VTBL_ENTRY)&_ZN8S10136C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10136C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10136C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10136C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10136C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v20Ev,
};
extern VTBL_ENTRY _ZTI8S10136C2[];
extern  VTBL_ENTRY _ZTV8S10136C2[];
Class_Descriptor cd_S10136C2 = {  "S10136C2", // class name
  0,0,//no base classes
  &(vtc_S10136C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,120), // object size
  NSPAIRA(_ZTI8S10136C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10136C2),18, //virtual function table var
  2, // 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  S10136C1  : S10136C2 {
  virtual  ~S10136C1(); // _ZN8S10136C1D1Ev
  virtual void  v1(); // _ZN8S10136C12v1Ev
  virtual void  v2(); // _ZN8S10136C12v2Ev
  virtual void  v3(); // _ZN8S10136C12v3Ev
  virtual void  v4(); // _ZN8S10136C12v4Ev
  virtual void  v5(); // _ZN8S10136C12v5Ev
  virtual void  v6(); // _ZN8S10136C12v6Ev
  S10136C1(); // tgen
};
//SIG(1 S10136C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp FC3{ m FC4{ FL[4]}} FC5{ m Fp FC3 FC6{ m Fp FC7{ Fi[4]}} Fi Fc} Fi FC8{ m Fp Fi FC9{ m}}} vd v1 v2 v3 v4 v5 v6}


 S10136C1 ::~S10136C1(){ note_dtor("S10136C1", this);}
void  S10136C1 ::v1(){vfunc_called(this, "_ZN8S10136C12v1Ev");}
void  S10136C1 ::v2(){vfunc_called(this, "_ZN8S10136C12v2Ev");}
void  S10136C1 ::v3(){vfunc_called(this, "_ZN8S10136C12v3Ev");}
void  S10136C1 ::v4(){vfunc_called(this, "_ZN8S10136C12v4Ev");}
void  S10136C1 ::v5(){vfunc_called(this, "_ZN8S10136C12v5Ev");}
void  S10136C1 ::v6(){vfunc_called(this, "_ZN8S10136C12v6Ev");}
S10136C1 ::S10136C1(){ note_ctor("S10136C1", this);} // tgen

static void Test_S10136C1()
{
  extern Class_Descriptor cd_S10136C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,31)];
    init_test(&cd_S10136C1, buf);
    S10136C1 *dp, &lv = *(dp=new (buf) S10136C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,120), "sizeof(S10136C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10136C1)");
    check_base_class_offset(lv, (S10136C2*), 0, "S10136C1");
    test_class_info(&lv, &cd_S10136C1);
    dp->~S10136C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10136C1(Test_S10136C1, "S10136C1", ABISELECT(144,120));

#else // __cplusplus

extern void _ZN8S10136C1C1Ev();
extern void _ZN8S10136C1D1Ev();
Name_Map name_map_S10136C1[] = {
  NSPAIR(_ZN8S10136C1C1Ev),
  NSPAIR(_ZN8S10136C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10136C2;
extern VTBL_ENTRY _ZTI8S10136C2[];
extern  VTBL_ENTRY _ZTV8S10136C2[];
static Base_Class bases_S10136C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10136C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10136C1[];
extern void _ZN8S10136C1D1Ev();
extern void _ZN8S10136C1D0Ev();
extern void _ZN8S10136C22v7Ev();
extern void _ZN8S10136C22v8Ev();
extern void _ZN8S10136C22v9Ev();
extern void _ZN8S10136C23v10Ev();
extern void _ZN8S10136C23v11Ev();
extern void _ZN8S10136C23v12Ev();
extern void _ZN8S10136C23v13Ev();
extern void _ZN8S10136C23v14Ev();
extern void _ZN8S10136C23v15Ev();
extern void _ZN8S10136C23v16Ev();
extern void _ZN8S10136C23v17Ev();
extern void _ZN8S10136C23v18Ev();
extern void _ZN8S10136C23v19Ev();
extern void _ZN8S10136C23v20Ev();
extern void _ZN8S10136C12v1Ev();
extern void _ZN8S10136C12v2Ev();
extern void _ZN8S10136C12v3Ev();
extern void _ZN8S10136C12v4Ev();
extern void _ZN8S10136C12v5Ev();
extern void _ZN8S10136C12v6Ev();
static  VTBL_ENTRY vtc_S10136C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10136C1[0]),
  (VTBL_ENTRY)&_ZN8S10136C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10136C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10136C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10136C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10136C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10136C23v20Ev,
  (VTBL_ENTRY)&_ZN8S10136C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10136C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10136C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10136C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10136C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10136C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10136C1[];
extern  VTBL_ENTRY _ZTV8S10136C1[];
Class_Descriptor cd_S10136C1 = {  "S10136C1", // class name
  bases_S10136C1, 1,
  &(vtc_S10136C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,120), // object size
  NSPAIRA(_ZTI8S10136C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10136C1),24, //virtual function table var
  2, // 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  S10135C2  {
  void *s10135c2f0;
  ::S856C9_nt s10135c2f1;
  ::S856C13_nt s10135c2f2;
  int s10135c2f3;
  ::S16130C9_nt s10135c2f4;
  virtual  ~S10135C2(); // _ZN8S10135C2D1Ev
  virtual void  v7(); // _ZN8S10135C22v7Ev
  virtual void  v8(); // _ZN8S10135C22v8Ev
  virtual void  v9(); // _ZN8S10135C22v9Ev
  virtual void  v10(); // _ZN8S10135C23v10Ev
  virtual void  v11(); // _ZN8S10135C23v11Ev
  virtual void  v12(); // _ZN8S10135C23v12Ev
  virtual void  v13(); // _ZN8S10135C23v13Ev
  virtual void  v14(); // _ZN8S10135C23v14Ev
  virtual void  v15(); // _ZN8S10135C23v15Ev
  virtual void  v16(); // _ZN8S10135C23v16Ev
  virtual void  v17(); // _ZN8S10135C23v17Ev
  virtual void  v18(); // _ZN8S10135C23v18Ev
  virtual void  v19(); // _ZN8S10135C23v19Ev
  virtual void  v20(); // _ZN8S10135C23v20Ev
  S10135C2(); // tgen
};
//SIG(-1 S10135C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp FC2{ m FC3{ Fl[4]}} FC4{ m Fp FC2 FC5{ m Fp FC6{ Fi[4]}} Fi Fc} Fi FC7{ m Fp Fi FC8{ m}}}


 S10135C2 ::~S10135C2(){ note_dtor("S10135C2", this);}
void  S10135C2 ::v7(){vfunc_called(this, "_ZN8S10135C22v7Ev");}
void  S10135C2 ::v8(){vfunc_called(this, "_ZN8S10135C22v8Ev");}
void  S10135C2 ::v9(){vfunc_called(this, "_ZN8S10135C22v9Ev");}
void  S10135C2 ::v10(){vfunc_called(this, "_ZN8S10135C23v10Ev");}
void  S10135C2 ::v11(){vfunc_called(this, "_ZN8S10135C23v11Ev");}
void  S10135C2 ::v12(){vfunc_called(this, "_ZN8S10135C23v12Ev");}
void  S10135C2 ::v13(){vfunc_called(this, "_ZN8S10135C23v13Ev");}
void  S10135C2 ::v14(){vfunc_called(this, "_ZN8S10135C23v14Ev");}
void  S10135C2 ::v15(){vfunc_called(this, "_ZN8S10135C23v15Ev");}
void  S10135C2 ::v16(){vfunc_called(this, "_ZN8S10135C23v16Ev");}
void  S10135C2 ::v17(){vfunc_called(this, "_ZN8S10135C23v17Ev");}
void  S10135C2 ::v18(){vfunc_called(this, "_ZN8S10135C23v18Ev");}
void  S10135C2 ::v19(){vfunc_called(this, "_ZN8S10135C23v19Ev");}
void  S10135C2 ::v20(){vfunc_called(this, "_ZN8S10135C23v20Ev");}
S10135C2 ::S10135C2(){ note_ctor("S10135C2", this);} // tgen

static void Test_S10135C2()
{
  extern Class_Descriptor cd_S10135C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S10135C2, buf);
    S10135C2 *dp, &lv = *(dp=new (buf) S10135C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S10135C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10135C2)");
    check_field_offset(lv, s10135c2f0, ABISELECT(8,4), "S10135C2.s10135c2f0");
    check_field_offset(lv, s10135c2f1, ABISELECT(16,8), "S10135C2.s10135c2f1");
    check_field_offset(lv, s10135c2f2, ABISELECT(48,24), "S10135C2.s10135c2f2");
    check_field_offset(lv, s10135c2f3, ABISELECT(120,72), "S10135C2.s10135c2f3");
    check_field_offset(lv, s10135c2f4, ABISELECT(128,76), "S10135C2.s10135c2f4");
    test_class_info(&lv, &cd_S10135C2);
    dp->~S10135C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10135C2(Test_S10135C2, "S10135C2", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN8S10135C2C1Ev();
extern void _ZN8S10135C2D1Ev();
Name_Map name_map_S10135C2[] = {
  NSPAIR(_ZN8S10135C2C1Ev),
  NSPAIR(_ZN8S10135C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10135C2[];
extern void _ZN8S10135C2D1Ev();
extern void _ZN8S10135C2D0Ev();
extern void _ZN8S10135C22v7Ev();
extern void _ZN8S10135C22v8Ev();
extern void _ZN8S10135C22v9Ev();
extern void _ZN8S10135C23v10Ev();
extern void _ZN8S10135C23v11Ev();
extern void _ZN8S10135C23v12Ev();
extern void _ZN8S10135C23v13Ev();
extern void _ZN8S10135C23v14Ev();
extern void _ZN8S10135C23v15Ev();
extern void _ZN8S10135C23v16Ev();
extern void _ZN8S10135C23v17Ev();
extern void _ZN8S10135C23v18Ev();
extern void _ZN8S10135C23v19Ev();
extern void _ZN8S10135C23v20Ev();
static  VTBL_ENTRY vtc_S10135C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10135C2[0]),
  (VTBL_ENTRY)&_ZN8S10135C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10135C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10135C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10135C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10135C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v20Ev,
};
extern VTBL_ENTRY _ZTI8S10135C2[];
extern  VTBL_ENTRY _ZTV8S10135C2[];
Class_Descriptor cd_S10135C2 = {  "S10135C2", // class name
  0,0,//no base classes
  &(vtc_S10135C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI8S10135C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10135C2),18, //virtual function table var
  2, // 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  S10135C1  : S10135C2 {
  virtual  ~S10135C1(); // _ZN8S10135C1D1Ev
  virtual void  v1(); // _ZN8S10135C12v1Ev
  virtual void  v2(); // _ZN8S10135C12v2Ev
  virtual void  v3(); // _ZN8S10135C12v3Ev
  virtual void  v4(); // _ZN8S10135C12v4Ev
  virtual void  v5(); // _ZN8S10135C12v5Ev
  virtual void  v6(); // _ZN8S10135C12v6Ev
  S10135C1(); // tgen
};
//SIG(1 S10135C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp FC3{ m FC4{ Fl[4]}} FC5{ m Fp FC3 FC6{ m Fp FC7{ Fi[4]}} Fi Fc} Fi FC8{ m Fp Fi FC9{ m}}} vd v1 v2 v3 v4 v5 v6}


 S10135C1 ::~S10135C1(){ note_dtor("S10135C1", this);}
void  S10135C1 ::v1(){vfunc_called(this, "_ZN8S10135C12v1Ev");}
void  S10135C1 ::v2(){vfunc_called(this, "_ZN8S10135C12v2Ev");}
void  S10135C1 ::v3(){vfunc_called(this, "_ZN8S10135C12v3Ev");}
void  S10135C1 ::v4(){vfunc_called(this, "_ZN8S10135C12v4Ev");}
void  S10135C1 ::v5(){vfunc_called(this, "_ZN8S10135C12v5Ev");}
void  S10135C1 ::v6(){vfunc_called(this, "_ZN8S10135C12v6Ev");}
S10135C1 ::S10135C1(){ note_ctor("S10135C1", this);} // tgen

static void Test_S10135C1()
{
  extern Class_Descriptor cd_S10135C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S10135C1, buf);
    S10135C1 *dp, &lv = *(dp=new (buf) S10135C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S10135C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10135C1)");
    check_base_class_offset(lv, (S10135C2*), 0, "S10135C1");
    test_class_info(&lv, &cd_S10135C1);
    dp->~S10135C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10135C1(Test_S10135C1, "S10135C1", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN8S10135C1C1Ev();
extern void _ZN8S10135C1D1Ev();
Name_Map name_map_S10135C1[] = {
  NSPAIR(_ZN8S10135C1C1Ev),
  NSPAIR(_ZN8S10135C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10135C2;
extern VTBL_ENTRY _ZTI8S10135C2[];
extern  VTBL_ENTRY _ZTV8S10135C2[];
static Base_Class bases_S10135C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10135C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10135C1[];
extern void _ZN8S10135C1D1Ev();
extern void _ZN8S10135C1D0Ev();
extern void _ZN8S10135C22v7Ev();
extern void _ZN8S10135C22v8Ev();
extern void _ZN8S10135C22v9Ev();
extern void _ZN8S10135C23v10Ev();
extern void _ZN8S10135C23v11Ev();
extern void _ZN8S10135C23v12Ev();
extern void _ZN8S10135C23v13Ev();
extern void _ZN8S10135C23v14Ev();
extern void _ZN8S10135C23v15Ev();
extern void _ZN8S10135C23v16Ev();
extern void _ZN8S10135C23v17Ev();
extern void _ZN8S10135C23v18Ev();
extern void _ZN8S10135C23v19Ev();
extern void _ZN8S10135C23v20Ev();
extern void _ZN8S10135C12v1Ev();
extern void _ZN8S10135C12v2Ev();
extern void _ZN8S10135C12v3Ev();
extern void _ZN8S10135C12v4Ev();
extern void _ZN8S10135C12v5Ev();
extern void _ZN8S10135C12v6Ev();
static  VTBL_ENTRY vtc_S10135C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10135C1[0]),
  (VTBL_ENTRY)&_ZN8S10135C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10135C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10135C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10135C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10135C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10135C23v20Ev,
  (VTBL_ENTRY)&_ZN8S10135C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10135C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10135C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10135C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10135C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10135C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10135C1[];
extern  VTBL_ENTRY _ZTV8S10135C1[];
Class_Descriptor cd_S10135C1 = {  "S10135C1", // class name
  bases_S10135C1, 1,
  &(vtc_S10135C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI8S10135C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10135C1),24, //virtual function table var
  2, // 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  S9479C2  {
  void *s9479c2f0;
  ::S857C9_nt s9479c2f1;
  ::S857C13_nt s9479c2f2;
  int s9479c2f3;
  ::S16130C9_nt s9479c2f4;
  virtual  ~S9479C2(); // _ZN7S9479C2D1Ev
  virtual void  v3(); // _ZN7S9479C22v3Ev
  virtual void  v4(); // _ZN7S9479C22v4Ev
  virtual void  v5(); // _ZN7S9479C22v5Ev
  virtual void  v6(); // _ZN7S9479C22v6Ev
  virtual void  v7(); // _ZN7S9479C22v7Ev
  virtual void  v8(); // _ZN7S9479C22v8Ev
  virtual void  v9(); // _ZN7S9479C22v9Ev
  virtual void  v10(); // _ZN7S9479C23v10Ev
  virtual void  v11(); // _ZN7S9479C23v11Ev
  virtual void  v12(); // _ZN7S9479C23v12Ev
  virtual void  v13(); // _ZN7S9479C23v13Ev
  virtual void  v14(); // _ZN7S9479C23v14Ev
  virtual void  v15(); // _ZN7S9479C23v15Ev
  virtual void  v16(); // _ZN7S9479C23v16Ev
  S9479C2(); // tgen
};
//SIG(-1 S9479C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp FC2{ m FC3{ FL[4]}} FC4{ m Fp FC2 FC5{ m Fp FC6{ Fi[4]}} Fi Fc} Fi FC7{ m Fp Fi FC8{ m}}}


 S9479C2 ::~S9479C2(){ note_dtor("S9479C2", this);}
void  S9479C2 ::v3(){vfunc_called(this, "_ZN7S9479C22v3Ev");}
void  S9479C2 ::v4(){vfunc_called(this, "_ZN7S9479C22v4Ev");}
void  S9479C2 ::v5(){vfunc_called(this, "_ZN7S9479C22v5Ev");}
void  S9479C2 ::v6(){vfunc_called(this, "_ZN7S9479C22v6Ev");}
void  S9479C2 ::v7(){vfunc_called(this, "_ZN7S9479C22v7Ev");}
void  S9479C2 ::v8(){vfunc_called(this, "_ZN7S9479C22v8Ev");}
void  S9479C2 ::v9(){vfunc_called(this, "_ZN7S9479C22v9Ev");}
void  S9479C2 ::v10(){vfunc_called(this, "_ZN7S9479C23v10Ev");}
void  S9479C2 ::v11(){vfunc_called(this, "_ZN7S9479C23v11Ev");}
void  S9479C2 ::v12(){vfunc_called(this, "_ZN7S9479C23v12Ev");}
void  S9479C2 ::v13(){vfunc_called(this, "_ZN7S9479C23v13Ev");}
void  S9479C2 ::v14(){vfunc_called(this, "_ZN7S9479C23v14Ev");}
void  S9479C2 ::v15(){vfunc_called(this, "_ZN7S9479C23v15Ev");}
void  S9479C2 ::v16(){vfunc_called(this, "_ZN7S9479C23v16Ev");}
S9479C2 ::S9479C2(){ note_ctor("S9479C2", this);} // tgen

static void Test_S9479C2()
{
  extern Class_Descriptor cd_S9479C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,31)];
    init_test(&cd_S9479C2, buf);
    S9479C2 *dp, &lv = *(dp=new (buf) S9479C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,120), "sizeof(S9479C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9479C2)");
    check_field_offset(lv, s9479c2f0, ABISELECT(8,4), "S9479C2.s9479c2f0");
    check_field_offset(lv, s9479c2f1, ABISELECT(16,8), "S9479C2.s9479c2f1");
    check_field_offset(lv, s9479c2f2, ABISELECT(48,40), "S9479C2.s9479c2f2");
    check_field_offset(lv, s9479c2f3, ABISELECT(120,104), "S9479C2.s9479c2f3");
    check_field_offset(lv, s9479c2f4, ABISELECT(128,108), "S9479C2.s9479c2f4");
    test_class_info(&lv, &cd_S9479C2);
    dp->~S9479C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9479C2(Test_S9479C2, "S9479C2", ABISELECT(144,120));

#else // __cplusplus

extern void _ZN7S9479C2C1Ev();
extern void _ZN7S9479C2D1Ev();
Name_Map name_map_S9479C2[] = {
  NSPAIR(_ZN7S9479C2C1Ev),
  NSPAIR(_ZN7S9479C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9479C2[];
extern void _ZN7S9479C2D1Ev();
extern void _ZN7S9479C2D0Ev();
extern void _ZN7S9479C22v3Ev();
extern void _ZN7S9479C22v4Ev();
extern void _ZN7S9479C22v5Ev();
extern void _ZN7S9479C22v6Ev();
extern void _ZN7S9479C22v7Ev();
extern void _ZN7S9479C22v8Ev();
extern void _ZN7S9479C22v9Ev();
extern void _ZN7S9479C23v10Ev();
extern void _ZN7S9479C23v11Ev();
extern void _ZN7S9479C23v12Ev();
extern void _ZN7S9479C23v13Ev();
extern void _ZN7S9479C23v14Ev();
extern void _ZN7S9479C23v15Ev();
extern void _ZN7S9479C23v16Ev();
static  VTBL_ENTRY vtc_S9479C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9479C2[0]),
  (VTBL_ENTRY)&_ZN7S9479C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9479C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9479C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9479C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9479C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9479C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9479C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9479C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9479C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9479C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9479C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9479C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9479C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9479C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9479C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9479C23v16Ev,
};
extern VTBL_ENTRY _ZTI7S9479C2[];
extern  VTBL_ENTRY _ZTV7S9479C2[];
Class_Descriptor cd_S9479C2 = {  "S9479C2", // class name
  0,0,//no base classes
  &(vtc_S9479C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,120), // object size
  NSPAIRA(_ZTI7S9479C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9479C2),18, //virtual function table var
  2, // 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  S9479C1  : S9479C2 {
  virtual  ~S9479C1(); // _ZN7S9479C1D1Ev
  virtual void  v1(); // _ZN7S9479C12v1Ev
  virtual void  v2(); // _ZN7S9479C12v2Ev
  S9479C1(); // tgen
};
//SIG(1 S9479C1) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp FC3{ m FC4{ FL[4]}} FC5{ m Fp FC3 FC6{ m Fp FC7{ Fi[4]}} Fi Fc} Fi FC8{ m Fp Fi FC9{ m}}} vd v1 v2}


 S9479C1 ::~S9479C1(){ note_dtor("S9479C1", this);}
void  S9479C1 ::v1(){vfunc_called(this, "_ZN7S9479C12v1Ev");}
void  S9479C1 ::v2(){vfunc_called(this, "_ZN7S9479C12v2Ev");}
S9479C1 ::S9479C1(){ note_ctor("S9479C1", this);} // tgen

static void Test_S9479C1()
{
  extern Class_Descriptor cd_S9479C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,31)];
    init_test(&cd_S9479C1, buf);
    S9479C1 *dp, &lv = *(dp=new (buf) S9479C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,120), "sizeof(S9479C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9479C1)");
    check_base_class_offset(lv, (S9479C2*), 0, "S9479C1");
    test_class_info(&lv, &cd_S9479C1);
    dp->~S9479C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9479C1(Test_S9479C1, "S9479C1", ABISELECT(144,120));

#else // __cplusplus

extern void _ZN7S9479C1C1Ev();
extern void _ZN7S9479C1D1Ev();
Name_Map name_map_S9479C1[] = {
  NSPAIR(_ZN7S9479C1C1Ev),
  NSPAIR(_ZN7S9479C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9479C2;
extern VTBL_ENTRY _ZTI7S9479C2[];
extern  VTBL_ENTRY _ZTV7S9479C2[];
static Base_Class bases_S9479C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9479C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9479C1[];
extern void _ZN7S9479C1D1Ev();
extern void _ZN7S9479C1D0Ev();
extern void _ZN7S9479C22v3Ev();
extern void _ZN7S9479C22v4Ev();
extern void _ZN7S9479C22v5Ev();
extern void _ZN7S9479C22v6Ev();
extern void _ZN7S9479C22v7Ev();
extern void _ZN7S9479C22v8Ev();
extern void _ZN7S9479C22v9Ev();
extern void _ZN7S9479C23v10Ev();
extern void _ZN7S9479C23v11Ev();
extern void _ZN7S9479C23v12Ev();
extern void _ZN7S9479C23v13Ev();
extern void _ZN7S9479C23v14Ev();
extern void _ZN7S9479C23v15Ev();
extern void _ZN7S9479C23v16Ev();
extern void _ZN7S9479C12v1Ev();
extern void _ZN7S9479C12v2Ev();
static  VTBL_ENTRY vtc_S9479C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9479C1[0]),
  (VTBL_ENTRY)&_ZN7S9479C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9479C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9479C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9479C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9479C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9479C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9479C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9479C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9479C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9479C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9479C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9479C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9479C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9479C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9479C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9479C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9479C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9479C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9479C1[];
extern  VTBL_ENTRY _ZTV7S9479C1[];
Class_Descriptor cd_S9479C1 = {  "S9479C1", // class name
  bases_S9479C1, 1,
  &(vtc_S9479C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,120), // object size
  NSPAIRA(_ZTI7S9479C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9479C1),20, //virtual function table var
  2, // 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  S9478C2  {
  void *s9478c2f0;
  ::S856C9_nt s9478c2f1;
  ::S856C13_nt s9478c2f2;
  int s9478c2f3;
  ::S16130C9_nt s9478c2f4;
  virtual  ~S9478C2(); // _ZN7S9478C2D1Ev
  virtual void  v3(); // _ZN7S9478C22v3Ev
  virtual void  v4(); // _ZN7S9478C22v4Ev
  virtual void  v5(); // _ZN7S9478C22v5Ev
  virtual void  v6(); // _ZN7S9478C22v6Ev
  virtual void  v7(); // _ZN7S9478C22v7Ev
  virtual void  v8(); // _ZN7S9478C22v8Ev
  virtual void  v9(); // _ZN7S9478C22v9Ev
  virtual void  v10(); // _ZN7S9478C23v10Ev
  virtual void  v11(); // _ZN7S9478C23v11Ev
  virtual void  v12(); // _ZN7S9478C23v12Ev
  virtual void  v13(); // _ZN7S9478C23v13Ev
  virtual void  v14(); // _ZN7S9478C23v14Ev
  virtual void  v15(); // _ZN7S9478C23v15Ev
  virtual void  v16(); // _ZN7S9478C23v16Ev
  S9478C2(); // tgen
};
//SIG(-1 S9478C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp FC2{ m FC3{ Fl[4]}} FC4{ m Fp FC2 FC5{ m Fp FC6{ Fi[4]}} Fi Fc} Fi FC7{ m Fp Fi FC8{ m}}}


 S9478C2 ::~S9478C2(){ note_dtor("S9478C2", this);}
void  S9478C2 ::v3(){vfunc_called(this, "_ZN7S9478C22v3Ev");}
void  S9478C2 ::v4(){vfunc_called(this, "_ZN7S9478C22v4Ev");}
void  S9478C2 ::v5(){vfunc_called(this, "_ZN7S9478C22v5Ev");}
void  S9478C2 ::v6(){vfunc_called(this, "_ZN7S9478C22v6Ev");}
void  S9478C2 ::v7(){vfunc_called(this, "_ZN7S9478C22v7Ev");}
void  S9478C2 ::v8(){vfunc_called(this, "_ZN7S9478C22v8Ev");}
void  S9478C2 ::v9(){vfunc_called(this, "_ZN7S9478C22v9Ev");}
void  S9478C2 ::v10(){vfunc_called(this, "_ZN7S9478C23v10Ev");}
void  S9478C2 ::v11(){vfunc_called(this, "_ZN7S9478C23v11Ev");}
void  S9478C2 ::v12(){vfunc_called(this, "_ZN7S9478C23v12Ev");}
void  S9478C2 ::v13(){vfunc_called(this, "_ZN7S9478C23v13Ev");}
void  S9478C2 ::v14(){vfunc_called(this, "_ZN7S9478C23v14Ev");}
void  S9478C2 ::v15(){vfunc_called(this, "_ZN7S9478C23v15Ev");}
void  S9478C2 ::v16(){vfunc_called(this, "_ZN7S9478C23v16Ev");}
S9478C2 ::S9478C2(){ note_ctor("S9478C2", this);} // tgen

static void Test_S9478C2()
{
  extern Class_Descriptor cd_S9478C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S9478C2, buf);
    S9478C2 *dp, &lv = *(dp=new (buf) S9478C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S9478C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9478C2)");
    check_field_offset(lv, s9478c2f0, ABISELECT(8,4), "S9478C2.s9478c2f0");
    check_field_offset(lv, s9478c2f1, ABISELECT(16,8), "S9478C2.s9478c2f1");
    check_field_offset(lv, s9478c2f2, ABISELECT(48,24), "S9478C2.s9478c2f2");
    check_field_offset(lv, s9478c2f3, ABISELECT(120,72), "S9478C2.s9478c2f3");
    check_field_offset(lv, s9478c2f4, ABISELECT(128,76), "S9478C2.s9478c2f4");
    test_class_info(&lv, &cd_S9478C2);
    dp->~S9478C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9478C2(Test_S9478C2, "S9478C2", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S9478C2C1Ev();
extern void _ZN7S9478C2D1Ev();
Name_Map name_map_S9478C2[] = {
  NSPAIR(_ZN7S9478C2C1Ev),
  NSPAIR(_ZN7S9478C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9478C2[];
extern void _ZN7S9478C2D1Ev();
extern void _ZN7S9478C2D0Ev();
extern void _ZN7S9478C22v3Ev();
extern void _ZN7S9478C22v4Ev();
extern void _ZN7S9478C22v5Ev();
extern void _ZN7S9478C22v6Ev();
extern void _ZN7S9478C22v7Ev();
extern void _ZN7S9478C22v8Ev();
extern void _ZN7S9478C22v9Ev();
extern void _ZN7S9478C23v10Ev();
extern void _ZN7S9478C23v11Ev();
extern void _ZN7S9478C23v12Ev();
extern void _ZN7S9478C23v13Ev();
extern void _ZN7S9478C23v14Ev();
extern void _ZN7S9478C23v15Ev();
extern void _ZN7S9478C23v16Ev();
static  VTBL_ENTRY vtc_S9478C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9478C2[0]),
  (VTBL_ENTRY)&_ZN7S9478C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9478C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9478C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9478C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9478C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9478C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9478C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9478C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9478C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9478C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9478C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9478C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9478C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9478C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9478C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9478C23v16Ev,
};
extern VTBL_ENTRY _ZTI7S9478C2[];
extern  VTBL_ENTRY _ZTV7S9478C2[];
Class_Descriptor cd_S9478C2 = {  "S9478C2", // class name
  0,0,//no base classes
  &(vtc_S9478C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S9478C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9478C2),18, //virtual function table var
  2, // 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  S9478C1  : S9478C2 {
  virtual  ~S9478C1(); // _ZN7S9478C1D1Ev
  virtual void  v1(); // _ZN7S9478C12v1Ev
  virtual void  v2(); // _ZN7S9478C12v2Ev
  S9478C1(); // tgen
};
//SIG(1 S9478C1) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp FC3{ m FC4{ Fl[4]}} FC5{ m Fp FC3 FC6{ m Fp FC7{ Fi[4]}} Fi Fc} Fi FC8{ m Fp Fi FC9{ m}}} vd v1 v2}


 S9478C1 ::~S9478C1(){ note_dtor("S9478C1", this);}
void  S9478C1 ::v1(){vfunc_called(this, "_ZN7S9478C12v1Ev");}
void  S9478C1 ::v2(){vfunc_called(this, "_ZN7S9478C12v2Ev");}
S9478C1 ::S9478C1(){ note_ctor("S9478C1", this);} // tgen

static void Test_S9478C1()
{
  extern Class_Descriptor cd_S9478C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S9478C1, buf);
    S9478C1 *dp, &lv = *(dp=new (buf) S9478C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S9478C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9478C1)");
    check_base_class_offset(lv, (S9478C2*), 0, "S9478C1");
    test_class_info(&lv, &cd_S9478C1);
    dp->~S9478C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9478C1(Test_S9478C1, "S9478C1", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S9478C1C1Ev();
extern void _ZN7S9478C1D1Ev();
Name_Map name_map_S9478C1[] = {
  NSPAIR(_ZN7S9478C1C1Ev),
  NSPAIR(_ZN7S9478C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9478C2;
extern VTBL_ENTRY _ZTI7S9478C2[];
extern  VTBL_ENTRY _ZTV7S9478C2[];
static Base_Class bases_S9478C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9478C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9478C1[];
extern void _ZN7S9478C1D1Ev();
extern void _ZN7S9478C1D0Ev();
extern void _ZN7S9478C22v3Ev();
extern void _ZN7S9478C22v4Ev();
extern void _ZN7S9478C22v5Ev();
extern void _ZN7S9478C22v6Ev();
extern void _ZN7S9478C22v7Ev();
extern void _ZN7S9478C22v8Ev();
extern void _ZN7S9478C22v9Ev();
extern void _ZN7S9478C23v10Ev();
extern void _ZN7S9478C23v11Ev();
extern void _ZN7S9478C23v12Ev();
extern void _ZN7S9478C23v13Ev();
extern void _ZN7S9478C23v14Ev();
extern void _ZN7S9478C23v15Ev();
extern void _ZN7S9478C23v16Ev();
extern void _ZN7S9478C12v1Ev();
extern void _ZN7S9478C12v2Ev();
static  VTBL_ENTRY vtc_S9478C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9478C1[0]),
  (VTBL_ENTRY)&_ZN7S9478C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9478C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9478C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9478C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9478C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9478C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9478C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9478C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9478C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9478C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9478C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9478C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9478C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9478C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9478C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9478C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9478C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9478C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9478C1[];
extern  VTBL_ENTRY _ZTV7S9478C1[];
Class_Descriptor cd_S9478C1 = {  "S9478C1", // class name
  bases_S9478C1, 1,
  &(vtc_S9478C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S9478C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9478C1),20, //virtual function table var
  2, // 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  S9728C2_nt  {
  ::S16130C9_nt s9728c2f0;
  int s9728c2f1[2];
  char s9728c2f2;
  virtual  ~S9728C2_nt(); // _ZN10S9728C2_ntD1Ev
  virtual void  v4(); // _ZN10S9728C2_nt2v4Ev
  virtual void  v5(); // _ZN10S9728C2_nt2v5Ev
  virtual void  v6(); // _ZN10S9728C2_nt2v6Ev
  S9728C2_nt(); // tgen
};
//SIG(-1 S9728C2_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9728C2_nt ::~S9728C2_nt(){ note_dtor("S9728C2_nt", this);}
void  S9728C2_nt ::v4(){vfunc_called(this, "_ZN10S9728C2_nt2v4Ev");}
void  S9728C2_nt ::v5(){vfunc_called(this, "_ZN10S9728C2_nt2v5Ev");}
void  S9728C2_nt ::v6(){vfunc_called(this, "_ZN10S9728C2_nt2v6Ev");}
S9728C2_nt ::S9728C2_nt(){ note_ctor("S9728C2_nt", this);} // tgen

//skip512 S9728C2_nt

#else // __cplusplus

extern void _ZN10S9728C2_ntC1Ev();
extern void _ZN10S9728C2_ntD1Ev();
Name_Map name_map_S9728C2_nt[] = {
  NSPAIR(_ZN10S9728C2_ntC1Ev),
  NSPAIR(_ZN10S9728C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9728C2_nt[];
extern void _ZN10S9728C2_ntD1Ev();
extern void _ZN10S9728C2_ntD0Ev();
extern void _ZN10S9728C2_nt2v4Ev();
extern void _ZN10S9728C2_nt2v5Ev();
extern void _ZN10S9728C2_nt2v6Ev();
static  VTBL_ENTRY vtc_S9728C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9728C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9728C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9728C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9728C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9728C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9728C2_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S9728C2_nt[];
VTBL_ENTRY *P__ZTI10S9728C2_nt = _ZTI10S9728C2_nt; 
extern  VTBL_ENTRY _ZTV10S9728C2_nt[];
Class_Descriptor cd_S9728C2_nt = {  "S9728C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9728C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S9728C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9728C2_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  S9728C7_nt  {
  __tsi64 s9728c7f0;
};
//SIG(-1 S9728C7_nt) C1{ FL}



//skip512 S9728C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9728C9_nt  {
  __tsi64 s9728c9f0[4];
};
//SIG(-1 S9728C9_nt) C1{ FL[4]}



//skip512 S9728C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9728C1  : S9728C2_nt {
  void *s9728c1f0[5];
  ::S5408C15_nt s9728c1f1;
  char s9728c1f2;
  int s9728c1f3[2];
  __tsi64 s9728c1f4[3];
  char s9728c1f5;
  ::S9728C7_nt s9728c1f6;
  ::S9728C7_nt s9728c1f7;
  ::S857C10_nt s9728c1f8;
  ::S857C10_nt s9728c1f9;
  ::S9728C9_nt s9728c1f10;
  virtual  ~S9728C1(); // _ZN7S9728C1D1Ev
  virtual void  v1(); // _ZN7S9728C12v1Ev
  virtual void  v2(); // _ZN7S9728C12v2Ev
  virtual void  v3(); // _ZN7S9728C12v3Ev
  S9728C1(); // tgen
};
//SIG(1 S9728C1) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 Fp[5] FC5{ m Fp Fi[2] FC4} Fc Fi[2] FL[3] Fc FC6{ FL} FC6 FC7{ FL[4]} FC7 FC8{ FL[4]}}


 S9728C1 ::~S9728C1(){ note_dtor("S9728C1", this);}
void  S9728C1 ::v1(){vfunc_called(this, "_ZN7S9728C12v1Ev");}
void  S9728C1 ::v2(){vfunc_called(this, "_ZN7S9728C12v2Ev");}
void  S9728C1 ::v3(){vfunc_called(this, "_ZN7S9728C12v3Ev");}
S9728C1 ::S9728C1(){ note_ctor("S9728C1", this);} // tgen

static void Test_S9728C1()
{
  extern Class_Descriptor cd_S9728C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,55)];
    init_test(&cd_S9728C1, buf);
    S9728C1 *dp, &lv = *(dp=new (buf) S9728C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,216), "sizeof(S9728C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9728C1)");
    check_base_class_offset(lv, (S9728C2_nt*), 0, "S9728C1");
    check_field_offset(lv, s9728c1f0, ABISELECT(40,28), "S9728C1.s9728c1f0");
    check_field_offset(lv, s9728c1f1, ABISELECT(80,48), "S9728C1.s9728c1f1");
    check_field_offset(lv, s9728c1f2, ABISELECT(104,64), "S9728C1.s9728c1f2");
    check_field_offset(lv, s9728c1f3, ABISELECT(108,68), "S9728C1.s9728c1f3");
    check_field_offset(lv, s9728c1f4, ABISELECT(120,76), "S9728C1.s9728c1f4");
    check_field_offset(lv, s9728c1f5, ABISELECT(144,100), "S9728C1.s9728c1f5");
    check_field_offset(lv, s9728c1f6, ABISELECT(152,104), "S9728C1.s9728c1f6");
    check_field_offset(lv, s9728c1f7, ABISELECT(160,112), "S9728C1.s9728c1f7");
    check_field_offset(lv, s9728c1f8, ABISELECT(168,120), "S9728C1.s9728c1f8");
    check_field_offset(lv, s9728c1f9, ABISELECT(200,152), "S9728C1.s9728c1f9");
    check_field_offset(lv, s9728c1f10, ABISELECT(232,184), "S9728C1.s9728c1f10");
    test_class_info(&lv, &cd_S9728C1);
    dp->~S9728C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9728C1(Test_S9728C1, "S9728C1", ABISELECT(264,216));

#else // __cplusplus

extern void _ZN7S9728C1C1Ev();
extern void _ZN7S9728C1D1Ev();
Name_Map name_map_S9728C1[] = {
  NSPAIR(_ZN7S9728C1C1Ev),
  NSPAIR(_ZN7S9728C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9728C2_nt;
extern VTBL_ENTRY _ZTI10S9728C2_nt[];
extern  VTBL_ENTRY _ZTV10S9728C2_nt[];
static Base_Class bases_S9728C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9728C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9728C1[];
extern void _ZN7S9728C1D1Ev();
extern void _ZN7S9728C1D0Ev();
extern void _ZN10S9728C2_nt2v4Ev();
extern void _ZN10S9728C2_nt2v5Ev();
extern void _ZN10S9728C2_nt2v6Ev();
extern void _ZN7S9728C12v1Ev();
extern void _ZN7S9728C12v2Ev();
extern void _ZN7S9728C12v3Ev();
static  VTBL_ENTRY vtc_S9728C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9728C1[0]),
  (VTBL_ENTRY)&_ZN7S9728C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9728C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9728C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9728C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9728C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S9728C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9728C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9728C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9728C1[];
extern  VTBL_ENTRY _ZTV7S9728C1[];
Class_Descriptor cd_S9728C1 = {  "S9728C1", // class name
  bases_S9728C1, 1,
  &(vtc_S9728C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,216), // object size
  NSPAIRA(_ZTI7S9728C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9728C1),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  S18325C6_nt  : S5408C5_nt {
};
//SIG(-1 S18325C6_nt) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



//skip512 S18325C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S5408C5_nt;
static Base_Class bases_S18325C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5408C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S18325C1  {
  void *s18325c1f0[3];
  int s18325c1f1[2];
  void *s18325c1f2;
  ::S5408C4_nt s18325c1f3;
  int s18325c1f4;
  char s18325c1f5;
  ::S18325C6_nt s18325c1f6;
  ::S5408C15_nt s18325c1f7;
  ::S857C7_nt s18325c1f8;
  void *s18325c1f9;
  void  mf18325c1(); // _ZN8S18325C19mf18325c1Ev
};
//SIG(1 S18325C1) C1{ m Fp[3] Fi[2] Fp FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}} Fi Fc FC6{ BC3} FC7{ m Fp Fi[2] FC5} FC8{ m Fp Fi[2] FC4} Fp}


void  S18325C1 ::mf18325c1(){}

static void Test_S18325C1()
{
  {
    init_simple_test("S18325C1");
    S18325C1 lv;
    check2(sizeof(lv), ABISELECT(136,92), "sizeof(S18325C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18325C1)");
    check_field_offset(lv, s18325c1f0, 0, "S18325C1.s18325c1f0");
    check_field_offset(lv, s18325c1f1, ABISELECT(24,12), "S18325C1.s18325c1f1");
    check_field_offset(lv, s18325c1f2, ABISELECT(32,20), "S18325C1.s18325c1f2");
    check_field_offset(lv, s18325c1f3, ABISELECT(40,24), "S18325C1.s18325c1f3");
    check_field_offset(lv, s18325c1f4, ABISELECT(56,36), "S18325C1.s18325c1f4");
    check_field_offset(lv, s18325c1f5, ABISELECT(60,40), "S18325C1.s18325c1f5");
    check_field_offset(lv, s18325c1f6, ABISELECT(64,44), "S18325C1.s18325c1f6");
    check_field_offset(lv, s18325c1f7, ABISELECT(80,56), "S18325C1.s18325c1f7");
    check_field_offset(lv, s18325c1f8, ABISELECT(104,72), "S18325C1.s18325c1f8");
    check_field_offset(lv, s18325c1f9, ABISELECT(128,88), "S18325C1.s18325c1f9");
  }
}
static Arrange_To_Call_Me vS18325C1(Test_S18325C1, "S18325C1", ABISELECT(136,92));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7183C2_nt  {
  virtual  ~S7183C2_nt(); // _ZN10S7183C2_ntD1Ev
  virtual void  v9(); // _ZN10S7183C2_nt2v9Ev
  virtual void  v10(); // _ZN10S7183C2_nt3v10Ev
  virtual void  v11(); // _ZN10S7183C2_nt3v11Ev
  virtual void  v12(); // _ZN10S7183C2_nt3v12Ev
  virtual void  v13(); // _ZN10S7183C2_nt3v13Ev
  virtual void  v14(); // _ZN10S7183C2_nt3v14Ev
  virtual void  v15(); // _ZN10S7183C2_nt3v15Ev
  S7183C2_nt(); // tgen
};
//SIG(-1 S7183C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S7183C2_nt ::~S7183C2_nt(){ note_dtor("S7183C2_nt", this);}
void  S7183C2_nt ::v9(){vfunc_called(this, "_ZN10S7183C2_nt2v9Ev");}
void  S7183C2_nt ::v10(){vfunc_called(this, "_ZN10S7183C2_nt3v10Ev");}
void  S7183C2_nt ::v11(){vfunc_called(this, "_ZN10S7183C2_nt3v11Ev");}
void  S7183C2_nt ::v12(){vfunc_called(this, "_ZN10S7183C2_nt3v12Ev");}
void  S7183C2_nt ::v13(){vfunc_called(this, "_ZN10S7183C2_nt3v13Ev");}
void  S7183C2_nt ::v14(){vfunc_called(this, "_ZN10S7183C2_nt3v14Ev");}
void  S7183C2_nt ::v15(){vfunc_called(this, "_ZN10S7183C2_nt3v15Ev");}
S7183C2_nt ::S7183C2_nt(){ note_ctor("S7183C2_nt", this);} // tgen

//skip512 S7183C2_nt

#else // __cplusplus

extern void _ZN10S7183C2_ntC1Ev();
extern void _ZN10S7183C2_ntD1Ev();
Name_Map name_map_S7183C2_nt[] = {
  NSPAIR(_ZN10S7183C2_ntC1Ev),
  NSPAIR(_ZN10S7183C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7183C2_nt[];
extern void _ZN10S7183C2_ntD1Ev();
extern void _ZN10S7183C2_ntD0Ev();
extern void _ZN10S7183C2_nt2v9Ev();
extern void _ZN10S7183C2_nt3v10Ev();
extern void _ZN10S7183C2_nt3v11Ev();
extern void _ZN10S7183C2_nt3v12Ev();
extern void _ZN10S7183C2_nt3v13Ev();
extern void _ZN10S7183C2_nt3v14Ev();
extern void _ZN10S7183C2_nt3v15Ev();
static  VTBL_ENTRY vtc_S7183C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7183C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7183C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7183C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7183C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7183C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7183C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7183C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7183C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7183C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7183C2_nt3v15Ev,
};
extern VTBL_ENTRY _ZTI10S7183C2_nt[];
VTBL_ENTRY *P__ZTI10S7183C2_nt = _ZTI10S7183C2_nt; 
extern  VTBL_ENTRY _ZTV10S7183C2_nt[];
Class_Descriptor cd_S7183C2_nt = {  "S7183C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7183C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7183C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7183C2_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  S7183C3  {
  virtual  ~S7183C3(); // _ZN7S7183C3D1Ev
  virtual void  v16(); // _ZN7S7183C33v16Ev
  S7183C3(); // tgen
};
//SIG(-1 S7183C3) C1{ vd v1}


 S7183C3 ::~S7183C3(){ note_dtor("S7183C3", this);}
void  S7183C3 ::v16(){vfunc_called(this, "_ZN7S7183C33v16Ev");}
S7183C3 ::S7183C3(){ note_ctor("S7183C3", this);} // tgen

static void Test_S7183C3()
{
  extern Class_Descriptor cd_S7183C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7183C3, buf);
    S7183C3 *dp, &lv = *(dp=new (buf) S7183C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7183C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7183C3)");
    test_class_info(&lv, &cd_S7183C3);
    dp->~S7183C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7183C3(Test_S7183C3, "S7183C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7183C3C1Ev();
extern void _ZN7S7183C3D1Ev();
Name_Map name_map_S7183C3[] = {
  NSPAIR(_ZN7S7183C3C1Ev),
  NSPAIR(_ZN7S7183C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7183C3[];
extern void _ZN7S7183C3D1Ev();
extern void _ZN7S7183C3D0Ev();
extern void _ZN7S7183C33v16Ev();
static  VTBL_ENTRY vtc_S7183C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7183C3[0]),
  (VTBL_ENTRY)&_ZN7S7183C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7183C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7183C33v16Ev,
};
extern VTBL_ENTRY _ZTI7S7183C3[];
extern  VTBL_ENTRY _ZTV7S7183C3[];
Class_Descriptor cd_S7183C3 = {  "S7183C3", // class name
  0,0,//no base classes
  &(vtc_S7183C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7183C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7183C3),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  S7183C1  : S7183C2_nt , S7183C3 {
  void *s7183c1f0[3];
  ::S857C9_nt s7183c1f1;
  void *s7183c1f2[2];
  ::S5408C5_nt s7183c1f3;
  void *s7183c1f4[2];
  virtual  ~S7183C1(); // _ZN7S7183C1D1Ev
  virtual void  v1(); // _ZN7S7183C12v1Ev
  virtual void  v2(); // _ZN7S7183C12v2Ev
  virtual void  v3(); // _ZN7S7183C12v3Ev
  virtual void  v4(); // _ZN7S7183C12v4Ev
  virtual void  v5(); // _ZN7S7183C12v5Ev
  virtual void  v6(); // _ZN7S7183C12v6Ev
  virtual void  v7(); // _ZN7S7183C12v7Ev
  virtual void  v8(); // _ZN7S7183C12v8Ev
  S7183C1(); // tgen
};
//SIG(1 S7183C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15} BC3{ vd v16} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[3] FC4{ m FC5{ FL[4]}} Fp[2] FC6{ m Fp Fi FC7{ m} FC8{ m}} Fp[2]}


 S7183C1 ::~S7183C1(){ note_dtor("S7183C1", this);}
void  S7183C1 ::v1(){vfunc_called(this, "_ZN7S7183C12v1Ev");}
void  S7183C1 ::v2(){vfunc_called(this, "_ZN7S7183C12v2Ev");}
void  S7183C1 ::v3(){vfunc_called(this, "_ZN7S7183C12v3Ev");}
void  S7183C1 ::v4(){vfunc_called(this, "_ZN7S7183C12v4Ev");}
void  S7183C1 ::v5(){vfunc_called(this, "_ZN7S7183C12v5Ev");}
void  S7183C1 ::v6(){vfunc_called(this, "_ZN7S7183C12v6Ev");}
void  S7183C1 ::v7(){vfunc_called(this, "_ZN7S7183C12v7Ev");}
void  S7183C1 ::v8(){vfunc_called(this, "_ZN7S7183C12v8Ev");}
S7183C1 ::S7183C1(){ note_ctor("S7183C1", this);} // tgen

static void Test_S7183C1()
{
  extern Class_Descriptor cd_S7183C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,21)];
    init_test(&cd_S7183C1, buf);
    S7183C1 *dp, &lv = *(dp=new (buf) S7183C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,80), "sizeof(S7183C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7183C1)");
    check_base_class_offset(lv, (S7183C2_nt*), 0, "S7183C1");
    check_base_class_offset(lv, (S7183C3*), ABISELECT(8,4), "S7183C1");
    check_field_offset(lv, s7183c1f0, ABISELECT(16,8), "S7183C1.s7183c1f0");
    check_field_offset(lv, s7183c1f1, ABISELECT(40,20), "S7183C1.s7183c1f1");
    check_field_offset(lv, s7183c1f2, ABISELECT(72,52), "S7183C1.s7183c1f2");
    check_field_offset(lv, s7183c1f3, ABISELECT(88,60), "S7183C1.s7183c1f3");
    check_field_offset(lv, s7183c1f4, ABISELECT(104,72), "S7183C1.s7183c1f4");
    test_class_info(&lv, &cd_S7183C1);
    dp->~S7183C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7183C1(Test_S7183C1, "S7183C1", ABISELECT(120,80));

#else // __cplusplus

extern void _ZN7S7183C1C1Ev();
extern void _ZN7S7183C1D1Ev();
Name_Map name_map_S7183C1[] = {
  NSPAIR(_ZN7S7183C1C1Ev),
  NSPAIR(_ZN7S7183C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7183C2_nt;
extern VTBL_ENTRY _ZTI10S7183C2_nt[];
extern  VTBL_ENTRY _ZTV10S7183C2_nt[];
extern Class_Descriptor cd_S7183C3;
extern VTBL_ENTRY _ZTI7S7183C3[];
extern  VTBL_ENTRY _ZTV7S7183C3[];
static Base_Class bases_S7183C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7183C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7183C3,    ABISELECT(8,4), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7183C1[];
extern void _ZN7S7183C1D1Ev();
extern void _ZN7S7183C1D0Ev();
extern void _ZN10S7183C2_nt2v9Ev();
extern void _ZN10S7183C2_nt3v10Ev();
extern void _ZN10S7183C2_nt3v11Ev();
extern void _ZN10S7183C2_nt3v12Ev();
extern void _ZN10S7183C2_nt3v13Ev();
extern void _ZN10S7183C2_nt3v14Ev();
extern void _ZN10S7183C2_nt3v15Ev();
extern void _ZN7S7183C12v1Ev();
extern void _ZN7S7183C12v2Ev();
extern void _ZN7S7183C12v3Ev();
extern void _ZN7S7183C12v4Ev();
extern void _ZN7S7183C12v5Ev();
extern void _ZN7S7183C12v6Ev();
extern void _ZN7S7183C12v7Ev();
extern void _ZN7S7183C12v8Ev();
extern void ABISELECT(_ZThn8_N7S7183C1D1Ev,_ZThn4_N7S7183C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7183C1D0Ev,_ZThn4_N7S7183C1D0Ev)();
extern void _ZN7S7183C33v16Ev();
static  VTBL_ENTRY vtc_S7183C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7183C1[0]),
  (VTBL_ENTRY)&_ZN7S7183C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7183C1D0Ev,
  (VTBL_ENTRY)&_ZN10S7183C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7183C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7183C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7183C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7183C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7183C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7183C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN7S7183C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7183C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7183C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7183C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7183C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7183C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7183C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7183C12v8Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7183C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7183C1D1Ev,_ZThn4_N7S7183C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7183C1D0Ev,_ZThn4_N7S7183C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7183C33v16Ev,
};
extern VTBL_ENTRY _ZTI7S7183C1[];
extern  VTBL_ENTRY _ZTV7S7183C1[];
Class_Descriptor cd_S7183C1 = {  "S7183C1", // class name
  bases_S7183C1, 2,
  &(vtc_S7183C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,80), // object size
  NSPAIRA(_ZTI7S7183C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7183C1),24, //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  S10066C2  {
  virtual  ~S10066C2(); // _ZN8S10066C2D1Ev
  virtual void  v6(); // _ZN8S10066C22v6Ev
  virtual void  v7(); // _ZN8S10066C22v7Ev
  virtual void  v8(); // _ZN8S10066C22v8Ev
  virtual void  v9(); // _ZN8S10066C22v9Ev
  virtual void  v10(); // _ZN8S10066C23v10Ev
  virtual void  v11(); // _ZN8S10066C23v11Ev
  virtual void  v12(); // _ZN8S10066C23v12Ev
  S10066C2(); // tgen
};
//SIG(-1 S10066C2) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S10066C2 ::~S10066C2(){ note_dtor("S10066C2", this);}
void  S10066C2 ::v6(){vfunc_called(this, "_ZN8S10066C22v6Ev");}
void  S10066C2 ::v7(){vfunc_called(this, "_ZN8S10066C22v7Ev");}
void  S10066C2 ::v8(){vfunc_called(this, "_ZN8S10066C22v8Ev");}
void  S10066C2 ::v9(){vfunc_called(this, "_ZN8S10066C22v9Ev");}
void  S10066C2 ::v10(){vfunc_called(this, "_ZN8S10066C23v10Ev");}
void  S10066C2 ::v11(){vfunc_called(this, "_ZN8S10066C23v11Ev");}
void  S10066C2 ::v12(){vfunc_called(this, "_ZN8S10066C23v12Ev");}
S10066C2 ::S10066C2(){ note_ctor("S10066C2", this);} // tgen

static void Test_S10066C2()
{
  extern Class_Descriptor cd_S10066C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10066C2, buf);
    S10066C2 *dp, &lv = *(dp=new (buf) S10066C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10066C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10066C2)");
    test_class_info(&lv, &cd_S10066C2);
    dp->~S10066C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10066C2(Test_S10066C2, "S10066C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10066C2C1Ev();
extern void _ZN8S10066C2D1Ev();
Name_Map name_map_S10066C2[] = {
  NSPAIR(_ZN8S10066C2C1Ev),
  NSPAIR(_ZN8S10066C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10066C2[];
extern void _ZN8S10066C2D1Ev();
extern void _ZN8S10066C2D0Ev();
extern void _ZN8S10066C22v6Ev();
extern void _ZN8S10066C22v7Ev();
extern void _ZN8S10066C22v8Ev();
extern void _ZN8S10066C22v9Ev();
extern void _ZN8S10066C23v10Ev();
extern void _ZN8S10066C23v11Ev();
extern void _ZN8S10066C23v12Ev();
static  VTBL_ENTRY vtc_S10066C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10066C2[0]),
  (VTBL_ENTRY)&_ZN8S10066C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10066C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10066C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10066C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10066C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10066C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10066C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10066C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10066C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S10066C2[];
extern  VTBL_ENTRY _ZTV8S10066C2[];
Class_Descriptor cd_S10066C2 = {  "S10066C2", // class name
  0,0,//no base classes
  &(vtc_S10066C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10066C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10066C2),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  S10066C3_nt  {
  void *s10066c3f0;
};
//SIG(1 S10066C3_nt) C1{ Fp}



//skip512 S10066C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10066C7  {
  ::S13396C3_nt s10066c7f0;
};
//SIG(-1 S10066C7) C1{ FC2{ Fi}}



static void Test_S10066C7()
{
  {
    init_simple_test("S10066C7");
    S10066C7 lv;
    check2(sizeof(lv), 4, "sizeof(S10066C7)");
    check2(__alignof__(lv), 4, "__alignof__(S10066C7)");
    check_field_offset(lv, s10066c7f0, 0, "S10066C7.s10066c7f0");
  }
}
static Arrange_To_Call_Me vS10066C7(Test_S10066C7, "S10066C7", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10066C1  : S10066C2 {
  void *s10066c1f0[2];
  ::S10066C3_nt s10066c1f1[8];
  int s10066c1f2;
  char s10066c1f3;
  void *s10066c1f4;
  ::S857C9_nt s10066c1f5;
  void *s10066c1f6;
  int s10066c1f7;
  ::S857C9_nt s10066c1f8;
  ::S857C15_nt s10066c1f9[2];
  ::S10066C7 s10066c1f10;
  void *s10066c1f11;
  virtual  ~S10066C1(); // _ZN8S10066C1D1Ev
  virtual void  v1(); // _ZN8S10066C12v1Ev
  virtual void  v2(); // _ZN8S10066C12v2Ev
  virtual void  v3(); // _ZN8S10066C12v3Ev
  virtual void  v4(); // _ZN8S10066C12v4Ev
  virtual void  v5(); // _ZN8S10066C12v5Ev
  S10066C1(); // tgen
};
//SIG(1 S10066C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12} vd v1 v2 v3 v4 v5 Fp[2] FC3{ Fp}[8] Fi Fc Fp FC4{ m FC5{ FL[4]}} Fp Fi FC4 FC6{ Fi[4]}[2] FC7{ FC8{ Fi}} Fp}


 S10066C1 ::~S10066C1(){ note_dtor("S10066C1", this);}
void  S10066C1 ::v1(){vfunc_called(this, "_ZN8S10066C12v1Ev");}
void  S10066C1 ::v2(){vfunc_called(this, "_ZN8S10066C12v2Ev");}
void  S10066C1 ::v3(){vfunc_called(this, "_ZN8S10066C12v3Ev");}
void  S10066C1 ::v4(){vfunc_called(this, "_ZN8S10066C12v4Ev");}
void  S10066C1 ::v5(){vfunc_called(this, "_ZN8S10066C12v5Ev");}
S10066C1 ::S10066C1(){ note_ctor("S10066C1", this);} // tgen

static void Test_S10066C1()
{
  extern Class_Descriptor cd_S10066C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,43)];
    init_test(&cd_S10066C1, buf);
    S10066C1 *dp, &lv = *(dp=new (buf) S10066C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,168), "sizeof(S10066C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10066C1)");
    check_base_class_offset(lv, (S10066C2*), 0, "S10066C1");
    check_field_offset(lv, s10066c1f0, ABISELECT(8,4), "S10066C1.s10066c1f0");
    check_field_offset(lv, s10066c1f1, ABISELECT(24,12), "S10066C1.s10066c1f1");
    check_field_offset(lv, s10066c1f2, ABISELECT(88,44), "S10066C1.s10066c1f2");
    check_field_offset(lv, s10066c1f3, ABISELECT(92,48), "S10066C1.s10066c1f3");
    check_field_offset(lv, s10066c1f4, ABISELECT(96,52), "S10066C1.s10066c1f4");
    check_field_offset(lv, s10066c1f5, ABISELECT(104,56), "S10066C1.s10066c1f5");
    check_field_offset(lv, s10066c1f6, ABISELECT(136,88), "S10066C1.s10066c1f6");
    check_field_offset(lv, s10066c1f7, ABISELECT(144,92), "S10066C1.s10066c1f7");
    check_field_offset(lv, s10066c1f8, ABISELECT(152,96), "S10066C1.s10066c1f8");
    check_field_offset(lv, s10066c1f9, ABISELECT(184,128), "S10066C1.s10066c1f9");
    check_field_offset(lv, s10066c1f10, ABISELECT(216,160), "S10066C1.s10066c1f10");
    check_field_offset(lv, s10066c1f11, ABISELECT(224,164), "S10066C1.s10066c1f11");
    test_class_info(&lv, &cd_S10066C1);
    dp->~S10066C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10066C1(Test_S10066C1, "S10066C1", ABISELECT(232,168));

#else // __cplusplus

extern void _ZN8S10066C1C1Ev();
extern void _ZN8S10066C1D1Ev();
Name_Map name_map_S10066C1[] = {
  NSPAIR(_ZN8S10066C1C1Ev),
  NSPAIR(_ZN8S10066C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10066C2;
extern VTBL_ENTRY _ZTI8S10066C2[];
extern  VTBL_ENTRY _ZTV8S10066C2[];
static Base_Class bases_S10066C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10066C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10066C1[];
extern void _ZN8S10066C1D1Ev();
extern void _ZN8S10066C1D0Ev();
extern void _ZN8S10066C22v6Ev();
extern void _ZN8S10066C22v7Ev();
extern void _ZN8S10066C22v8Ev();
extern void _ZN8S10066C22v9Ev();
extern void _ZN8S10066C23v10Ev();
extern void _ZN8S10066C23v11Ev();
extern void _ZN8S10066C23v12Ev();
extern void _ZN8S10066C12v1Ev();
extern void _ZN8S10066C12v2Ev();
extern void _ZN8S10066C12v3Ev();
extern void _ZN8S10066C12v4Ev();
extern void _ZN8S10066C12v5Ev();
static  VTBL_ENTRY vtc_S10066C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10066C1[0]),
  (VTBL_ENTRY)&_ZN8S10066C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10066C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10066C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10066C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10066C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10066C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10066C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10066C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10066C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10066C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10066C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10066C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10066C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10066C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10066C1[];
extern  VTBL_ENTRY _ZTV8S10066C1[];
Class_Descriptor cd_S10066C1 = {  "S10066C1", // class name
  bases_S10066C1, 1,
  &(vtc_S10066C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,168), // object size
  NSPAIRA(_ZTI8S10066C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10066C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5090C3  {
  ::S16130C9_nt s5090c3f0;
  int s5090c3f1[2];
  char s5090c3f2;
  virtual  ~S5090C3(); // _ZN7S5090C3D1Ev
  virtual void  v4(); // _ZN7S5090C32v4Ev
  virtual void  v5(); // _ZN7S5090C32v5Ev
  virtual void  v6(); // _ZN7S5090C32v6Ev
  S5090C3(); // tgen
};
//SIG(-1 S5090C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5090C3 ::~S5090C3(){ note_dtor("S5090C3", this);}
void  S5090C3 ::v4(){vfunc_called(this, "_ZN7S5090C32v4Ev");}
void  S5090C3 ::v5(){vfunc_called(this, "_ZN7S5090C32v5Ev");}
void  S5090C3 ::v6(){vfunc_called(this, "_ZN7S5090C32v6Ev");}
S5090C3 ::S5090C3(){ note_ctor("S5090C3", this);} // tgen

static void Test_S5090C3()
{
  extern Class_Descriptor cd_S5090C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5090C3, buf);
    S5090C3 *dp, &lv = *(dp=new (buf) S5090C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5090C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5090C3)");
    check_field_offset(lv, s5090c3f0, ABISELECT(8,4), "S5090C3.s5090c3f0");
    check_field_offset(lv, s5090c3f1, ABISELECT(24,16), "S5090C3.s5090c3f1");
    check_field_offset(lv, s5090c3f2, ABISELECT(32,24), "S5090C3.s5090c3f2");
    test_class_info(&lv, &cd_S5090C3);
    dp->~S5090C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5090C3(Test_S5090C3, "S5090C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5090C3C1Ev();
extern void _ZN7S5090C3D1Ev();
Name_Map name_map_S5090C3[] = {
  NSPAIR(_ZN7S5090C3C1Ev),
  NSPAIR(_ZN7S5090C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5090C3[];
extern void _ZN7S5090C3D1Ev();
extern void _ZN7S5090C3D0Ev();
extern void _ZN7S5090C32v4Ev();
extern void _ZN7S5090C32v5Ev();
extern void _ZN7S5090C32v6Ev();
static  VTBL_ENTRY vtc_S5090C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5090C3[0]),
  (VTBL_ENTRY)&_ZN7S5090C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5090C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5090C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5090C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5090C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5090C3[];
extern  VTBL_ENTRY _ZTV7S5090C3[];
Class_Descriptor cd_S5090C3 = {  "S5090C3", // class name
  0,0,//no base classes
  &(vtc_S5090C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5090C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5090C3),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  S5090C2_nt  : S5090C3 {
  void *s5090c2f0;
  virtual void  v7(); // _ZN10S5090C2_nt2v7Ev
  virtual void  v8(); // _ZN10S5090C2_nt2v8Ev
  ~S5090C2_nt(); // tgen
  S5090C2_nt(); // tgen
};
//SIG(-1 S5090C2_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5090C2_nt ::v7(){vfunc_called(this, "_ZN10S5090C2_nt2v7Ev");}
void  S5090C2_nt ::v8(){vfunc_called(this, "_ZN10S5090C2_nt2v8Ev");}
S5090C2_nt ::~S5090C2_nt(){ note_dtor("S5090C2_nt", this);} // tgen
S5090C2_nt ::S5090C2_nt(){ note_ctor("S5090C2_nt", this);} // tgen

//skip512 S5090C2_nt

#else // __cplusplus

extern void _ZN10S5090C2_ntC1Ev();
extern void _ZN10S5090C2_ntD1Ev();
Name_Map name_map_S5090C2_nt[] = {
  NSPAIR(_ZN10S5090C2_ntC1Ev),
  NSPAIR(_ZN10S5090C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5090C3;
extern VTBL_ENTRY _ZTI7S5090C3[];
extern  VTBL_ENTRY _ZTV7S5090C3[];
static Base_Class bases_S5090C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5090C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S5090C2_nt[];
extern void _ZN10S5090C2_ntD1Ev();
extern void _ZN10S5090C2_ntD0Ev();
extern void _ZN7S5090C32v4Ev();
extern void _ZN7S5090C32v5Ev();
extern void _ZN7S5090C32v6Ev();
extern void _ZN10S5090C2_nt2v7Ev();
extern void _ZN10S5090C2_nt2v8Ev();
static  VTBL_ENTRY vtc_S5090C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5090C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S5090C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5090C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S5090C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5090C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5090C32v6Ev,
  (VTBL_ENTRY)&_ZN10S5090C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5090C2_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S5090C2_nt[];
VTBL_ENTRY *P__ZTI10S5090C2_nt = _ZTI10S5090C2_nt; 
extern  VTBL_ENTRY _ZTV10S5090C2_nt[];
Class_Descriptor cd_S5090C2_nt = {  "S5090C2_nt", // class name
  bases_S5090C2_nt, 1,
  &(vtc_S5090C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S5090C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S5090C2_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5090C1  : S5090C2_nt {
  void *s5090c1f0[2];
  ::S857C9_nt s5090c1f1;
  ::S857C14_nt s5090c1f2;
  char s5090c1f3[2];
  int s5090c1f4;
  __tsi64 s5090c1f5;
  void *s5090c1f6[2];
  virtual  ~S5090C1(); // _ZN7S5090C1D1Ev
  virtual void  v1(); // _ZN7S5090C12v1Ev
  virtual void  v2(); // _ZN7S5090C12v2Ev
  virtual void  v3(); // _ZN7S5090C12v3Ev
  S5090C1(); // tgen
};
//SIG(1 S5090C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 Fp[2] FC6{ m FC7{ FL[4]}} FC8{ m Fp FC9{ Fi[4]}} Fc[2] Fi FL Fp[2]}


 S5090C1 ::~S5090C1(){ note_dtor("S5090C1", this);}
void  S5090C1 ::v1(){vfunc_called(this, "_ZN7S5090C12v1Ev");}
void  S5090C1 ::v2(){vfunc_called(this, "_ZN7S5090C12v2Ev");}
void  S5090C1 ::v3(){vfunc_called(this, "_ZN7S5090C12v3Ev");}
S5090C1 ::S5090C1(){ note_ctor("S5090C1", this);} // tgen

static void Test_S5090C1()
{
  extern Class_Descriptor cd_S5090C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,30)];
    init_test(&cd_S5090C1, buf);
    S5090C1 *dp, &lv = *(dp=new (buf) S5090C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,116), "sizeof(S5090C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5090C1)");
    check_base_class_offset(lv, (S5090C3*)(S5090C2_nt*), 0, "S5090C1");
    check_base_class_offset(lv, (S5090C2_nt*), 0, "S5090C1");
    check_field_offset(lv, s5090c1f0, ABISELECT(48,32), "S5090C1.s5090c1f0");
    check_field_offset(lv, s5090c1f1, ABISELECT(64,40), "S5090C1.s5090c1f1");
    check_field_offset(lv, s5090c1f2, ABISELECT(96,72), "S5090C1.s5090c1f2");
    check_field_offset(lv, s5090c1f3, ABISELECT(120,92), "S5090C1.s5090c1f3");
    check_field_offset(lv, s5090c1f4, ABISELECT(124,96), "S5090C1.s5090c1f4");
    check_field_offset(lv, s5090c1f5, ABISELECT(128,100), "S5090C1.s5090c1f5");
    check_field_offset(lv, s5090c1f6, ABISELECT(136,108), "S5090C1.s5090c1f6");
    test_class_info(&lv, &cd_S5090C1);
    dp->~S5090C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5090C1(Test_S5090C1, "S5090C1", ABISELECT(152,116));

#else // __cplusplus

extern void _ZN7S5090C1C1Ev();
extern void _ZN7S5090C1D1Ev();
Name_Map name_map_S5090C1[] = {
  NSPAIR(_ZN7S5090C1C1Ev),
  NSPAIR(_ZN7S5090C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5090C3;
extern VTBL_ENTRY _ZTI7S5090C3[];
extern  VTBL_ENTRY _ZTV7S5090C3[];
extern Class_Descriptor cd_S5090C2_nt;
extern VTBL_ENTRY _ZTI10S5090C2_nt[];
extern  VTBL_ENTRY _ZTV10S5090C2_nt[];
static Base_Class bases_S5090C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5090C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5090C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5090C1[];
extern void _ZN7S5090C1D1Ev();
extern void _ZN7S5090C1D0Ev();
extern void _ZN7S5090C32v4Ev();
extern void _ZN7S5090C32v5Ev();
extern void _ZN7S5090C32v6Ev();
extern void _ZN10S5090C2_nt2v7Ev();
extern void _ZN10S5090C2_nt2v8Ev();
extern void _ZN7S5090C12v1Ev();
extern void _ZN7S5090C12v2Ev();
extern void _ZN7S5090C12v3Ev();
static  VTBL_ENTRY vtc_S5090C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5090C1[0]),
  (VTBL_ENTRY)&_ZN7S5090C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5090C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5090C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5090C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5090C32v6Ev,
  (VTBL_ENTRY)&_ZN10S5090C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5090C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S5090C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5090C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5090C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5090C1[];
extern  VTBL_ENTRY _ZTV7S5090C1[];
Class_Descriptor cd_S5090C1 = {  "S5090C1", // class name
  bases_S5090C1, 2,
  &(vtc_S5090C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,116), // object size
  NSPAIRA(_ZTI7S5090C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5090C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7004C2_nt  {
  int s7004c2f0;
  void *s7004c2f1[2];
  char s7004c2f2[4];
  virtual void  v6(); // _ZN10S7004C2_nt2v6Ev
  virtual void  v7(); // _ZN10S7004C2_nt2v7Ev
  virtual void  v8(); // _ZN10S7004C2_nt2v8Ev
  virtual void  v9(); // _ZN10S7004C2_nt2v9Ev
  virtual void  v10(); // _ZN10S7004C2_nt3v10Ev
  ~S7004C2_nt(); // tgen
  S7004C2_nt(); // tgen
};
//SIG(-1 S7004C2_nt) C1{ v1 v2 v3 v4 v5 Fi Fp[2] Fc[4]}


void  S7004C2_nt ::v6(){vfunc_called(this, "_ZN10S7004C2_nt2v6Ev");}
void  S7004C2_nt ::v7(){vfunc_called(this, "_ZN10S7004C2_nt2v7Ev");}
void  S7004C2_nt ::v8(){vfunc_called(this, "_ZN10S7004C2_nt2v8Ev");}
void  S7004C2_nt ::v9(){vfunc_called(this, "_ZN10S7004C2_nt2v9Ev");}
void  S7004C2_nt ::v10(){vfunc_called(this, "_ZN10S7004C2_nt3v10Ev");}
S7004C2_nt ::~S7004C2_nt(){ note_dtor("S7004C2_nt", this);} // tgen
S7004C2_nt ::S7004C2_nt(){ note_ctor("S7004C2_nt", this);} // tgen

//skip512 S7004C2_nt

#else // __cplusplus

extern void _ZN10S7004C2_ntC1Ev();
extern void _ZN10S7004C2_ntD1Ev();
Name_Map name_map_S7004C2_nt[] = {
  NSPAIR(_ZN10S7004C2_ntC1Ev),
  NSPAIR(_ZN10S7004C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7004C2_nt[];
extern void _ZN10S7004C2_nt2v6Ev();
extern void _ZN10S7004C2_nt2v7Ev();
extern void _ZN10S7004C2_nt2v8Ev();
extern void _ZN10S7004C2_nt2v9Ev();
extern void _ZN10S7004C2_nt3v10Ev();
static  VTBL_ENTRY vtc_S7004C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7004C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7004C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7004C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7004C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7004C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7004C2_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S7004C2_nt[];
VTBL_ENTRY *P__ZTI10S7004C2_nt = _ZTI10S7004C2_nt; 
extern  VTBL_ENTRY _ZTV10S7004C2_nt[];
Class_Descriptor cd_S7004C2_nt = {  "S7004C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7004C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI10S7004C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7004C2_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  S7004C4_nt  {
  void *s7004c4f0;
  long s7004c4f1[6];
  char s7004c4f2:5;
  virtual void  v11(); // _ZN10S7004C4_nt3v11Ev
  virtual void  v12(); // _ZN10S7004C4_nt3v12Ev
  virtual void  v13(); // _ZN10S7004C4_nt3v13Ev
  virtual void  v14(); // _ZN10S7004C4_nt3v14Ev
  ~S7004C4_nt(); // tgen
  S7004C4_nt(); // tgen
};
//SIG(-1 S7004C4_nt) C1{ v1 v2 v3 v4 Fp Fl[6] Fc:5}


void  S7004C4_nt ::v11(){vfunc_called(this, "_ZN10S7004C4_nt3v11Ev");}
void  S7004C4_nt ::v12(){vfunc_called(this, "_ZN10S7004C4_nt3v12Ev");}
void  S7004C4_nt ::v13(){vfunc_called(this, "_ZN10S7004C4_nt3v13Ev");}
void  S7004C4_nt ::v14(){vfunc_called(this, "_ZN10S7004C4_nt3v14Ev");}
S7004C4_nt ::~S7004C4_nt(){ note_dtor("S7004C4_nt", this);} // tgen
S7004C4_nt ::S7004C4_nt(){ note_ctor("S7004C4_nt", this);} // tgen

//skip512 S7004C4_nt

#else // __cplusplus

extern void _ZN10S7004C4_ntC1Ev();
extern void _ZN10S7004C4_ntD1Ev();
Name_Map name_map_S7004C4_nt[] = {
  NSPAIR(_ZN10S7004C4_ntC1Ev),
  NSPAIR(_ZN10S7004C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7004C4_nt[];
extern void _ZN10S7004C4_nt3v11Ev();
extern void _ZN10S7004C4_nt3v12Ev();
extern void _ZN10S7004C4_nt3v13Ev();
extern void _ZN10S7004C4_nt3v14Ev();
static  VTBL_ENTRY vtc_S7004C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7004C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S7004C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7004C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7004C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7004C4_nt3v14Ev,
};
extern VTBL_ENTRY _ZTI10S7004C4_nt[];
VTBL_ENTRY *P__ZTI10S7004C4_nt = _ZTI10S7004C4_nt; 
extern  VTBL_ENTRY _ZTV10S7004C4_nt[];
Class_Descriptor cd_S7004C4_nt = {  "S7004C4_nt", // class name
  0,0,//no base classes
  &(vtc_S7004C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI10S7004C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7004C4_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  S7004C3_nt  : S7004C4_nt {
  void *s7004c3f0[11];
  char s7004c3f1[4];
  __tsi64 s7004c3f2;
  virtual void  v15(); // _ZN10S7004C3_nt3v15Ev
  virtual void  v16(); // _ZN10S7004C3_nt3v16Ev
  virtual void  v17(); // _ZN10S7004C3_nt3v17Ev
  virtual void  v18(); // _ZN10S7004C3_nt3v18Ev
  ~S7004C3_nt(); // tgen
  S7004C3_nt(); // tgen
};
//SIG(-1 S7004C3_nt) C1{ BC2{ v5 v6 v7 v8 Fp Fl[6] Fc:5} v1 v2 v3 v4 Fp[11] Fc[4] FL}


void  S7004C3_nt ::v15(){vfunc_called(this, "_ZN10S7004C3_nt3v15Ev");}
void  S7004C3_nt ::v16(){vfunc_called(this, "_ZN10S7004C3_nt3v16Ev");}
void  S7004C3_nt ::v17(){vfunc_called(this, "_ZN10S7004C3_nt3v17Ev");}
void  S7004C3_nt ::v18(){vfunc_called(this, "_ZN10S7004C3_nt3v18Ev");}
S7004C3_nt ::~S7004C3_nt(){ note_dtor("S7004C3_nt", this);} // tgen
S7004C3_nt ::S7004C3_nt(){ note_ctor("S7004C3_nt", this);} // tgen

//skip512 S7004C3_nt

#else // __cplusplus

extern void _ZN10S7004C3_ntC1Ev();
extern void _ZN10S7004C3_ntD1Ev();
Name_Map name_map_S7004C3_nt[] = {
  NSPAIR(_ZN10S7004C3_ntC1Ev),
  NSPAIR(_ZN10S7004C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7004C4_nt;
extern VTBL_ENTRY _ZTI10S7004C4_nt[];
extern  VTBL_ENTRY _ZTV10S7004C4_nt[];
static Base_Class bases_S7004C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7004C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S7004C3_nt[];
extern void _ZN10S7004C4_nt3v11Ev();
extern void _ZN10S7004C4_nt3v12Ev();
extern void _ZN10S7004C4_nt3v13Ev();
extern void _ZN10S7004C4_nt3v14Ev();
extern void _ZN10S7004C3_nt3v15Ev();
extern void _ZN10S7004C3_nt3v16Ev();
extern void _ZN10S7004C3_nt3v17Ev();
extern void _ZN10S7004C3_nt3v18Ev();
static  VTBL_ENTRY vtc_S7004C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7004C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7004C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7004C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7004C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7004C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7004C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7004C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7004C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7004C3_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI10S7004C3_nt[];
VTBL_ENTRY *P__ZTI10S7004C3_nt = _ZTI10S7004C3_nt; 
extern  VTBL_ENTRY _ZTV10S7004C3_nt[];
Class_Descriptor cd_S7004C3_nt = {  "S7004C3_nt", // class name
  bases_S7004C3_nt, 1,
  &(vtc_S7004C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,92), // object size
  NSPAIRA(_ZTI10S7004C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S7004C3_nt),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  S7004C1  : S7004C2_nt , S7004C3_nt {
  __tsi64 s7004c1f0;
  virtual  ~S7004C1(); // _ZN7S7004C1D1Ev
  virtual void  v1(); // _ZN7S7004C12v1Ev
  virtual void  v2(); // _ZN7S7004C12v2Ev
  virtual void  v3(); // _ZN7S7004C12v3Ev
  virtual void  v4(); // _ZN7S7004C12v4Ev
  virtual void  v5(); // _ZN7S7004C12v5Ev
  S7004C1(); // tgen
};
//SIG(1 S7004C1) C1{ BC2{ v6 v7 v8 v9 v10 Fi Fp[2] Fc[4]} BC3{ BC4{ v11 v12 v13 v14 Fp Fl[6] Fc:5} v15 v16 v17 v18 Fp[11] Fc[4] FL} vd v1 v2 v3 v4 v5 FL}


 S7004C1 ::~S7004C1(){ note_dtor("S7004C1", this);}
void  S7004C1 ::v1(){vfunc_called(this, "_ZN7S7004C12v1Ev");}
void  S7004C1 ::v2(){vfunc_called(this, "_ZN7S7004C12v2Ev");}
void  S7004C1 ::v3(){vfunc_called(this, "_ZN7S7004C12v3Ev");}
void  S7004C1 ::v4(){vfunc_called(this, "_ZN7S7004C12v4Ev");}
void  S7004C1 ::v5(){vfunc_called(this, "_ZN7S7004C12v5Ev");}
S7004C1 ::S7004C1(){ note_ctor("S7004C1", this);} // tgen

static void Test_S7004C1()
{
  extern Class_Descriptor cd_S7004C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,31)];
    init_test(&cd_S7004C1, buf);
    S7004C1 *dp, &lv = *(dp=new (buf) S7004C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,120), "sizeof(S7004C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7004C1)");
    check_base_class_offset(lv, (S7004C2_nt*), 0, "S7004C1");
    check_base_class_offset(lv, (S7004C4_nt*)(S7004C3_nt*), ABISELECT(40,20), "S7004C1");
    check_base_class_offset(lv, (S7004C3_nt*), ABISELECT(40,20), "S7004C1");
    check_field_offset(lv, s7004c1f0, ABISELECT(216,112), "S7004C1.s7004c1f0");
    test_class_info(&lv, &cd_S7004C1);
    dp->~S7004C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7004C1(Test_S7004C1, "S7004C1", ABISELECT(224,120));

#else // __cplusplus

extern void _ZN7S7004C1C1Ev();
extern void _ZN7S7004C1D1Ev();
Name_Map name_map_S7004C1[] = {
  NSPAIR(_ZN7S7004C1C1Ev),
  NSPAIR(_ZN7S7004C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7004C2_nt;
extern VTBL_ENTRY _ZTI10S7004C2_nt[];
extern  VTBL_ENTRY _ZTV10S7004C2_nt[];
extern Class_Descriptor cd_S7004C4_nt;
extern VTBL_ENTRY _ZTI10S7004C4_nt[];
extern  VTBL_ENTRY _ZTV10S7004C4_nt[];
extern Class_Descriptor cd_S7004C3_nt;
extern VTBL_ENTRY _ZTI10S7004C3_nt[];
extern  VTBL_ENTRY _ZTV10S7004C3_nt[];
static Base_Class bases_S7004C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7004C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7004C4_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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7004C3_nt,    ABISELECT(40,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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7004C1[];
extern void _ZN10S7004C2_nt2v6Ev();
extern void _ZN10S7004C2_nt2v7Ev();
extern void _ZN10S7004C2_nt2v8Ev();
extern void _ZN10S7004C2_nt2v9Ev();
extern void _ZN10S7004C2_nt3v10Ev();
extern void _ZN7S7004C1D1Ev();
extern void _ZN7S7004C1D0Ev();
extern void _ZN7S7004C12v1Ev();
extern void _ZN7S7004C12v2Ev();
extern void _ZN7S7004C12v3Ev();
extern void _ZN7S7004C12v4Ev();
extern void _ZN7S7004C12v5Ev();
extern void _ZN10S7004C4_nt3v11Ev();
extern void _ZN10S7004C4_nt3v12Ev();
extern void _ZN10S7004C4_nt3v13Ev();
extern void _ZN10S7004C4_nt3v14Ev();
extern void _ZN10S7004C3_nt3v15Ev();
extern void _ZN10S7004C3_nt3v16Ev();
extern void _ZN10S7004C3_nt3v17Ev();
extern void _ZN10S7004C3_nt3v18Ev();
static  VTBL_ENTRY vtc_S7004C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7004C1[0]),
  (VTBL_ENTRY)&_ZN10S7004C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7004C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7004C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7004C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7004C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN7S7004C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7004C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7004C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7004C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7004C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7004C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7004C12v5Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7004C1[0]),
  (VTBL_ENTRY)&_ZN10S7004C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7004C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7004C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7004C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7004C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7004C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7004C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7004C3_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI7S7004C1[];
extern  VTBL_ENTRY _ZTV7S7004C1[];
Class_Descriptor cd_S7004C1 = {  "S7004C1", // class name
  bases_S7004C1, 3,
  &(vtc_S7004C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,120), // object size
  NSPAIRA(_ZTI7S7004C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7004C1),24, //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  S5091C3  {
  ::S16130C9_nt s5091c3f0;
  int s5091c3f1[2];
  char s5091c3f2;
  virtual  ~S5091C3(); // _ZN7S5091C3D1Ev
  virtual void  v4(); // _ZN7S5091C32v4Ev
  virtual void  v5(); // _ZN7S5091C32v5Ev
  virtual void  v6(); // _ZN7S5091C32v6Ev
  S5091C3(); // tgen
};
//SIG(-1 S5091C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5091C3 ::~S5091C3(){ note_dtor("S5091C3", this);}
void  S5091C3 ::v4(){vfunc_called(this, "_ZN7S5091C32v4Ev");}
void  S5091C3 ::v5(){vfunc_called(this, "_ZN7S5091C32v5Ev");}
void  S5091C3 ::v6(){vfunc_called(this, "_ZN7S5091C32v6Ev");}
S5091C3 ::S5091C3(){ note_ctor("S5091C3", this);} // tgen

static void Test_S5091C3()
{
  extern Class_Descriptor cd_S5091C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5091C3, buf);
    S5091C3 *dp, &lv = *(dp=new (buf) S5091C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5091C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5091C3)");
    check_field_offset(lv, s5091c3f0, ABISELECT(8,4), "S5091C3.s5091c3f0");
    check_field_offset(lv, s5091c3f1, ABISELECT(24,16), "S5091C3.s5091c3f1");
    check_field_offset(lv, s5091c3f2, ABISELECT(32,24), "S5091C3.s5091c3f2");
    test_class_info(&lv, &cd_S5091C3);
    dp->~S5091C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5091C3(Test_S5091C3, "S5091C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5091C3C1Ev();
extern void _ZN7S5091C3D1Ev();
Name_Map name_map_S5091C3[] = {
  NSPAIR(_ZN7S5091C3C1Ev),
  NSPAIR(_ZN7S5091C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5091C3[];
extern void _ZN7S5091C3D1Ev();
extern void _ZN7S5091C3D0Ev();
extern void _ZN7S5091C32v4Ev();
extern void _ZN7S5091C32v5Ev();
extern void _ZN7S5091C32v6Ev();
static  VTBL_ENTRY vtc_S5091C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5091C3[0]),
  (VTBL_ENTRY)&_ZN7S5091C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5091C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5091C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5091C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5091C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5091C3[];
extern  VTBL_ENTRY _ZTV7S5091C3[];
Class_Descriptor cd_S5091C3 = {  "S5091C3", // class name
  0,0,//no base classes
  &(vtc_S5091C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5091C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5091C3),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  S5091C2  : S5091C3 {
  void *s5091c2f0;
  virtual void  v7(); // _ZN7S5091C22v7Ev
  virtual void  v8(); // _ZN7S5091C22v8Ev
  ~S5091C2(); // tgen
  S5091C2(); // tgen
};
//SIG(-1 S5091C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5091C2 ::v7(){vfunc_called(this, "_ZN7S5091C22v7Ev");}
void  S5091C2 ::v8(){vfunc_called(this, "_ZN7S5091C22v8Ev");}
S5091C2 ::~S5091C2(){ note_dtor("S5091C2", this);} // tgen
S5091C2 ::S5091C2(){ note_ctor("S5091C2", this);} // tgen

static void Test_S5091C2()
{
  extern Class_Descriptor cd_S5091C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5091C2, buf);
    S5091C2 *dp, &lv = *(dp=new (buf) S5091C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5091C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5091C2)");
    check_base_class_offset(lv, (S5091C3*), 0, "S5091C2");
    check_field_offset(lv, s5091c2f0, ABISELECT(40,28), "S5091C2.s5091c2f0");
    test_class_info(&lv, &cd_S5091C2);
    dp->~S5091C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5091C2(Test_S5091C2, "S5091C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5091C2C1Ev();
extern void _ZN7S5091C2D1Ev();
Name_Map name_map_S5091C2[] = {
  NSPAIR(_ZN7S5091C2C1Ev),
  NSPAIR(_ZN7S5091C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5091C3;
extern VTBL_ENTRY _ZTI7S5091C3[];
extern  VTBL_ENTRY _ZTV7S5091C3[];
static Base_Class bases_S5091C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5091C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5091C2[];
extern void _ZN7S5091C2D1Ev();
extern void _ZN7S5091C2D0Ev();
extern void _ZN7S5091C32v4Ev();
extern void _ZN7S5091C32v5Ev();
extern void _ZN7S5091C32v6Ev();
extern void _ZN7S5091C22v7Ev();
extern void _ZN7S5091C22v8Ev();
static  VTBL_ENTRY vtc_S5091C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5091C2[0]),
  (VTBL_ENTRY)&_ZN7S5091C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5091C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5091C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5091C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5091C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5091C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5091C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5091C2[];
extern  VTBL_ENTRY _ZTV7S5091C2[];
Class_Descriptor cd_S5091C2 = {  "S5091C2", // class name
  bases_S5091C2, 1,
  &(vtc_S5091C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5091C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5091C2),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  S5091C1  : S5091C2 {
  void *s5091c1f0[2];
  ::S16130C2_nt s5091c1f1;
  ::S857C14_nt s5091c1f2;
  char s5091c1f3[2];
  int s5091c1f4;
  __tsi64 s5091c1f5;
  void *s5091c1f6[2];
  virtual  ~S5091C1(); // _ZN7S5091C1D1Ev
  virtual void  v1(); // _ZN7S5091C12v1Ev
  virtual void  v2(); // _ZN7S5091C12v2Ev
  virtual void  v3(); // _ZN7S5091C12v3Ev
  S5091C1(); // tgen
};
//SIG(1 S5091C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 Fp[2] FC6{ m FL[4]} FC7{ m Fp FC8{ Fi[4]}} Fc[2] Fi FL Fp[2]}


 S5091C1 ::~S5091C1(){ note_dtor("S5091C1", this);}
void  S5091C1 ::v1(){vfunc_called(this, "_ZN7S5091C12v1Ev");}
void  S5091C1 ::v2(){vfunc_called(this, "_ZN7S5091C12v2Ev");}
void  S5091C1 ::v3(){vfunc_called(this, "_ZN7S5091C12v3Ev");}
S5091C1 ::S5091C1(){ note_ctor("S5091C1", this);} // tgen

static void Test_S5091C1()
{
  extern Class_Descriptor cd_S5091C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,30)];
    init_test(&cd_S5091C1, buf);
    S5091C1 *dp, &lv = *(dp=new (buf) S5091C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,116), "sizeof(S5091C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5091C1)");
    check_base_class_offset(lv, (S5091C3*)(S5091C2*), 0, "S5091C1");
    check_base_class_offset(lv, (S5091C2*), 0, "S5091C1");
    check_field_offset(lv, s5091c1f0, ABISELECT(48,32), "S5091C1.s5091c1f0");
    check_field_offset(lv, s5091c1f1, ABISELECT(64,40), "S5091C1.s5091c1f1");
    check_field_offset(lv, s5091c1f2, ABISELECT(96,72), "S5091C1.s5091c1f2");
    check_field_offset(lv, s5091c1f3, ABISELECT(120,92), "S5091C1.s5091c1f3");
    check_field_offset(lv, s5091c1f4, ABISELECT(124,96), "S5091C1.s5091c1f4");
    check_field_offset(lv, s5091c1f5, ABISELECT(128,100), "S5091C1.s5091c1f5");
    check_field_offset(lv, s5091c1f6, ABISELECT(136,108), "S5091C1.s5091c1f6");
    test_class_info(&lv, &cd_S5091C1);
    dp->~S5091C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5091C1(Test_S5091C1, "S5091C1", ABISELECT(152,116));

#else // __cplusplus

extern void _ZN7S5091C1C1Ev();
extern void _ZN7S5091C1D1Ev();
Name_Map name_map_S5091C1[] = {
  NSPAIR(_ZN7S5091C1C1Ev),
  NSPAIR(_ZN7S5091C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5091C3;
extern VTBL_ENTRY _ZTI7S5091C3[];
extern  VTBL_ENTRY _ZTV7S5091C3[];
extern Class_Descriptor cd_S5091C2;
extern VTBL_ENTRY _ZTI7S5091C2[];
extern  VTBL_ENTRY _ZTV7S5091C2[];
static Base_Class bases_S5091C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5091C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5091C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5091C1[];
extern void _ZN7S5091C1D1Ev();
extern void _ZN7S5091C1D0Ev();
extern void _ZN7S5091C32v4Ev();
extern void _ZN7S5091C32v5Ev();
extern void _ZN7S5091C32v6Ev();
extern void _ZN7S5091C22v7Ev();
extern void _ZN7S5091C22v8Ev();
extern void _ZN7S5091C12v1Ev();
extern void _ZN7S5091C12v2Ev();
extern void _ZN7S5091C12v3Ev();
static  VTBL_ENTRY vtc_S5091C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5091C1[0]),
  (VTBL_ENTRY)&_ZN7S5091C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5091C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5091C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5091C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5091C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5091C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5091C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5091C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5091C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5091C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5091C1[];
extern  VTBL_ENTRY _ZTV7S5091C1[];
Class_Descriptor cd_S5091C1 = {  "S5091C1", // class name
  bases_S5091C1, 2,
  &(vtc_S5091C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,116), // object size
  NSPAIRA(_ZTI7S5091C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5091C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5059C3  {
  ::S16130C9_nt s5059c3f0;
  int s5059c3f1[2];
  char s5059c3f2;
  virtual  ~S5059C3(); // _ZN7S5059C3D1Ev
  virtual void  v4(); // _ZN7S5059C32v4Ev
  virtual void  v5(); // _ZN7S5059C32v5Ev
  virtual void  v6(); // _ZN7S5059C32v6Ev
  S5059C3(); // tgen
};
//SIG(-1 S5059C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5059C3 ::~S5059C3(){ note_dtor("S5059C3", this);}
void  S5059C3 ::v4(){vfunc_called(this, "_ZN7S5059C32v4Ev");}
void  S5059C3 ::v5(){vfunc_called(this, "_ZN7S5059C32v5Ev");}
void  S5059C3 ::v6(){vfunc_called(this, "_ZN7S5059C32v6Ev");}
S5059C3 ::S5059C3(){ note_ctor("S5059C3", this);} // tgen

static void Test_S5059C3()
{
  extern Class_Descriptor cd_S5059C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5059C3, buf);
    S5059C3 *dp, &lv = *(dp=new (buf) S5059C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5059C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5059C3)");
    check_field_offset(lv, s5059c3f0, ABISELECT(8,4), "S5059C3.s5059c3f0");
    check_field_offset(lv, s5059c3f1, ABISELECT(24,16), "S5059C3.s5059c3f1");
    check_field_offset(lv, s5059c3f2, ABISELECT(32,24), "S5059C3.s5059c3f2");
    test_class_info(&lv, &cd_S5059C3);
    dp->~S5059C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5059C3(Test_S5059C3, "S5059C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5059C3C1Ev();
extern void _ZN7S5059C3D1Ev();
Name_Map name_map_S5059C3[] = {
  NSPAIR(_ZN7S5059C3C1Ev),
  NSPAIR(_ZN7S5059C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5059C3[];
extern void _ZN7S5059C3D1Ev();
extern void _ZN7S5059C3D0Ev();
extern void _ZN7S5059C32v4Ev();
extern void _ZN7S5059C32v5Ev();
extern void _ZN7S5059C32v6Ev();
static  VTBL_ENTRY vtc_S5059C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5059C3[0]),
  (VTBL_ENTRY)&_ZN7S5059C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5059C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5059C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5059C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5059C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5059C3[];
extern  VTBL_ENTRY _ZTV7S5059C3[];
Class_Descriptor cd_S5059C3 = {  "S5059C3", // class name
  0,0,//no base classes
  &(vtc_S5059C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5059C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5059C3),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  S5059C2  : S5059C3 {
  void *s5059c2f0;
  virtual void  v7(); // _ZN7S5059C22v7Ev
  virtual void  v8(); // _ZN7S5059C22v8Ev
  ~S5059C2(); // tgen
  S5059C2(); // tgen
};
//SIG(-1 S5059C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5059C2 ::v7(){vfunc_called(this, "_ZN7S5059C22v7Ev");}
void  S5059C2 ::v8(){vfunc_called(this, "_ZN7S5059C22v8Ev");}
S5059C2 ::~S5059C2(){ note_dtor("S5059C2", this);} // tgen
S5059C2 ::S5059C2(){ note_ctor("S5059C2", this);} // tgen

static void Test_S5059C2()
{
  extern Class_Descriptor cd_S5059C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5059C2, buf);
    S5059C2 *dp, &lv = *(dp=new (buf) S5059C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5059C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5059C2)");
    check_base_class_offset(lv, (S5059C3*), 0, "S5059C2");
    check_field_offset(lv, s5059c2f0, ABISELECT(40,28), "S5059C2.s5059c2f0");
    test_class_info(&lv, &cd_S5059C2);
    dp->~S5059C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5059C2(Test_S5059C2, "S5059C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5059C2C1Ev();
extern void _ZN7S5059C2D1Ev();
Name_Map name_map_S5059C2[] = {
  NSPAIR(_ZN7S5059C2C1Ev),
  NSPAIR(_ZN7S5059C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5059C3;
extern VTBL_ENTRY _ZTI7S5059C3[];
extern  VTBL_ENTRY _ZTV7S5059C3[];
static Base_Class bases_S5059C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5059C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5059C2[];
extern void _ZN7S5059C2D1Ev();
extern void _ZN7S5059C2D0Ev();
extern void _ZN7S5059C32v4Ev();
extern void _ZN7S5059C32v5Ev();
extern void _ZN7S5059C32v6Ev();
extern void _ZN7S5059C22v7Ev();
extern void _ZN7S5059C22v8Ev();
static  VTBL_ENTRY vtc_S5059C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5059C2[0]),
  (VTBL_ENTRY)&_ZN7S5059C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5059C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5059C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5059C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5059C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5059C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5059C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5059C2[];
extern  VTBL_ENTRY _ZTV7S5059C2[];
Class_Descriptor cd_S5059C2 = {  "S5059C2", // class name
  bases_S5059C2, 1,
  &(vtc_S5059C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5059C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5059C2),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  S5059C1  : S5059C2 , S16130C17_nt {
  void *s5059c1f0;
  int s5059c1f1[2];
  ::S857C9_nt s5059c1f2;
  ::S857C14_nt s5059c1f3;
  virtual  ~S5059C1(); // _ZN7S5059C1D1Ev
  virtual void  v1(); // _ZN7S5059C12v1Ev
  virtual void  v2(); // _ZN7S5059C12v2Ev
  virtual void  v3(); // _ZN7S5059C12v3Ev
  S5059C1(); // tgen
};
//SIG(1 S5059C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} BC6{ m} vd v1 v2 v3 Fp Fi[2] FC7{ m FC8{ FL[4]}} FC9{ m Fp FC10{ Fi[4]}}}


 S5059C1 ::~S5059C1(){ note_dtor("S5059C1", this);}
void  S5059C1 ::v1(){vfunc_called(this, "_ZN7S5059C12v1Ev");}
void  S5059C1 ::v2(){vfunc_called(this, "_ZN7S5059C12v2Ev");}
void  S5059C1 ::v3(){vfunc_called(this, "_ZN7S5059C12v3Ev");}
S5059C1 ::S5059C1(){ note_ctor("S5059C1", this);} // tgen

static void Test_S5059C1()
{
  extern Class_Descriptor cd_S5059C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,25)];
    init_test(&cd_S5059C1, buf);
    S5059C1 *dp, &lv = *(dp=new (buf) S5059C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,96), "sizeof(S5059C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5059C1)");
    check_base_class_offset(lv, (S5059C3*)(S5059C2*), 0, "S5059C1");
    check_base_class_offset(lv, (S5059C2*), 0, "S5059C1");
    check_base_class_offset(lv, (S16130C17_nt*), 0, "S5059C1");
    check_field_offset(lv, s5059c1f0, ABISELECT(48,32), "S5059C1.s5059c1f0");
    check_field_offset(lv, s5059c1f1, ABISELECT(56,36), "S5059C1.s5059c1f1");
    check_field_offset(lv, s5059c1f2, ABISELECT(64,44), "S5059C1.s5059c1f2");
    check_field_offset(lv, s5059c1f3, ABISELECT(96,76), "S5059C1.s5059c1f3");
    test_class_info(&lv, &cd_S5059C1);
    dp->~S5059C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5059C1(Test_S5059C1, "S5059C1", ABISELECT(120,96));

#else // __cplusplus

extern void _ZN7S5059C1C1Ev();
extern void _ZN7S5059C1D1Ev();
Name_Map name_map_S5059C1[] = {
  NSPAIR(_ZN7S5059C1C1Ev),
  NSPAIR(_ZN7S5059C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5059C3;
extern VTBL_ENTRY _ZTI7S5059C3[];
extern  VTBL_ENTRY _ZTV7S5059C3[];
extern Class_Descriptor cd_S5059C2;
extern VTBL_ENTRY _ZTI7S5059C2[];
extern  VTBL_ENTRY _ZTV7S5059C2[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
static Base_Class bases_S5059C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5059C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5059C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5059C1[];
extern void _ZN7S5059C1D1Ev();
extern void _ZN7S5059C1D0Ev();
extern void _ZN7S5059C32v4Ev();
extern void _ZN7S5059C32v5Ev();
extern void _ZN7S5059C32v6Ev();
extern void _ZN7S5059C22v7Ev();
extern void _ZN7S5059C22v8Ev();
extern void _ZN7S5059C12v1Ev();
extern void _ZN7S5059C12v2Ev();
extern void _ZN7S5059C12v3Ev();
static  VTBL_ENTRY vtc_S5059C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5059C1[0]),
  (VTBL_ENTRY)&_ZN7S5059C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5059C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5059C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5059C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5059C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5059C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5059C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5059C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5059C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5059C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5059C1[];
extern  VTBL_ENTRY _ZTV7S5059C1[];
Class_Descriptor cd_S5059C1 = {  "S5059C1", // class name
  bases_S5059C1, 3,
  &(vtc_S5059C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,96), // object size
  NSPAIRA(_ZTI7S5059C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5059C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5058C3  {
  ::S16130C9_nt s5058c3f0;
  int s5058c3f1[2];
  char s5058c3f2;
  virtual  ~S5058C3(); // _ZN7S5058C3D1Ev
  virtual void  v4(); // _ZN7S5058C32v4Ev
  virtual void  v5(); // _ZN7S5058C32v5Ev
  virtual void  v6(); // _ZN7S5058C32v6Ev
  S5058C3(); // tgen
};
//SIG(-1 S5058C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5058C3 ::~S5058C3(){ note_dtor("S5058C3", this);}
void  S5058C3 ::v4(){vfunc_called(this, "_ZN7S5058C32v4Ev");}
void  S5058C3 ::v5(){vfunc_called(this, "_ZN7S5058C32v5Ev");}
void  S5058C3 ::v6(){vfunc_called(this, "_ZN7S5058C32v6Ev");}
S5058C3 ::S5058C3(){ note_ctor("S5058C3", this);} // tgen

static void Test_S5058C3()
{
  extern Class_Descriptor cd_S5058C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5058C3, buf);
    S5058C3 *dp, &lv = *(dp=new (buf) S5058C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5058C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5058C3)");
    check_field_offset(lv, s5058c3f0, ABISELECT(8,4), "S5058C3.s5058c3f0");
    check_field_offset(lv, s5058c3f1, ABISELECT(24,16), "S5058C3.s5058c3f1");
    check_field_offset(lv, s5058c3f2, ABISELECT(32,24), "S5058C3.s5058c3f2");
    test_class_info(&lv, &cd_S5058C3);
    dp->~S5058C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5058C3(Test_S5058C3, "S5058C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5058C3C1Ev();
extern void _ZN7S5058C3D1Ev();
Name_Map name_map_S5058C3[] = {
  NSPAIR(_ZN7S5058C3C1Ev),
  NSPAIR(_ZN7S5058C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5058C3[];
extern void _ZN7S5058C3D1Ev();
extern void _ZN7S5058C3D0Ev();
extern void _ZN7S5058C32v4Ev();
extern void _ZN7S5058C32v5Ev();
extern void _ZN7S5058C32v6Ev();
static  VTBL_ENTRY vtc_S5058C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5058C3[0]),
  (VTBL_ENTRY)&_ZN7S5058C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5058C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5058C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5058C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5058C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5058C3[];
extern  VTBL_ENTRY _ZTV7S5058C3[];
Class_Descriptor cd_S5058C3 = {  "S5058C3", // class name
  0,0,//no base classes
  &(vtc_S5058C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5058C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5058C3),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  S5058C2  : S5058C3 {
  void *s5058c2f0;
  virtual void  v7(); // _ZN7S5058C22v7Ev
  virtual void  v8(); // _ZN7S5058C22v8Ev
  ~S5058C2(); // tgen
  S5058C2(); // tgen
};
//SIG(-1 S5058C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5058C2 ::v7(){vfunc_called(this, "_ZN7S5058C22v7Ev");}
void  S5058C2 ::v8(){vfunc_called(this, "_ZN7S5058C22v8Ev");}
S5058C2 ::~S5058C2(){ note_dtor("S5058C2", this);} // tgen
S5058C2 ::S5058C2(){ note_ctor("S5058C2", this);} // tgen

static void Test_S5058C2()
{
  extern Class_Descriptor cd_S5058C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5058C2, buf);
    S5058C2 *dp, &lv = *(dp=new (buf) S5058C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5058C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5058C2)");
    check_base_class_offset(lv, (S5058C3*), 0, "S5058C2");
    check_field_offset(lv, s5058c2f0, ABISELECT(40,28), "S5058C2.s5058c2f0");
    test_class_info(&lv, &cd_S5058C2);
    dp->~S5058C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5058C2(Test_S5058C2, "S5058C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5058C2C1Ev();
extern void _ZN7S5058C2D1Ev();
Name_Map name_map_S5058C2[] = {
  NSPAIR(_ZN7S5058C2C1Ev),
  NSPAIR(_ZN7S5058C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5058C3;
extern VTBL_ENTRY _ZTI7S5058C3[];
extern  VTBL_ENTRY _ZTV7S5058C3[];
static Base_Class bases_S5058C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5058C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5058C2[];
extern void _ZN7S5058C2D1Ev();
extern void _ZN7S5058C2D0Ev();
extern void _ZN7S5058C32v4Ev();
extern void _ZN7S5058C32v5Ev();
extern void _ZN7S5058C32v6Ev();
extern void _ZN7S5058C22v7Ev();
extern void _ZN7S5058C22v8Ev();
static  VTBL_ENTRY vtc_S5058C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5058C2[0]),
  (VTBL_ENTRY)&_ZN7S5058C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5058C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5058C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5058C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5058C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5058C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5058C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5058C2[];
extern  VTBL_ENTRY _ZTV7S5058C2[];
Class_Descriptor cd_S5058C2 = {  "S5058C2", // class name
  bases_S5058C2, 1,
  &(vtc_S5058C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5058C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5058C2),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  S5058C1  : S5058C2 , S16130C17_nt {
  void *s5058c1f0;
  int s5058c1f1[2];
  ::S856C9_nt s5058c1f2;
  ::S857C14_nt s5058c1f3;
  virtual  ~S5058C1(); // _ZN7S5058C1D1Ev
  virtual void  v1(); // _ZN7S5058C12v1Ev
  virtual void  v2(); // _ZN7S5058C12v2Ev
  virtual void  v3(); // _ZN7S5058C12v3Ev
  S5058C1(); // tgen
};
//SIG(1 S5058C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} BC6{ m} vd v1 v2 v3 Fp Fi[2] FC7{ m FC8{ Fl[4]}} FC9{ m Fp FC10{ Fi[4]}}}


 S5058C1 ::~S5058C1(){ note_dtor("S5058C1", this);}
void  S5058C1 ::v1(){vfunc_called(this, "_ZN7S5058C12v1Ev");}
void  S5058C1 ::v2(){vfunc_called(this, "_ZN7S5058C12v2Ev");}
void  S5058C1 ::v3(){vfunc_called(this, "_ZN7S5058C12v3Ev");}
S5058C1 ::S5058C1(){ note_ctor("S5058C1", this);} // tgen

static void Test_S5058C1()
{
  extern Class_Descriptor cd_S5058C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,21)];
    init_test(&cd_S5058C1, buf);
    S5058C1 *dp, &lv = *(dp=new (buf) S5058C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,80), "sizeof(S5058C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5058C1)");
    check_base_class_offset(lv, (S5058C3*)(S5058C2*), 0, "S5058C1");
    check_base_class_offset(lv, (S5058C2*), 0, "S5058C1");
    check_base_class_offset(lv, (S16130C17_nt*), 0, "S5058C1");
    check_field_offset(lv, s5058c1f0, ABISELECT(48,32), "S5058C1.s5058c1f0");
    check_field_offset(lv, s5058c1f1, ABISELECT(56,36), "S5058C1.s5058c1f1");
    check_field_offset(lv, s5058c1f2, ABISELECT(64,44), "S5058C1.s5058c1f2");
    check_field_offset(lv, s5058c1f3, ABISELECT(96,60), "S5058C1.s5058c1f3");
    test_class_info(&lv, &cd_S5058C1);
    dp->~S5058C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5058C1(Test_S5058C1, "S5058C1", ABISELECT(120,80));

#else // __cplusplus

extern void _ZN7S5058C1C1Ev();
extern void _ZN7S5058C1D1Ev();
Name_Map name_map_S5058C1[] = {
  NSPAIR(_ZN7S5058C1C1Ev),
  NSPAIR(_ZN7S5058C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5058C3;
extern VTBL_ENTRY _ZTI7S5058C3[];
extern  VTBL_ENTRY _ZTV7S5058C3[];
extern Class_Descriptor cd_S5058C2;
extern VTBL_ENTRY _ZTI7S5058C2[];
extern  VTBL_ENTRY _ZTV7S5058C2[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
static Base_Class bases_S5058C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5058C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5058C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5058C1[];
extern void _ZN7S5058C1D1Ev();
extern void _ZN7S5058C1D0Ev();
extern void _ZN7S5058C32v4Ev();
extern void _ZN7S5058C32v5Ev();
extern void _ZN7S5058C32v6Ev();
extern void _ZN7S5058C22v7Ev();
extern void _ZN7S5058C22v8Ev();
extern void _ZN7S5058C12v1Ev();
extern void _ZN7S5058C12v2Ev();
extern void _ZN7S5058C12v3Ev();
static  VTBL_ENTRY vtc_S5058C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5058C1[0]),
  (VTBL_ENTRY)&_ZN7S5058C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5058C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5058C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5058C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5058C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5058C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5058C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5058C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5058C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5058C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5058C1[];
extern  VTBL_ENTRY _ZTV7S5058C1[];
Class_Descriptor cd_S5058C1 = {  "S5058C1", // class name
  bases_S5058C1, 3,
  &(vtc_S5058C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,80), // object size
  NSPAIRA(_ZTI7S5058C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5058C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5055C3  {
  ::S16130C9_nt s5055c3f0;
  int s5055c3f1[2];
  char s5055c3f2;
  virtual  ~S5055C3(); // _ZN7S5055C3D1Ev
  virtual void  v4(); // _ZN7S5055C32v4Ev
  virtual void  v5(); // _ZN7S5055C32v5Ev
  virtual void  v6(); // _ZN7S5055C32v6Ev
  S5055C3(); // tgen
};
//SIG(-1 S5055C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5055C3 ::~S5055C3(){ note_dtor("S5055C3", this);}
void  S5055C3 ::v4(){vfunc_called(this, "_ZN7S5055C32v4Ev");}
void  S5055C3 ::v5(){vfunc_called(this, "_ZN7S5055C32v5Ev");}
void  S5055C3 ::v6(){vfunc_called(this, "_ZN7S5055C32v6Ev");}
S5055C3 ::S5055C3(){ note_ctor("S5055C3", this);} // tgen

static void Test_S5055C3()
{
  extern Class_Descriptor cd_S5055C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5055C3, buf);
    S5055C3 *dp, &lv = *(dp=new (buf) S5055C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5055C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5055C3)");
    check_field_offset(lv, s5055c3f0, ABISELECT(8,4), "S5055C3.s5055c3f0");
    check_field_offset(lv, s5055c3f1, ABISELECT(24,16), "S5055C3.s5055c3f1");
    check_field_offset(lv, s5055c3f2, ABISELECT(32,24), "S5055C3.s5055c3f2");
    test_class_info(&lv, &cd_S5055C3);
    dp->~S5055C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5055C3(Test_S5055C3, "S5055C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5055C3C1Ev();
extern void _ZN7S5055C3D1Ev();
Name_Map name_map_S5055C3[] = {
  NSPAIR(_ZN7S5055C3C1Ev),
  NSPAIR(_ZN7S5055C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5055C3[];
extern void _ZN7S5055C3D1Ev();
extern void _ZN7S5055C3D0Ev();
extern void _ZN7S5055C32v4Ev();
extern void _ZN7S5055C32v5Ev();
extern void _ZN7S5055C32v6Ev();
static  VTBL_ENTRY vtc_S5055C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5055C3[0]),
  (VTBL_ENTRY)&_ZN7S5055C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5055C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5055C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5055C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5055C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5055C3[];
extern  VTBL_ENTRY _ZTV7S5055C3[];
Class_Descriptor cd_S5055C3 = {  "S5055C3", // class name
  0,0,//no base classes
  &(vtc_S5055C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5055C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5055C3),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  S5055C6_nt  {
  void *s5055c6f0;
  int s5055c6f1[5];
  void  mf5055c6(); // _ZN10S5055C6_nt8mf5055c6Ev
  virtual  ~S5055C6_nt(); // _ZN10S5055C6_ntD1Ev
  S5055C6_nt(); // tgen
};
//SIG(-1 S5055C6_nt) C1{ vd m Fp Fi[5]}


void  S5055C6_nt ::mf5055c6(){}
 S5055C6_nt ::~S5055C6_nt(){ note_dtor("S5055C6_nt", this);}
S5055C6_nt ::S5055C6_nt(){ note_ctor("S5055C6_nt", this);} // tgen

//skip512 S5055C6_nt

#else // __cplusplus

extern void _ZN10S5055C6_ntC1Ev();
extern void _ZN10S5055C6_ntD1Ev();
Name_Map name_map_S5055C6_nt[] = {
  NSPAIR(_ZN10S5055C6_ntC1Ev),
  NSPAIR(_ZN10S5055C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5055C6_nt[];
extern void _ZN10S5055C6_ntD1Ev();
extern void _ZN10S5055C6_ntD0Ev();
static  VTBL_ENTRY vtc_S5055C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5055C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S5055C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5055C6_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S5055C6_nt[];
VTBL_ENTRY *P__ZTI10S5055C6_nt = _ZTI10S5055C6_nt; 
extern  VTBL_ENTRY _ZTV10S5055C6_nt[];
Class_Descriptor cd_S5055C6_nt = {  "S5055C6_nt", // class name
  0,0,//no base classes
  &(vtc_S5055C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S5055C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5055C6_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  S5055C2  : S5055C3 , S5055C6_nt {
  virtual  ~S5055C2(); // _ZN7S5055C2D1Ev
  virtual void  v7(); // _ZN7S5055C22v7Ev
  virtual void  v8(); // _ZN7S5055C22v8Ev
  S5055C2(); // tgen
};
//SIG(-1 S5055C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m Fp Fi[5]} vd v1 v2}


 S5055C2 ::~S5055C2(){ note_dtor("S5055C2", this);}
void  S5055C2 ::v7(){vfunc_called(this, "_ZN7S5055C22v7Ev");}
void  S5055C2 ::v8(){vfunc_called(this, "_ZN7S5055C22v8Ev");}
S5055C2 ::S5055C2(){ note_ctor("S5055C2", this);} // tgen

static void Test_S5055C2()
{
  extern Class_Descriptor cd_S5055C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S5055C2, buf);
    S5055C2 *dp, &lv = *(dp=new (buf) S5055C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S5055C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5055C2)");
    check_base_class_offset(lv, (S5055C3*), 0, "S5055C2");
    check_base_class_offset(lv, (S5055C6_nt*), ABISELECT(40,28), "S5055C2");
    test_class_info(&lv, &cd_S5055C2);
    dp->~S5055C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5055C2(Test_S5055C2, "S5055C2", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S5055C2C1Ev();
extern void _ZN7S5055C2D1Ev();
Name_Map name_map_S5055C2[] = {
  NSPAIR(_ZN7S5055C2C1Ev),
  NSPAIR(_ZN7S5055C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5055C3;
extern VTBL_ENTRY _ZTI7S5055C3[];
extern  VTBL_ENTRY _ZTV7S5055C3[];
extern Class_Descriptor cd_S5055C6_nt;
extern VTBL_ENTRY _ZTI10S5055C6_nt[];
extern  VTBL_ENTRY _ZTV10S5055C6_nt[];
static Base_Class bases_S5055C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5055C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5055C6_nt,    ABISELECT(40,28), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5055C2[];
extern void _ZN7S5055C2D1Ev();
extern void _ZN7S5055C2D0Ev();
extern void _ZN7S5055C32v4Ev();
extern void _ZN7S5055C32v5Ev();
extern void _ZN7S5055C32v6Ev();
extern void _ZN7S5055C22v7Ev();
extern void _ZN7S5055C22v8Ev();
extern void ABISELECT(_ZThn40_N7S5055C2D1Ev,_ZThn28_N7S5055C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S5055C2D0Ev,_ZThn28_N7S5055C2D0Ev)();
static  VTBL_ENTRY vtc_S5055C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5055C2[0]),
  (VTBL_ENTRY)&_ZN7S5055C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5055C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5055C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5055C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5055C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5055C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5055C22v8Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S5055C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S5055C2D1Ev,_ZThn28_N7S5055C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S5055C2D0Ev,_ZThn28_N7S5055C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S5055C2[];
extern  VTBL_ENTRY _ZTV7S5055C2[];
Class_Descriptor cd_S5055C2 = {  "S5055C2", // class name
  bases_S5055C2, 2,
  &(vtc_S5055C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S5055C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5055C2),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5055C8_nt  {
  char s5055c8f0[20];
};
//SIG(-1 S5055C8_nt) C1{ Fc[20]}



//skip512 S5055C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5055C7_nt  {
  ::S5055C8_nt s5055c7f0;
  char s5055c7f1[16];
};
//SIG(-1 S5055C7_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S5055C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5055C1  : S5055C2 {
  ::S5055C7_nt s5055c1f0;
  void *s5055c1f1[2];
  int s5055c1f2;
  virtual  ~S5055C1(); // _ZN7S5055C1D1Ev
  virtual void  v1(); // _ZN7S5055C12v1Ev
  virtual void  v2(); // _ZN7S5055C12v2Ev
  virtual void  v3(); // _ZN7S5055C12v3Ev
  S5055C1(); // tgen
};
//SIG(1 S5055C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m Fp Fi[5]} vd v7 v8} vd v1 v2 v3 FC7{ FC8{ Fc[20]} Fc[16]} Fp[2] Fi}


 S5055C1 ::~S5055C1(){ note_dtor("S5055C1", this);}
void  S5055C1 ::v1(){vfunc_called(this, "_ZN7S5055C12v1Ev");}
void  S5055C1 ::v2(){vfunc_called(this, "_ZN7S5055C12v2Ev");}
void  S5055C1 ::v3(){vfunc_called(this, "_ZN7S5055C12v3Ev");}
S5055C1 ::S5055C1(){ note_ctor("S5055C1", this);} // tgen

static void Test_S5055C1()
{
  extern Class_Descriptor cd_S5055C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,27)];
    init_test(&cd_S5055C1, buf);
    S5055C1 *dp, &lv = *(dp=new (buf) S5055C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,104), "sizeof(S5055C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5055C1)");
    check_base_class_offset(lv, (S5055C3*)(S5055C2*), 0, "S5055C1");
    check_base_class_offset(lv, (S5055C6_nt*)(S5055C2*), ABISELECT(40,28), "S5055C1");
    check_base_class_offset(lv, (S5055C2*), 0, "S5055C1");
    check_field_offset(lv, s5055c1f0, ABISELECT(76,56), "S5055C1.s5055c1f0");
    check_field_offset(lv, s5055c1f1, ABISELECT(112,92), "S5055C1.s5055c1f1");
    check_field_offset(lv, s5055c1f2, ABISELECT(128,100), "S5055C1.s5055c1f2");
    test_class_info(&lv, &cd_S5055C1);
    dp->~S5055C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5055C1(Test_S5055C1, "S5055C1", ABISELECT(136,104));

#else // __cplusplus

extern void _ZN7S5055C1C1Ev();
extern void _ZN7S5055C1D1Ev();
Name_Map name_map_S5055C1[] = {
  NSPAIR(_ZN7S5055C1C1Ev),
  NSPAIR(_ZN7S5055C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5055C3;
extern VTBL_ENTRY _ZTI7S5055C3[];
extern  VTBL_ENTRY _ZTV7S5055C3[];
extern Class_Descriptor cd_S5055C6_nt;
extern VTBL_ENTRY _ZTI10S5055C6_nt[];
extern  VTBL_ENTRY _ZTV10S5055C6_nt[];
extern Class_Descriptor cd_S5055C2;
extern VTBL_ENTRY _ZTI7S5055C2[];
extern  VTBL_ENTRY _ZTV7S5055C2[];
static Base_Class bases_S5055C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5055C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5055C6_nt,    ABISELECT(40,28), //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
    2, //immediately_derived
  0, 0},
  {&cd_S5055C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5055C1[];
extern void _ZN7S5055C1D1Ev();
extern void _ZN7S5055C1D0Ev();
extern void _ZN7S5055C32v4Ev();
extern void _ZN7S5055C32v5Ev();
extern void _ZN7S5055C32v6Ev();
extern void _ZN7S5055C22v7Ev();
extern void _ZN7S5055C22v8Ev();
extern void _ZN7S5055C12v1Ev();
extern void _ZN7S5055C12v2Ev();
extern void _ZN7S5055C12v3Ev();
extern void ABISELECT(_ZThn40_N7S5055C1D1Ev,_ZThn28_N7S5055C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S5055C1D0Ev,_ZThn28_N7S5055C1D0Ev)();
static  VTBL_ENTRY vtc_S5055C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5055C1[0]),
  (VTBL_ENTRY)&_ZN7S5055C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5055C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5055C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5055C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5055C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5055C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5055C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5055C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5055C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5055C12v3Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S5055C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S5055C1D1Ev,_ZThn28_N7S5055C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S5055C1D0Ev,_ZThn28_N7S5055C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S5055C1[];
extern  VTBL_ENTRY _ZTV7S5055C1[];
Class_Descriptor cd_S5055C1 = {  "S5055C1", // class name
  bases_S5055C1, 3,
  &(vtc_S5055C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,104), // object size
  NSPAIRA(_ZTI7S5055C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5055C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5060C3  {
  ::S16130C9_nt s5060c3f0;
  int s5060c3f1[2];
  char s5060c3f2;
  virtual  ~S5060C3(); // _ZN7S5060C3D1Ev
  virtual void  v4(); // _ZN7S5060C32v4Ev
  virtual void  v5(); // _ZN7S5060C32v5Ev
  virtual void  v6(); // _ZN7S5060C32v6Ev
  S5060C3(); // tgen
};
//SIG(-1 S5060C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5060C3 ::~S5060C3(){ note_dtor("S5060C3", this);}
void  S5060C3 ::v4(){vfunc_called(this, "_ZN7S5060C32v4Ev");}
void  S5060C3 ::v5(){vfunc_called(this, "_ZN7S5060C32v5Ev");}
void  S5060C3 ::v6(){vfunc_called(this, "_ZN7S5060C32v6Ev");}
S5060C3 ::S5060C3(){ note_ctor("S5060C3", this);} // tgen

static void Test_S5060C3()
{
  extern Class_Descriptor cd_S5060C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5060C3, buf);
    S5060C3 *dp, &lv = *(dp=new (buf) S5060C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5060C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5060C3)");
    check_field_offset(lv, s5060c3f0, ABISELECT(8,4), "S5060C3.s5060c3f0");
    check_field_offset(lv, s5060c3f1, ABISELECT(24,16), "S5060C3.s5060c3f1");
    check_field_offset(lv, s5060c3f2, ABISELECT(32,24), "S5060C3.s5060c3f2");
    test_class_info(&lv, &cd_S5060C3);
    dp->~S5060C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5060C3(Test_S5060C3, "S5060C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5060C3C1Ev();
extern void _ZN7S5060C3D1Ev();
Name_Map name_map_S5060C3[] = {
  NSPAIR(_ZN7S5060C3C1Ev),
  NSPAIR(_ZN7S5060C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5060C3[];
extern void _ZN7S5060C3D1Ev();
extern void _ZN7S5060C3D0Ev();
extern void _ZN7S5060C32v4Ev();
extern void _ZN7S5060C32v5Ev();
extern void _ZN7S5060C32v6Ev();
static  VTBL_ENTRY vtc_S5060C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5060C3[0]),
  (VTBL_ENTRY)&_ZN7S5060C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5060C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5060C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5060C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5060C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5060C3[];
extern  VTBL_ENTRY _ZTV7S5060C3[];
Class_Descriptor cd_S5060C3 = {  "S5060C3", // class name
  0,0,//no base classes
  &(vtc_S5060C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5060C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5060C3),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  S5060C2  : S5060C3 {
  void *s5060c2f0;
  virtual void  v7(); // _ZN7S5060C22v7Ev
  virtual void  v8(); // _ZN7S5060C22v8Ev
  ~S5060C2(); // tgen
  S5060C2(); // tgen
};
//SIG(-1 S5060C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5060C2 ::v7(){vfunc_called(this, "_ZN7S5060C22v7Ev");}
void  S5060C2 ::v8(){vfunc_called(this, "_ZN7S5060C22v8Ev");}
S5060C2 ::~S5060C2(){ note_dtor("S5060C2", this);} // tgen
S5060C2 ::S5060C2(){ note_ctor("S5060C2", this);} // tgen

static void Test_S5060C2()
{
  extern Class_Descriptor cd_S5060C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5060C2, buf);
    S5060C2 *dp, &lv = *(dp=new (buf) S5060C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5060C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5060C2)");
    check_base_class_offset(lv, (S5060C3*), 0, "S5060C2");
    check_field_offset(lv, s5060c2f0, ABISELECT(40,28), "S5060C2.s5060c2f0");
    test_class_info(&lv, &cd_S5060C2);
    dp->~S5060C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5060C2(Test_S5060C2, "S5060C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5060C2C1Ev();
extern void _ZN7S5060C2D1Ev();
Name_Map name_map_S5060C2[] = {
  NSPAIR(_ZN7S5060C2C1Ev),
  NSPAIR(_ZN7S5060C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5060C3;
extern VTBL_ENTRY _ZTI7S5060C3[];
extern  VTBL_ENTRY _ZTV7S5060C3[];
static Base_Class bases_S5060C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5060C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5060C2[];
extern void _ZN7S5060C2D1Ev();
extern void _ZN7S5060C2D0Ev();
extern void _ZN7S5060C32v4Ev();
extern void _ZN7S5060C32v5Ev();
extern void _ZN7S5060C32v6Ev();
extern void _ZN7S5060C22v7Ev();
extern void _ZN7S5060C22v8Ev();
static  VTBL_ENTRY vtc_S5060C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5060C2[0]),
  (VTBL_ENTRY)&_ZN7S5060C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5060C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5060C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5060C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5060C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5060C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5060C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5060C2[];
extern  VTBL_ENTRY _ZTV7S5060C2[];
Class_Descriptor cd_S5060C2 = {  "S5060C2", // class name
  bases_S5060C2, 1,
  &(vtc_S5060C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5060C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5060C2),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  S5060C1  : S5060C2 , S16130C17_nt {
  void *s5060c1f0;
  int s5060c1f1[2];
  ::S16130C2_nt s5060c1f2;
  ::S857C14_nt s5060c1f3;
  virtual  ~S5060C1(); // _ZN7S5060C1D1Ev
  virtual void  v1(); // _ZN7S5060C12v1Ev
  virtual void  v2(); // _ZN7S5060C12v2Ev
  virtual void  v3(); // _ZN7S5060C12v3Ev
  S5060C1(); // tgen
};
//SIG(1 S5060C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} BC6{ m} vd v1 v2 v3 Fp Fi[2] FC7{ m FL[4]} FC8{ m Fp FC9{ Fi[4]}}}


 S5060C1 ::~S5060C1(){ note_dtor("S5060C1", this);}
void  S5060C1 ::v1(){vfunc_called(this, "_ZN7S5060C12v1Ev");}
void  S5060C1 ::v2(){vfunc_called(this, "_ZN7S5060C12v2Ev");}
void  S5060C1 ::v3(){vfunc_called(this, "_ZN7S5060C12v3Ev");}
S5060C1 ::S5060C1(){ note_ctor("S5060C1", this);} // tgen

static void Test_S5060C1()
{
  extern Class_Descriptor cd_S5060C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,25)];
    init_test(&cd_S5060C1, buf);
    S5060C1 *dp, &lv = *(dp=new (buf) S5060C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,96), "sizeof(S5060C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5060C1)");
    check_base_class_offset(lv, (S5060C3*)(S5060C2*), 0, "S5060C1");
    check_base_class_offset(lv, (S5060C2*), 0, "S5060C1");
    check_base_class_offset(lv, (S16130C17_nt*), 0, "S5060C1");
    check_field_offset(lv, s5060c1f0, ABISELECT(48,32), "S5060C1.s5060c1f0");
    check_field_offset(lv, s5060c1f1, ABISELECT(56,36), "S5060C1.s5060c1f1");
    check_field_offset(lv, s5060c1f2, ABISELECT(64,44), "S5060C1.s5060c1f2");
    check_field_offset(lv, s5060c1f3, ABISELECT(96,76), "S5060C1.s5060c1f3");
    test_class_info(&lv, &cd_S5060C1);
    dp->~S5060C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5060C1(Test_S5060C1, "S5060C1", ABISELECT(120,96));

#else // __cplusplus

extern void _ZN7S5060C1C1Ev();
extern void _ZN7S5060C1D1Ev();
Name_Map name_map_S5060C1[] = {
  NSPAIR(_ZN7S5060C1C1Ev),
  NSPAIR(_ZN7S5060C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5060C3;
extern VTBL_ENTRY _ZTI7S5060C3[];
extern  VTBL_ENTRY _ZTV7S5060C3[];
extern Class_Descriptor cd_S5060C2;
extern VTBL_ENTRY _ZTI7S5060C2[];
extern  VTBL_ENTRY _ZTV7S5060C2[];
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
static Base_Class bases_S5060C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5060C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5060C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5060C1[];
extern void _ZN7S5060C1D1Ev();
extern void _ZN7S5060C1D0Ev();
extern void _ZN7S5060C32v4Ev();
extern void _ZN7S5060C32v5Ev();
extern void _ZN7S5060C32v6Ev();
extern void _ZN7S5060C22v7Ev();
extern void _ZN7S5060C22v8Ev();
extern void _ZN7S5060C12v1Ev();
extern void _ZN7S5060C12v2Ev();
extern void _ZN7S5060C12v3Ev();
static  VTBL_ENTRY vtc_S5060C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5060C1[0]),
  (VTBL_ENTRY)&_ZN7S5060C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5060C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5060C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5060C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5060C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5060C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5060C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5060C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5060C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5060C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5060C1[];
extern  VTBL_ENTRY _ZTV7S5060C1[];
Class_Descriptor cd_S5060C1 = {  "S5060C1", // class name
  bases_S5060C1, 3,
  &(vtc_S5060C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,96), // object size
  NSPAIRA(_ZTI7S5060C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5060C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S817C5_nt  {
  void  mf817c5(); // _ZN9S817C5_nt7mf817c5Ev
  virtual  ~S817C5_nt(); // _ZN9S817C5_ntD1Ev
  S817C5_nt(); // tgen
};
//SIG(-1 S817C5_nt) C1{ vd m}


void  S817C5_nt ::mf817c5(){}
 S817C5_nt ::~S817C5_nt(){ note_dtor("S817C5_nt", this);}
S817C5_nt ::S817C5_nt(){ note_ctor("S817C5_nt", this);} // tgen

//skip512 S817C5_nt

#else // __cplusplus

extern void _ZN9S817C5_ntC1Ev();
extern void _ZN9S817C5_ntD1Ev();
Name_Map name_map_S817C5_nt[] = {
  NSPAIR(_ZN9S817C5_ntC1Ev),
  NSPAIR(_ZN9S817C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S817C5_nt[];
extern void _ZN9S817C5_ntD1Ev();
extern void _ZN9S817C5_ntD0Ev();
static  VTBL_ENTRY vtc_S817C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S817C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S817C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S817C5_ntD0Ev,
};
extern VTBL_ENTRY _ZTI9S817C5_nt[];
VTBL_ENTRY *P__ZTI9S817C5_nt = _ZTI9S817C5_nt; 
extern  VTBL_ENTRY _ZTV9S817C5_nt[];
Class_Descriptor cd_S817C5_nt = {  "S817C5_nt", // class name
  0,0,//no base classes
  &(vtc_S817C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S817C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S817C5_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  S817C4_nt  : S817C5_nt {
  short s817c4f0[2];
  virtual  ~S817C4_nt(); // _ZN9S817C4_ntD1Ev
  virtual void  v5(); // _ZN9S817C4_nt2v5Ev
  S817C4_nt(); // tgen
};
//SIG(-1 S817C4_nt) C1{ BC2{ vd m} vd v1 Fs[2]}


 S817C4_nt ::~S817C4_nt(){ note_dtor("S817C4_nt", this);}
void  S817C4_nt ::v5(){vfunc_called(this, "_ZN9S817C4_nt2v5Ev");}
S817C4_nt ::S817C4_nt(){ note_ctor("S817C4_nt", this);} // tgen

//skip512 S817C4_nt

#else // __cplusplus

extern void _ZN9S817C4_ntC1Ev();
extern void _ZN9S817C4_ntD1Ev();
Name_Map name_map_S817C4_nt[] = {
  NSPAIR(_ZN9S817C4_ntC1Ev),
  NSPAIR(_ZN9S817C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S817C5_nt;
extern VTBL_ENTRY _ZTI9S817C5_nt[];
extern  VTBL_ENTRY _ZTV9S817C5_nt[];
static Base_Class bases_S817C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S817C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S817C4_nt[];
extern void _ZN9S817C4_ntD1Ev();
extern void _ZN9S817C4_ntD0Ev();
extern void _ZN9S817C4_nt2v5Ev();
static  VTBL_ENTRY vtc_S817C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S817C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S817C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S817C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S817C4_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI9S817C4_nt[];
VTBL_ENTRY *P__ZTI9S817C4_nt = _ZTI9S817C4_nt; 
extern  VTBL_ENTRY _ZTV9S817C4_nt[];
Class_Descriptor cd_S817C4_nt = {  "S817C4_nt", // class name
  bases_S817C4_nt, 1,
  &(vtc_S817C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S817C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S817C4_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S817C3_nt  : S817C4_nt {
  void *s817c3f0;
  virtual  ~S817C3_nt(); // _ZN9S817C3_ntD1Ev
  virtual void  v6(); // _ZN9S817C3_nt2v6Ev
  virtual void  v7(); // _ZN9S817C3_nt2v7Ev
  virtual void  v8(); // _ZN9S817C3_nt2v8Ev
  virtual void  v9(); // _ZN9S817C3_nt2v9Ev
  virtual void  v10(); // _ZN9S817C3_nt3v10Ev
  virtual void  v11(); // _ZN9S817C3_nt3v11Ev
  virtual void  v12(); // _ZN9S817C3_nt3v12Ev
  virtual void  v13(); // _ZN9S817C3_nt3v13Ev
  virtual void  v14(); // _ZN9S817C3_nt3v14Ev
  virtual void  v15(); // _ZN9S817C3_nt3v15Ev
  virtual void  v16(); // _ZN9S817C3_nt3v16Ev
  S817C3_nt(); // tgen
};
//SIG(-1 S817C3_nt) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S817C3_nt ::~S817C3_nt(){ note_dtor("S817C3_nt", this);}
void  S817C3_nt ::v6(){vfunc_called(this, "_ZN9S817C3_nt2v6Ev");}
void  S817C3_nt ::v7(){vfunc_called(this, "_ZN9S817C3_nt2v7Ev");}
void  S817C3_nt ::v8(){vfunc_called(this, "_ZN9S817C3_nt2v8Ev");}
void  S817C3_nt ::v9(){vfunc_called(this, "_ZN9S817C3_nt2v9Ev");}
void  S817C3_nt ::v10(){vfunc_called(this, "_ZN9S817C3_nt3v10Ev");}
void  S817C3_nt ::v11(){vfunc_called(this, "_ZN9S817C3_nt3v11Ev");}
void  S817C3_nt ::v12(){vfunc_called(this, "_ZN9S817C3_nt3v12Ev");}
void  S817C3_nt ::v13(){vfunc_called(this, "_ZN9S817C3_nt3v13Ev");}
void  S817C3_nt ::v14(){vfunc_called(this, "_ZN9S817C3_nt3v14Ev");}
void  S817C3_nt ::v15(){vfunc_called(this, "_ZN9S817C3_nt3v15Ev");}
void  S817C3_nt ::v16(){vfunc_called(this, "_ZN9S817C3_nt3v16Ev");}
S817C3_nt ::S817C3_nt(){ note_ctor("S817C3_nt", this);} // tgen

//skip512 S817C3_nt

#else // __cplusplus

extern void _ZN9S817C3_ntC1Ev();
extern void _ZN9S817C3_ntD1Ev();
Name_Map name_map_S817C3_nt[] = {
  NSPAIR(_ZN9S817C3_ntC1Ev),
  NSPAIR(_ZN9S817C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S817C5_nt;
extern VTBL_ENTRY _ZTI9S817C5_nt[];
extern  VTBL_ENTRY _ZTV9S817C5_nt[];
extern Class_Descriptor cd_S817C4_nt;
extern VTBL_ENTRY _ZTI9S817C4_nt[];
extern  VTBL_ENTRY _ZTV9S817C4_nt[];
static Base_Class bases_S817C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S817C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S817C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S817C3_nt[];
extern void _ZN9S817C3_ntD1Ev();
extern void _ZN9S817C3_ntD0Ev();
extern void _ZN9S817C4_nt2v5Ev();
extern void _ZN9S817C3_nt2v6Ev();
extern void _ZN9S817C3_nt2v7Ev();
extern void _ZN9S817C3_nt2v8Ev();
extern void _ZN9S817C3_nt2v9Ev();
extern void _ZN9S817C3_nt3v10Ev();
extern void _ZN9S817C3_nt3v11Ev();
extern void _ZN9S817C3_nt3v12Ev();
extern void _ZN9S817C3_nt3v13Ev();
extern void _ZN9S817C3_nt3v14Ev();
extern void _ZN9S817C3_nt3v15Ev();
extern void _ZN9S817C3_nt3v16Ev();
static  VTBL_ENTRY vtc_S817C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S817C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S817C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S817C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S817C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v16Ev,
};
extern VTBL_ENTRY _ZTI9S817C3_nt[];
VTBL_ENTRY *P__ZTI9S817C3_nt = _ZTI9S817C3_nt; 
extern  VTBL_ENTRY _ZTV9S817C3_nt[];
Class_Descriptor cd_S817C3_nt = {  "S817C3_nt", // class name
  bases_S817C3_nt, 2,
  &(vtc_S817C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S817C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S817C3_nt),16, //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  S817C2_nt  : S817C3_nt {
  virtual  ~S817C2_nt(); // _ZN9S817C2_ntD1Ev
  virtual void  v17(); // _ZN9S817C2_nt3v17Ev
  S817C2_nt(); // tgen
};
//SIG(-1 S817C2_nt) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


 S817C2_nt ::~S817C2_nt(){ note_dtor("S817C2_nt", this);}
void  S817C2_nt ::v17(){vfunc_called(this, "_ZN9S817C2_nt3v17Ev");}
S817C2_nt ::S817C2_nt(){ note_ctor("S817C2_nt", this);} // tgen

//skip512 S817C2_nt

#else // __cplusplus

extern void _ZN9S817C2_ntC1Ev();
extern void _ZN9S817C2_ntD1Ev();
Name_Map name_map_S817C2_nt[] = {
  NSPAIR(_ZN9S817C2_ntC1Ev),
  NSPAIR(_ZN9S817C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S817C5_nt;
extern VTBL_ENTRY _ZTI9S817C5_nt[];
extern  VTBL_ENTRY _ZTV9S817C5_nt[];
extern Class_Descriptor cd_S817C4_nt;
extern VTBL_ENTRY _ZTI9S817C4_nt[];
extern  VTBL_ENTRY _ZTV9S817C4_nt[];
extern Class_Descriptor cd_S817C3_nt;
extern VTBL_ENTRY _ZTI9S817C3_nt[];
extern  VTBL_ENTRY _ZTV9S817C3_nt[];
static Base_Class bases_S817C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S817C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S817C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S817C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S817C2_nt[];
extern void _ZN9S817C2_ntD1Ev();
extern void _ZN9S817C2_ntD0Ev();
extern void _ZN9S817C4_nt2v5Ev();
extern void _ZN9S817C3_nt2v6Ev();
extern void _ZN9S817C3_nt2v7Ev();
extern void _ZN9S817C3_nt2v8Ev();
extern void _ZN9S817C3_nt2v9Ev();
extern void _ZN9S817C3_nt3v10Ev();
extern void _ZN9S817C3_nt3v11Ev();
extern void _ZN9S817C3_nt3v12Ev();
extern void _ZN9S817C3_nt3v13Ev();
extern void _ZN9S817C3_nt3v14Ev();
extern void _ZN9S817C3_nt3v15Ev();
extern void _ZN9S817C3_nt3v16Ev();
extern void _ZN9S817C2_nt3v17Ev();
static  VTBL_ENTRY vtc_S817C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S817C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S817C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S817C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S817C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S817C2_nt3v17Ev,
};
extern VTBL_ENTRY _ZTI9S817C2_nt[];
VTBL_ENTRY *P__ZTI9S817C2_nt = _ZTI9S817C2_nt; 
extern  VTBL_ENTRY _ZTV9S817C2_nt[];
Class_Descriptor cd_S817C2_nt = {  "S817C2_nt", // class name
  bases_S817C2_nt, 3,
  &(vtc_S817C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S817C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S817C2_nt),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S817C1  : S817C2_nt {
  ::S857C15_nt s817c1f0;
  short s817c1f1[8];
  virtual void  v1(); // _ZN6S817C12v1Ev
  virtual void  v2(); // _ZN6S817C12v2Ev
  virtual void  v3(); // _ZN6S817C12v3Ev
  virtual void  v4(); // _ZN6S817C12v4Ev
  ~S817C1(); // tgen
  S817C1(); // tgen
};
//SIG(1 S817C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v5 Fs[2]} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} vd v17} v1 v2 v3 v4 FC6{ Fi[4]} Fs[8]}


void  S817C1 ::v1(){vfunc_called(this, "_ZN6S817C12v1Ev");}
void  S817C1 ::v2(){vfunc_called(this, "_ZN6S817C12v2Ev");}
void  S817C1 ::v3(){vfunc_called(this, "_ZN6S817C12v3Ev");}
void  S817C1 ::v4(){vfunc_called(this, "_ZN6S817C12v4Ev");}
S817C1 ::~S817C1(){ note_dtor("S817C1", this);} // tgen
S817C1 ::S817C1(){ note_ctor("S817C1", this);} // tgen

static void Test_S817C1()
{
  extern Class_Descriptor cd_S817C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S817C1, buf);
    S817C1 *dp, &lv = *(dp=new (buf) S817C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S817C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S817C1)");
    check_base_class_offset(lv, (S817C5_nt*)(S817C4_nt*)(S817C3_nt*)(S817C2_nt*), 0, "S817C1");
    check_base_class_offset(lv, (S817C4_nt*)(S817C3_nt*)(S817C2_nt*), 0, "S817C1");
    check_base_class_offset(lv, (S817C3_nt*)(S817C2_nt*), 0, "S817C1");
    check_base_class_offset(lv, (S817C2_nt*), 0, "S817C1");
    check_field_offset(lv, s817c1f0, ABISELECT(24,12), "S817C1.s817c1f0");
    check_field_offset(lv, s817c1f1, ABISELECT(40,28), "S817C1.s817c1f1");
    test_class_info(&lv, &cd_S817C1);
    dp->~S817C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS817C1(Test_S817C1, "S817C1", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN6S817C1C1Ev();
extern void _ZN6S817C1D1Ev();
Name_Map name_map_S817C1[] = {
  NSPAIR(_ZN6S817C1C1Ev),
  NSPAIR(_ZN6S817C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S817C5_nt;
extern VTBL_ENTRY _ZTI9S817C5_nt[];
extern  VTBL_ENTRY _ZTV9S817C5_nt[];
extern Class_Descriptor cd_S817C4_nt;
extern VTBL_ENTRY _ZTI9S817C4_nt[];
extern  VTBL_ENTRY _ZTV9S817C4_nt[];
extern Class_Descriptor cd_S817C3_nt;
extern VTBL_ENTRY _ZTI9S817C3_nt[];
extern  VTBL_ENTRY _ZTV9S817C3_nt[];
extern Class_Descriptor cd_S817C2_nt;
extern VTBL_ENTRY _ZTI9S817C2_nt[];
extern  VTBL_ENTRY _ZTV9S817C2_nt[];
static Base_Class bases_S817C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S817C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S817C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S817C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S817C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S817C1[];
extern void _ZN6S817C1D1Ev();
extern void _ZN6S817C1D0Ev();
extern void _ZN9S817C4_nt2v5Ev();
extern void _ZN9S817C3_nt2v6Ev();
extern void _ZN9S817C3_nt2v7Ev();
extern void _ZN9S817C3_nt2v8Ev();
extern void _ZN9S817C3_nt2v9Ev();
extern void _ZN9S817C3_nt3v10Ev();
extern void _ZN9S817C3_nt3v11Ev();
extern void _ZN9S817C3_nt3v12Ev();
extern void _ZN9S817C3_nt3v13Ev();
extern void _ZN9S817C3_nt3v14Ev();
extern void _ZN9S817C3_nt3v15Ev();
extern void _ZN9S817C3_nt3v16Ev();
extern void _ZN9S817C2_nt3v17Ev();
extern void _ZN6S817C12v1Ev();
extern void _ZN6S817C12v2Ev();
extern void _ZN6S817C12v3Ev();
extern void _ZN6S817C12v4Ev();
static  VTBL_ENTRY vtc_S817C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S817C1[0]),
  (VTBL_ENTRY)&_ZN6S817C1D1Ev,
  (VTBL_ENTRY)&_ZN6S817C1D0Ev,
  (VTBL_ENTRY)&_ZN9S817C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S817C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S817C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN6S817C12v1Ev,
  (VTBL_ENTRY)&_ZN6S817C12v2Ev,
  (VTBL_ENTRY)&_ZN6S817C12v3Ev,
  (VTBL_ENTRY)&_ZN6S817C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S817C1[];
extern  VTBL_ENTRY _ZTV6S817C1[];
Class_Descriptor cd_S817C1 = {  "S817C1", // class name
  bases_S817C1, 4,
  &(vtc_S817C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI6S817C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S817C1),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S819C4  : S817C5_nt {
  short s819c4f0[2];
  virtual  ~S819C4(); // _ZN6S819C4D1Ev
  virtual void  v5(); // _ZN6S819C42v5Ev
  S819C4(); // tgen
};
//SIG(-1 S819C4) C1{ BC2{ vd m} vd v1 Fs[2]}


 S819C4 ::~S819C4(){ note_dtor("S819C4", this);}
void  S819C4 ::v5(){vfunc_called(this, "_ZN6S819C42v5Ev");}
S819C4 ::S819C4(){ note_ctor("S819C4", this);} // tgen

static void Test_S819C4()
{
  extern Class_Descriptor cd_S819C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S819C4, buf);
    S819C4 *dp, &lv = *(dp=new (buf) S819C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S819C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S819C4)");
    check_base_class_offset(lv, (S817C5_nt*), 0, "S819C4");
    check_field_offset(lv, s819c4f0, ABISELECT(8,4), "S819C4.s819c4f0");
    test_class_info(&lv, &cd_S819C4);
    dp->~S819C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS819C4(Test_S819C4, "S819C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S819C4C1Ev();
extern void _ZN6S819C4D1Ev();
Name_Map name_map_S819C4[] = {
  NSPAIR(_ZN6S819C4C1Ev),
  NSPAIR(_ZN6S819C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S817C5_nt;
extern VTBL_ENTRY _ZTI9S817C5_nt[];
extern  VTBL_ENTRY _ZTV9S817C5_nt[];
static Base_Class bases_S819C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S817C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S819C4[];
extern void _ZN6S819C4D1Ev();
extern void _ZN6S819C4D0Ev();
extern void _ZN6S819C42v5Ev();
static  VTBL_ENTRY vtc_S819C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S819C4[0]),
  (VTBL_ENTRY)&_ZN6S819C4D1Ev,
  (VTBL_ENTRY)&_ZN6S819C4D0Ev,
  (VTBL_ENTRY)&_ZN6S819C42v5Ev,
};
extern VTBL_ENTRY _ZTI6S819C4[];
extern  VTBL_ENTRY _ZTV6S819C4[];
Class_Descriptor cd_S819C4 = {  "S819C4", // class name
  bases_S819C4, 1,
  &(vtc_S819C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S819C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S819C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S819C3  : S819C4 {
  void *s819c3f0;
  virtual  ~S819C3(); // _ZN6S819C3D1Ev
  virtual void  v6(); // _ZN6S819C32v6Ev
  virtual void  v7(); // _ZN6S819C32v7Ev
  virtual void  v8(); // _ZN6S819C32v8Ev
  virtual void  v9(); // _ZN6S819C32v9Ev
  virtual void  v10(); // _ZN6S819C33v10Ev
  virtual void  v11(); // _ZN6S819C33v11Ev
  virtual void  v12(); // _ZN6S819C33v12Ev
  virtual void  v13(); // _ZN6S819C33v13Ev
  virtual void  v14(); // _ZN6S819C33v14Ev
  virtual void  v15(); // _ZN6S819C33v15Ev
  virtual void  v16(); // _ZN6S819C33v16Ev
  S819C3(); // tgen
};
//SIG(-1 S819C3) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S819C3 ::~S819C3(){ note_dtor("S819C3", this);}
void  S819C3 ::v6(){vfunc_called(this, "_ZN6S819C32v6Ev");}
void  S819C3 ::v7(){vfunc_called(this, "_ZN6S819C32v7Ev");}
void  S819C3 ::v8(){vfunc_called(this, "_ZN6S819C32v8Ev");}
void  S819C3 ::v9(){vfunc_called(this, "_ZN6S819C32v9Ev");}
void  S819C3 ::v10(){vfunc_called(this, "_ZN6S819C33v10Ev");}
void  S819C3 ::v11(){vfunc_called(this, "_ZN6S819C33v11Ev");}
void  S819C3 ::v12(){vfunc_called(this, "_ZN6S819C33v12Ev");}
void  S819C3 ::v13(){vfunc_called(this, "_ZN6S819C33v13Ev");}
void  S819C3 ::v14(){vfunc_called(this, "_ZN6S819C33v14Ev");}
void  S819C3 ::v15(){vfunc_called(this, "_ZN6S819C33v15Ev");}
void  S819C3 ::v16(){vfunc_called(this, "_ZN6S819C33v16Ev");}
S819C3 ::S819C3(){ note_ctor("S819C3", this);} // tgen

static void Test_S819C3()
{
  extern Class_Descriptor cd_S819C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S819C3, buf);
    S819C3 *dp, &lv = *(dp=new (buf) S819C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S819C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S819C3)");
    check_base_class_offset(lv, (S817C5_nt*)(S819C4*), 0, "S819C3");
    check_base_class_offset(lv, (S819C4*), 0, "S819C3");
    check_field_offset(lv, s819c3f0, ABISELECT(16,8), "S819C3.s819c3f0");
    test_class_info(&lv, &cd_S819C3);
    dp->~S819C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS819C3(Test_S819C3, "S819C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S819C3C1Ev();
extern void _ZN6S819C3D1Ev();
Name_Map name_map_S819C3[] = {
  NSPAIR(_ZN6S819C3C1Ev),
  NSPAIR(_ZN6S819C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S817C5_nt;
extern VTBL_ENTRY _ZTI9S817C5_nt[];
extern  VTBL_ENTRY _ZTV9S817C5_nt[];
extern Class_Descriptor cd_S819C4;
extern VTBL_ENTRY _ZTI6S819C4[];
extern  VTBL_ENTRY _ZTV6S819C4[];
static Base_Class bases_S819C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S817C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S819C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S819C3[];
extern void _ZN6S819C3D1Ev();
extern void _ZN6S819C3D0Ev();
extern void _ZN6S819C42v5Ev();
extern void _ZN6S819C32v6Ev();
extern void _ZN6S819C32v7Ev();
extern void _ZN6S819C32v8Ev();
extern void _ZN6S819C32v9Ev();
extern void _ZN6S819C33v10Ev();
extern void _ZN6S819C33v11Ev();
extern void _ZN6S819C33v12Ev();
extern void _ZN6S819C33v13Ev();
extern void _ZN6S819C33v14Ev();
extern void _ZN6S819C33v15Ev();
extern void _ZN6S819C33v16Ev();
static  VTBL_ENTRY vtc_S819C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S819C3[0]),
  (VTBL_ENTRY)&_ZN6S819C3D1Ev,
  (VTBL_ENTRY)&_ZN6S819C3D0Ev,
  (VTBL_ENTRY)&_ZN6S819C42v5Ev,
  (VTBL_ENTRY)&_ZN6S819C32v6Ev,
  (VTBL_ENTRY)&_ZN6S819C32v7Ev,
  (VTBL_ENTRY)&_ZN6S819C32v8Ev,
  (VTBL_ENTRY)&_ZN6S819C32v9Ev,
  (VTBL_ENTRY)&_ZN6S819C33v10Ev,
  (VTBL_ENTRY)&_ZN6S819C33v11Ev,
  (VTBL_ENTRY)&_ZN6S819C33v12Ev,
  (VTBL_ENTRY)&_ZN6S819C33v13Ev,
  (VTBL_ENTRY)&_ZN6S819C33v14Ev,
  (VTBL_ENTRY)&_ZN6S819C33v15Ev,
  (VTBL_ENTRY)&_ZN6S819C33v16Ev,
};
extern VTBL_ENTRY _ZTI6S819C3[];
extern  VTBL_ENTRY _ZTV6S819C3[];
Class_Descriptor cd_S819C3 = {  "S819C3", // class name
  bases_S819C3, 2,
  &(vtc_S819C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S819C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S819C3),16, //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  S819C2  : S819C3 {
  virtual  ~S819C2(); // _ZN6S819C2D1Ev
  virtual void  v17(); // _ZN6S819C23v17Ev
  S819C2(); // tgen
};
//SIG(-1 S819C2) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


 S819C2 ::~S819C2(){ note_dtor("S819C2", this);}
void  S819C2 ::v17(){vfunc_called(this, "_ZN6S819C23v17Ev");}
S819C2 ::S819C2(){ note_ctor("S819C2", this);} // tgen

static void Test_S819C2()
{
  extern Class_Descriptor cd_S819C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S819C2, buf);
    S819C2 *dp, &lv = *(dp=new (buf) S819C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S819C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S819C2)");
    check_base_class_offset(lv, (S817C5_nt*)(S819C4*)(S819C3*), 0, "S819C2");
    check_base_class_offset(lv, (S819C4*)(S819C3*), 0, "S819C2");
    check_base_class_offset(lv, (S819C3*), 0, "S819C2");
    test_class_info(&lv, &cd_S819C2);
    dp->~S819C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS819C2(Test_S819C2, "S819C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S819C2C1Ev();
extern void _ZN6S819C2D1Ev();
Name_Map name_map_S819C2[] = {
  NSPAIR(_ZN6S819C2C1Ev),
  NSPAIR(_ZN6S819C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S817C5_nt;
extern VTBL_ENTRY _ZTI9S817C5_nt[];
extern  VTBL_ENTRY _ZTV9S817C5_nt[];
extern Class_Descriptor cd_S819C4;
extern VTBL_ENTRY _ZTI6S819C4[];
extern  VTBL_ENTRY _ZTV6S819C4[];
extern Class_Descriptor cd_S819C3;
extern VTBL_ENTRY _ZTI6S819C3[];
extern  VTBL_ENTRY _ZTV6S819C3[];
static Base_Class bases_S819C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S817C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S819C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S819C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S819C2[];
extern void _ZN6S819C2D1Ev();
extern void _ZN6S819C2D0Ev();
extern void _ZN6S819C42v5Ev();
extern void _ZN6S819C32v6Ev();
extern void _ZN6S819C32v7Ev();
extern void _ZN6S819C32v8Ev();
extern void _ZN6S819C32v9Ev();
extern void _ZN6S819C33v10Ev();
extern void _ZN6S819C33v11Ev();
extern void _ZN6S819C33v12Ev();
extern void _ZN6S819C33v13Ev();
extern void _ZN6S819C33v14Ev();
extern void _ZN6S819C33v15Ev();
extern void _ZN6S819C33v16Ev();
extern void _ZN6S819C23v17Ev();
static  VTBL_ENTRY vtc_S819C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S819C2[0]),
  (VTBL_ENTRY)&_ZN6S819C2D1Ev,
  (VTBL_ENTRY)&_ZN6S819C2D0Ev,
  (VTBL_ENTRY)&_ZN6S819C42v5Ev,
  (VTBL_ENTRY)&_ZN6S819C32v6Ev,
  (VTBL_ENTRY)&_ZN6S819C32v7Ev,
  (VTBL_ENTRY)&_ZN6S819C32v8Ev,
  (VTBL_ENTRY)&_ZN6S819C32v9Ev,
  (VTBL_ENTRY)&_ZN6S819C33v10Ev,
  (VTBL_ENTRY)&_ZN6S819C33v11Ev,
  (VTBL_ENTRY)&_ZN6S819C33v12Ev,
  (VTBL_ENTRY)&_ZN6S819C33v13Ev,
  (VTBL_ENTRY)&_ZN6S819C33v14Ev,
  (VTBL_ENTRY)&_ZN6S819C33v15Ev,
  (VTBL_ENTRY)&_ZN6S819C33v16Ev,
  (VTBL_ENTRY)&_ZN6S819C23v17Ev,
};
extern VTBL_ENTRY _ZTI6S819C2[];
extern  VTBL_ENTRY _ZTV6S819C2[];
Class_Descriptor cd_S819C2 = {  "S819C2", // class name
  bases_S819C2, 3,
  &(vtc_S819C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S819C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S819C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S819C1  : S819C2 {
  short s819c1f0;
  ::S857C15_nt s819c1f1;
  virtual void  v1(); // _ZN6S819C12v1Ev
  virtual void  v2(); // _ZN6S819C12v2Ev
  virtual void  v3(); // _ZN6S819C12v3Ev
  virtual void  v4(); // _ZN6S819C12v4Ev
  ~S819C1(); // tgen
  S819C1(); // tgen
};
//SIG(1 S819C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v5 Fs[2]} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} vd v17} v1 v2 v3 v4 Fs FC6{ Fi[4]}}


void  S819C1 ::v1(){vfunc_called(this, "_ZN6S819C12v1Ev");}
void  S819C1 ::v2(){vfunc_called(this, "_ZN6S819C12v2Ev");}
void  S819C1 ::v3(){vfunc_called(this, "_ZN6S819C12v3Ev");}
void  S819C1 ::v4(){vfunc_called(this, "_ZN6S819C12v4Ev");}
S819C1 ::~S819C1(){ note_dtor("S819C1", this);} // tgen
S819C1 ::S819C1(){ note_ctor("S819C1", this);} // tgen

static void Test_S819C1()
{
  extern Class_Descriptor cd_S819C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S819C1, buf);
    S819C1 *dp, &lv = *(dp=new (buf) S819C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S819C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S819C1)");
    check_base_class_offset(lv, (S817C5_nt*)(S819C4*)(S819C3*)(S819C2*), 0, "S819C1");
    check_base_class_offset(lv, (S819C4*)(S819C3*)(S819C2*), 0, "S819C1");
    check_base_class_offset(lv, (S819C3*)(S819C2*), 0, "S819C1");
    check_base_class_offset(lv, (S819C2*), 0, "S819C1");
    check_field_offset(lv, s819c1f0, ABISELECT(24,12), "S819C1.s819c1f0");
    check_field_offset(lv, s819c1f1, ABISELECT(28,16), "S819C1.s819c1f1");
    test_class_info(&lv, &cd_S819C1);
    dp->~S819C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS819C1(Test_S819C1, "S819C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S819C1C1Ev();
extern void _ZN6S819C1D1Ev();
Name_Map name_map_S819C1[] = {
  NSPAIR(_ZN6S819C1C1Ev),
  NSPAIR(_ZN6S819C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S817C5_nt;
extern VTBL_ENTRY _ZTI9S817C5_nt[];
extern  VTBL_ENTRY _ZTV9S817C5_nt[];
extern Class_Descriptor cd_S819C4;
extern VTBL_ENTRY _ZTI6S819C4[];
extern  VTBL_ENTRY _ZTV6S819C4[];
extern Class_Descriptor cd_S819C3;
extern VTBL_ENTRY _ZTI6S819C3[];
extern  VTBL_ENTRY _ZTV6S819C3[];
extern Class_Descriptor cd_S819C2;
extern VTBL_ENTRY _ZTI6S819C2[];
extern  VTBL_ENTRY _ZTV6S819C2[];
static Base_Class bases_S819C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S817C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S819C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S819C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S819C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S819C1[];
extern void _ZN6S819C1D1Ev();
extern void _ZN6S819C1D0Ev();
extern void _ZN6S819C42v5Ev();
extern void _ZN6S819C32v6Ev();
extern void _ZN6S819C32v7Ev();
extern void _ZN6S819C32v8Ev();
extern void _ZN6S819C32v9Ev();
extern void _ZN6S819C33v10Ev();
extern void _ZN6S819C33v11Ev();
extern void _ZN6S819C33v12Ev();
extern void _ZN6S819C33v13Ev();
extern void _ZN6S819C33v14Ev();
extern void _ZN6S819C33v15Ev();
extern void _ZN6S819C33v16Ev();
extern void _ZN6S819C23v17Ev();
extern void _ZN6S819C12v1Ev();
extern void _ZN6S819C12v2Ev();
extern void _ZN6S819C12v3Ev();
extern void _ZN6S819C12v4Ev();
static  VTBL_ENTRY vtc_S819C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S819C1[0]),
  (VTBL_ENTRY)&_ZN6S819C1D1Ev,
  (VTBL_ENTRY)&_ZN6S819C1D0Ev,
  (VTBL_ENTRY)&_ZN6S819C42v5Ev,
  (VTBL_ENTRY)&_ZN6S819C32v6Ev,
  (VTBL_ENTRY)&_ZN6S819C32v7Ev,
  (VTBL_ENTRY)&_ZN6S819C32v8Ev,
  (VTBL_ENTRY)&_ZN6S819C32v9Ev,
  (VTBL_ENTRY)&_ZN6S819C33v10Ev,
  (VTBL_ENTRY)&_ZN6S819C33v11Ev,
  (VTBL_ENTRY)&_ZN6S819C33v12Ev,
  (VTBL_ENTRY)&_ZN6S819C33v13Ev,
  (VTBL_ENTRY)&_ZN6S819C33v14Ev,
  (VTBL_ENTRY)&_ZN6S819C33v15Ev,
  (VTBL_ENTRY)&_ZN6S819C33v16Ev,
  (VTBL_ENTRY)&_ZN6S819C23v17Ev,
  (VTBL_ENTRY)&_ZN6S819C12v1Ev,
  (VTBL_ENTRY)&_ZN6S819C12v2Ev,
  (VTBL_ENTRY)&_ZN6S819C12v3Ev,
  (VTBL_ENTRY)&_ZN6S819C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S819C1[];
extern  VTBL_ENTRY _ZTV6S819C1[];
Class_Descriptor cd_S819C1 = {  "S819C1", // class name
  bases_S819C1, 4,
  &(vtc_S819C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S819C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S819C1),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20357C2_nt  {
  __tsi64 s20357c2f0[2];
  virtual void  v7(); // _ZN11S20357C2_nt2v7Ev
  virtual void  v8(); // _ZN11S20357C2_nt2v8Ev
  virtual void  v9(); // _ZN11S20357C2_nt2v9Ev
  virtual void  v10(); // _ZN11S20357C2_nt3v10Ev
  virtual void  v11(); // _ZN11S20357C2_nt3v11Ev
  virtual void  v12(); // _ZN11S20357C2_nt3v12Ev
  virtual void  v13(); // _ZN11S20357C2_nt3v13Ev
  virtual void  v14(); // _ZN11S20357C2_nt3v14Ev
  ~S20357C2_nt(); // tgen
  S20357C2_nt(); // tgen
};
//SIG(-1 S20357C2_nt) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FL[2]}


void  S20357C2_nt ::v7(){vfunc_called(this, "_ZN11S20357C2_nt2v7Ev");}
void  S20357C2_nt ::v8(){vfunc_called(this, "_ZN11S20357C2_nt2v8Ev");}
void  S20357C2_nt ::v9(){vfunc_called(this, "_ZN11S20357C2_nt2v9Ev");}
void  S20357C2_nt ::v10(){vfunc_called(this, "_ZN11S20357C2_nt3v10Ev");}
void  S20357C2_nt ::v11(){vfunc_called(this, "_ZN11S20357C2_nt3v11Ev");}
void  S20357C2_nt ::v12(){vfunc_called(this, "_ZN11S20357C2_nt3v12Ev");}
void  S20357C2_nt ::v13(){vfunc_called(this, "_ZN11S20357C2_nt3v13Ev");}
void  S20357C2_nt ::v14(){vfunc_called(this, "_ZN11S20357C2_nt3v14Ev");}
S20357C2_nt ::~S20357C2_nt(){ note_dtor("S20357C2_nt", this);} // tgen
S20357C2_nt ::S20357C2_nt(){ note_ctor("S20357C2_nt", this);} // tgen

//skip512 S20357C2_nt

#else // __cplusplus

extern void _ZN11S20357C2_ntC1Ev();
extern void _ZN11S20357C2_ntD1Ev();
Name_Map name_map_S20357C2_nt[] = {
  NSPAIR(_ZN11S20357C2_ntC1Ev),
  NSPAIR(_ZN11S20357C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20357C2_nt[];
extern void _ZN11S20357C2_nt2v7Ev();
extern void _ZN11S20357C2_nt2v8Ev();
extern void _ZN11S20357C2_nt2v9Ev();
extern void _ZN11S20357C2_nt3v10Ev();
extern void _ZN11S20357C2_nt3v11Ev();
extern void _ZN11S20357C2_nt3v12Ev();
extern void _ZN11S20357C2_nt3v13Ev();
extern void _ZN11S20357C2_nt3v14Ev();
static  VTBL_ENTRY vtc_S20357C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20357C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S20357C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S20357C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S20357C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S20357C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20357C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20357C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S20357C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S20357C2_nt3v14Ev,
};
extern VTBL_ENTRY _ZTI11S20357C2_nt[];
VTBL_ENTRY *P__ZTI11S20357C2_nt = _ZTI11S20357C2_nt; 
extern  VTBL_ENTRY _ZTV11S20357C2_nt[];
Class_Descriptor cd_S20357C2_nt = {  "S20357C2_nt", // class name
  0,0,//no base classes
  &(vtc_S20357C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI11S20357C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20357C2_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  S20357C3_nt  {
  virtual  ~S20357C3_nt(); // _ZN11S20357C3_ntD1Ev
  virtual void  v15(); // _ZN11S20357C3_nt3v15Ev
  virtual void  v16(); // _ZN11S20357C3_nt3v16Ev
  virtual void  v17(); // _ZN11S20357C3_nt3v17Ev
  virtual void  v18(); // _ZN11S20357C3_nt3v18Ev
  virtual void  v19(); // _ZN11S20357C3_nt3v19Ev
  virtual void  v20(); // _ZN11S20357C3_nt3v20Ev
  virtual void  v21(); // _ZN11S20357C3_nt3v21Ev
  virtual void  v22(); // _ZN11S20357C3_nt3v22Ev
  virtual void  v23(); // _ZN11S20357C3_nt3v23Ev
  virtual void  v24(); // _ZN11S20357C3_nt3v24Ev
  S20357C3_nt(); // tgen
};
//SIG(-1 S20357C3_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S20357C3_nt ::~S20357C3_nt(){ note_dtor("S20357C3_nt", this);}
void  S20357C3_nt ::v15(){vfunc_called(this, "_ZN11S20357C3_nt3v15Ev");}
void  S20357C3_nt ::v16(){vfunc_called(this, "_ZN11S20357C3_nt3v16Ev");}
void  S20357C3_nt ::v17(){vfunc_called(this, "_ZN11S20357C3_nt3v17Ev");}
void  S20357C3_nt ::v18(){vfunc_called(this, "_ZN11S20357C3_nt3v18Ev");}
void  S20357C3_nt ::v19(){vfunc_called(this, "_ZN11S20357C3_nt3v19Ev");}
void  S20357C3_nt ::v20(){vfunc_called(this, "_ZN11S20357C3_nt3v20Ev");}
void  S20357C3_nt ::v21(){vfunc_called(this, "_ZN11S20357C3_nt3v21Ev");}
void  S20357C3_nt ::v22(){vfunc_called(this, "_ZN11S20357C3_nt3v22Ev");}
void  S20357C3_nt ::v23(){vfunc_called(this, "_ZN11S20357C3_nt3v23Ev");}
void  S20357C3_nt ::v24(){vfunc_called(this, "_ZN11S20357C3_nt3v24Ev");}
S20357C3_nt ::S20357C3_nt(){ note_ctor("S20357C3_nt", this);} // tgen

//skip512 S20357C3_nt

#else // __cplusplus

extern void _ZN11S20357C3_ntC1Ev();
extern void _ZN11S20357C3_ntD1Ev();
Name_Map name_map_S20357C3_nt[] = {
  NSPAIR(_ZN11S20357C3_ntC1Ev),
  NSPAIR(_ZN11S20357C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20357C3_nt[];
extern void _ZN11S20357C3_ntD1Ev();
extern void _ZN11S20357C3_ntD0Ev();
extern void _ZN11S20357C3_nt3v15Ev();
extern void _ZN11S20357C3_nt3v16Ev();
extern void _ZN11S20357C3_nt3v17Ev();
extern void _ZN11S20357C3_nt3v18Ev();
extern void _ZN11S20357C3_nt3v19Ev();
extern void _ZN11S20357C3_nt3v20Ev();
extern void _ZN11S20357C3_nt3v21Ev();
extern void _ZN11S20357C3_nt3v22Ev();
extern void _ZN11S20357C3_nt3v23Ev();
extern void _ZN11S20357C3_nt3v24Ev();
static  VTBL_ENTRY vtc_S20357C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20357C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20357C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v24Ev,
};
extern VTBL_ENTRY _ZTI11S20357C3_nt[];
VTBL_ENTRY *P__ZTI11S20357C3_nt = _ZTI11S20357C3_nt; 
extern  VTBL_ENTRY _ZTV11S20357C3_nt[];
Class_Descriptor cd_S20357C3_nt = {  "S20357C3_nt", // class name
  0,0,//no base classes
  &(vtc_S20357C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20357C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20357C3_nt),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20357C1  : virtual S20357C2_nt , virtual S20357C3_nt {
  void *s20357c1f0;
  virtual void  v1(); // _ZN8S20357C12v1Ev
  virtual void  v2(); // _ZN8S20357C12v2Ev
  virtual void  v3(); // _ZN8S20357C12v3Ev
  virtual void  v4(); // _ZN8S20357C12v4Ev
  virtual void  v5(); // _ZN8S20357C12v5Ev
  virtual void  v6(); // _ZN8S20357C12v6Ev
  ~S20357C1(); // tgen
  S20357C1(); // tgen
};
//SIG(1 S20357C1) C1{ VBC2{ v7 v8 v9 v10 v11 v12 v13 v14 FL[2]} VBC3{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24} v1 v2 v3 v4 v5 v6 Fp}


void  S20357C1 ::v1(){vfunc_called(this, "_ZN8S20357C12v1Ev");}
void  S20357C1 ::v2(){vfunc_called(this, "_ZN8S20357C12v2Ev");}
void  S20357C1 ::v3(){vfunc_called(this, "_ZN8S20357C12v3Ev");}
void  S20357C1 ::v4(){vfunc_called(this, "_ZN8S20357C12v4Ev");}
void  S20357C1 ::v5(){vfunc_called(this, "_ZN8S20357C12v5Ev");}
void  S20357C1 ::v6(){vfunc_called(this, "_ZN8S20357C12v6Ev");}
S20357C1 ::~S20357C1(){ note_dtor("S20357C1", this);} // tgen
S20357C1 ::S20357C1(){ note_ctor("S20357C1", this);} // tgen

static void Test_S20357C1()
{
  extern Class_Descriptor cd_S20357C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S20357C1, buf);
    S20357C1 *dp, &lv = *(dp=new (buf) S20357C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S20357C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20357C1)");
    check_base_class_offset(lv, (S20357C2_nt*), ABISELECT(16,8), "S20357C1");
    check_base_class_offset(lv, (S20357C3_nt*), 0, "S20357C1");
    check_field_offset(lv, s20357c1f0, ABISELECT(8,4), "S20357C1.s20357c1f0");
    test_class_info(&lv, &cd_S20357C1);
    dp->~S20357C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20357C1(Test_S20357C1, "S20357C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN8S20357C1C1Ev();
extern void _ZN8S20357C1D1Ev();
Name_Map name_map_S20357C1[] = {
  NSPAIR(_ZN8S20357C1C1Ev),
  NSPAIR(_ZN8S20357C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20357C2_nt;
extern VTBL_ENTRY _ZTI11S20357C2_nt[];
extern  VTBL_ENTRY _ZTV11S20357C2_nt[];
extern Class_Descriptor cd_S20357C3_nt;
extern VTBL_ENTRY _ZTI11S20357C3_nt[];
extern  VTBL_ENTRY _ZTV11S20357C3_nt[];
static Base_Class bases_S20357C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20357C2_nt,    ABISELECT(16,8), //bcp->offset
    33, //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_S20357C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //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 _ZTI8S20357C1[];
extern void _ZN8S20357C1D1Ev();
extern void _ZN8S20357C1D0Ev();
extern void _ZN11S20357C3_nt3v15Ev();
extern void _ZN11S20357C3_nt3v16Ev();
extern void _ZN11S20357C3_nt3v17Ev();
extern void _ZN11S20357C3_nt3v18Ev();
extern void _ZN11S20357C3_nt3v19Ev();
extern void _ZN11S20357C3_nt3v20Ev();
extern void _ZN11S20357C3_nt3v21Ev();
extern void _ZN11S20357C3_nt3v22Ev();
extern void _ZN11S20357C3_nt3v23Ev();
extern void _ZN11S20357C3_nt3v24Ev();
extern void _ZN8S20357C12v1Ev();
extern void _ZN8S20357C12v2Ev();
extern void _ZN8S20357C12v3Ev();
extern void _ZN8S20357C12v4Ev();
extern void _ZN8S20357C12v5Ev();
extern void _ZN8S20357C12v6Ev();
extern void _ZN11S20357C2_nt2v7Ev();
extern void _ZN11S20357C2_nt2v8Ev();
extern void _ZN11S20357C2_nt2v9Ev();
extern void _ZN11S20357C2_nt3v10Ev();
extern void _ZN11S20357C2_nt3v11Ev();
extern void _ZN11S20357C2_nt3v12Ev();
extern void _ZN11S20357C2_nt3v13Ev();
extern void _ZN11S20357C2_nt3v14Ev();
static  VTBL_ENTRY vtc_S20357C1[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20357C1[0]),
  (VTBL_ENTRY)&_ZN8S20357C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20357C1D0Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S20357C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN8S20357C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20357C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20357C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20357C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20357C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20357C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20357C1[0]),
  (VTBL_ENTRY)&_ZN11S20357C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S20357C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S20357C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S20357C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20357C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20357C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S20357C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S20357C2_nt3v14Ev,
};
extern VTBL_ENTRY _ZTV8S20357C1[];
static  VTT_ENTRY vtt_S20357C1[] = {
  {&(_ZTV8S20357C1[15]),  15,51},
  {&(_ZTV8S20357C1[43]),  43,51},
  {&(_ZTV8S20357C1[15]),  15,51},
};
extern VTBL_ENTRY _ZTI8S20357C1[];
extern  VTBL_ENTRY _ZTV8S20357C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20357C1[];
Class_Descriptor cd_S20357C1 = {  "S20357C1", // class name
  bases_S20357C1, 2,
  &(vtc_S20357C1[0]), // expected_vtbl_contents
  &(vtt_S20357C1[0]), // expected_vtt_contents
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI8S20357C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20357C1),51, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20357C1),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5080C3  {
  ::S16130C9_nt s5080c3f0;
  int s5080c3f1[2];
  char s5080c3f2;
  virtual  ~S5080C3(); // _ZN7S5080C3D1Ev
  virtual void  v4(); // _ZN7S5080C32v4Ev
  virtual void  v5(); // _ZN7S5080C32v5Ev
  virtual void  v6(); // _ZN7S5080C32v6Ev
  S5080C3(); // tgen
};
//SIG(-1 S5080C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5080C3 ::~S5080C3(){ note_dtor("S5080C3", this);}
void  S5080C3 ::v4(){vfunc_called(this, "_ZN7S5080C32v4Ev");}
void  S5080C3 ::v5(){vfunc_called(this, "_ZN7S5080C32v5Ev");}
void  S5080C3 ::v6(){vfunc_called(this, "_ZN7S5080C32v6Ev");}
S5080C3 ::S5080C3(){ note_ctor("S5080C3", this);} // tgen

static void Test_S5080C3()
{
  extern Class_Descriptor cd_S5080C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5080C3, buf);
    S5080C3 *dp, &lv = *(dp=new (buf) S5080C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5080C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5080C3)");
    check_field_offset(lv, s5080c3f0, ABISELECT(8,4), "S5080C3.s5080c3f0");
    check_field_offset(lv, s5080c3f1, ABISELECT(24,16), "S5080C3.s5080c3f1");
    check_field_offset(lv, s5080c3f2, ABISELECT(32,24), "S5080C3.s5080c3f2");
    test_class_info(&lv, &cd_S5080C3);
    dp->~S5080C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5080C3(Test_S5080C3, "S5080C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5080C3C1Ev();
extern void _ZN7S5080C3D1Ev();
Name_Map name_map_S5080C3[] = {
  NSPAIR(_ZN7S5080C3C1Ev),
  NSPAIR(_ZN7S5080C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5080C3[];
extern void _ZN7S5080C3D1Ev();
extern void _ZN7S5080C3D0Ev();
extern void _ZN7S5080C32v4Ev();
extern void _ZN7S5080C32v5Ev();
extern void _ZN7S5080C32v6Ev();
static  VTBL_ENTRY vtc_S5080C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5080C3[0]),
  (VTBL_ENTRY)&_ZN7S5080C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5080C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5080C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5080C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5080C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5080C3[];
extern  VTBL_ENTRY _ZTV7S5080C3[];
Class_Descriptor cd_S5080C3 = {  "S5080C3", // class name
  0,0,//no base classes
  &(vtc_S5080C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5080C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5080C3),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  S5080C2  : S5080C3 {
  void *s5080c2f0;
  virtual void  v7(); // _ZN7S5080C22v7Ev
  virtual void  v8(); // _ZN7S5080C22v8Ev
  ~S5080C2(); // tgen
  S5080C2(); // tgen
};
//SIG(-1 S5080C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5080C2 ::v7(){vfunc_called(this, "_ZN7S5080C22v7Ev");}
void  S5080C2 ::v8(){vfunc_called(this, "_ZN7S5080C22v8Ev");}
S5080C2 ::~S5080C2(){ note_dtor("S5080C2", this);} // tgen
S5080C2 ::S5080C2(){ note_ctor("S5080C2", this);} // tgen

static void Test_S5080C2()
{
  extern Class_Descriptor cd_S5080C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5080C2, buf);
    S5080C2 *dp, &lv = *(dp=new (buf) S5080C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5080C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5080C2)");
    check_base_class_offset(lv, (S5080C3*), 0, "S5080C2");
    check_field_offset(lv, s5080c2f0, ABISELECT(40,28), "S5080C2.s5080c2f0");
    test_class_info(&lv, &cd_S5080C2);
    dp->~S5080C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5080C2(Test_S5080C2, "S5080C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5080C2C1Ev();
extern void _ZN7S5080C2D1Ev();
Name_Map name_map_S5080C2[] = {
  NSPAIR(_ZN7S5080C2C1Ev),
  NSPAIR(_ZN7S5080C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5080C3;
extern VTBL_ENTRY _ZTI7S5080C3[];
extern  VTBL_ENTRY _ZTV7S5080C3[];
static Base_Class bases_S5080C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5080C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5080C2[];
extern void _ZN7S5080C2D1Ev();
extern void _ZN7S5080C2D0Ev();
extern void _ZN7S5080C32v4Ev();
extern void _ZN7S5080C32v5Ev();
extern void _ZN7S5080C32v6Ev();
extern void _ZN7S5080C22v7Ev();
extern void _ZN7S5080C22v8Ev();
static  VTBL_ENTRY vtc_S5080C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5080C2[0]),
  (VTBL_ENTRY)&_ZN7S5080C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5080C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5080C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5080C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5080C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5080C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5080C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5080C2[];
extern  VTBL_ENTRY _ZTV7S5080C2[];
Class_Descriptor cd_S5080C2 = {  "S5080C2", // class name
  bases_S5080C2, 1,
  &(vtc_S5080C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5080C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5080C2),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  S5080C1  : S5080C2 {
  ::S857C9_nt s5080c1f0;
  ::S857C14_nt s5080c1f1;
  virtual  ~S5080C1(); // _ZN7S5080C1D1Ev
  virtual void  v1(); // _ZN7S5080C12v1Ev
  virtual void  v2(); // _ZN7S5080C12v2Ev
  virtual void  v3(); // _ZN7S5080C12v3Ev
  S5080C1(); // tgen
};
//SIG(1 S5080C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 FC6{ m FC7{ FL[4]}} FC8{ m Fp FC9{ Fi[4]}}}


 S5080C1 ::~S5080C1(){ note_dtor("S5080C1", this);}
void  S5080C1 ::v1(){vfunc_called(this, "_ZN7S5080C12v1Ev");}
void  S5080C1 ::v2(){vfunc_called(this, "_ZN7S5080C12v2Ev");}
void  S5080C1 ::v3(){vfunc_called(this, "_ZN7S5080C12v3Ev");}
S5080C1 ::S5080C1(){ note_ctor("S5080C1", this);} // tgen

static void Test_S5080C1()
{
  extern Class_Descriptor cd_S5080C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,22)];
    init_test(&cd_S5080C1, buf);
    S5080C1 *dp, &lv = *(dp=new (buf) S5080C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,84), "sizeof(S5080C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5080C1)");
    check_base_class_offset(lv, (S5080C3*)(S5080C2*), 0, "S5080C1");
    check_base_class_offset(lv, (S5080C2*), 0, "S5080C1");
    check_field_offset(lv, s5080c1f0, ABISELECT(48,32), "S5080C1.s5080c1f0");
    check_field_offset(lv, s5080c1f1, ABISELECT(80,64), "S5080C1.s5080c1f1");
    test_class_info(&lv, &cd_S5080C1);
    dp->~S5080C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5080C1(Test_S5080C1, "S5080C1", ABISELECT(104,84));

#else // __cplusplus

extern void _ZN7S5080C1C1Ev();
extern void _ZN7S5080C1D1Ev();
Name_Map name_map_S5080C1[] = {
  NSPAIR(_ZN7S5080C1C1Ev),
  NSPAIR(_ZN7S5080C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5080C3;
extern VTBL_ENTRY _ZTI7S5080C3[];
extern  VTBL_ENTRY _ZTV7S5080C3[];
extern Class_Descriptor cd_S5080C2;
extern VTBL_ENTRY _ZTI7S5080C2[];
extern  VTBL_ENTRY _ZTV7S5080C2[];
static Base_Class bases_S5080C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5080C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5080C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5080C1[];
extern void _ZN7S5080C1D1Ev();
extern void _ZN7S5080C1D0Ev();
extern void _ZN7S5080C32v4Ev();
extern void _ZN7S5080C32v5Ev();
extern void _ZN7S5080C32v6Ev();
extern void _ZN7S5080C22v7Ev();
extern void _ZN7S5080C22v8Ev();
extern void _ZN7S5080C12v1Ev();
extern void _ZN7S5080C12v2Ev();
extern void _ZN7S5080C12v3Ev();
static  VTBL_ENTRY vtc_S5080C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5080C1[0]),
  (VTBL_ENTRY)&_ZN7S5080C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5080C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5080C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5080C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5080C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5080C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5080C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5080C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5080C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5080C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5080C1[];
extern  VTBL_ENTRY _ZTV7S5080C1[];
Class_Descriptor cd_S5080C1 = {  "S5080C1", // class name
  bases_S5080C1, 2,
  &(vtc_S5080C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,84), // object size
  NSPAIRA(_ZTI7S5080C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5080C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5079C3  {
  ::S16130C9_nt s5079c3f0;
  int s5079c3f1[2];
  char s5079c3f2;
  virtual  ~S5079C3(); // _ZN7S5079C3D1Ev
  virtual void  v4(); // _ZN7S5079C32v4Ev
  virtual void  v5(); // _ZN7S5079C32v5Ev
  virtual void  v6(); // _ZN7S5079C32v6Ev
  S5079C3(); // tgen
};
//SIG(-1 S5079C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5079C3 ::~S5079C3(){ note_dtor("S5079C3", this);}
void  S5079C3 ::v4(){vfunc_called(this, "_ZN7S5079C32v4Ev");}
void  S5079C3 ::v5(){vfunc_called(this, "_ZN7S5079C32v5Ev");}
void  S5079C3 ::v6(){vfunc_called(this, "_ZN7S5079C32v6Ev");}
S5079C3 ::S5079C3(){ note_ctor("S5079C3", this);} // tgen

static void Test_S5079C3()
{
  extern Class_Descriptor cd_S5079C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5079C3, buf);
    S5079C3 *dp, &lv = *(dp=new (buf) S5079C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5079C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5079C3)");
    check_field_offset(lv, s5079c3f0, ABISELECT(8,4), "S5079C3.s5079c3f0");
    check_field_offset(lv, s5079c3f1, ABISELECT(24,16), "S5079C3.s5079c3f1");
    check_field_offset(lv, s5079c3f2, ABISELECT(32,24), "S5079C3.s5079c3f2");
    test_class_info(&lv, &cd_S5079C3);
    dp->~S5079C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5079C3(Test_S5079C3, "S5079C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5079C3C1Ev();
extern void _ZN7S5079C3D1Ev();
Name_Map name_map_S5079C3[] = {
  NSPAIR(_ZN7S5079C3C1Ev),
  NSPAIR(_ZN7S5079C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5079C3[];
extern void _ZN7S5079C3D1Ev();
extern void _ZN7S5079C3D0Ev();
extern void _ZN7S5079C32v4Ev();
extern void _ZN7S5079C32v5Ev();
extern void _ZN7S5079C32v6Ev();
static  VTBL_ENTRY vtc_S5079C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5079C3[0]),
  (VTBL_ENTRY)&_ZN7S5079C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5079C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5079C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5079C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5079C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5079C3[];
extern  VTBL_ENTRY _ZTV7S5079C3[];
Class_Descriptor cd_S5079C3 = {  "S5079C3", // class name
  0,0,//no base classes
  &(vtc_S5079C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5079C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5079C3),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  S5079C2  : S5079C3 {
  void *s5079c2f0;
  virtual void  v7(); // _ZN7S5079C22v7Ev
  virtual void  v8(); // _ZN7S5079C22v8Ev
  ~S5079C2(); // tgen
  S5079C2(); // tgen
};
//SIG(-1 S5079C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5079C2 ::v7(){vfunc_called(this, "_ZN7S5079C22v7Ev");}
void  S5079C2 ::v8(){vfunc_called(this, "_ZN7S5079C22v8Ev");}
S5079C2 ::~S5079C2(){ note_dtor("S5079C2", this);} // tgen
S5079C2 ::S5079C2(){ note_ctor("S5079C2", this);} // tgen

static void Test_S5079C2()
{
  extern Class_Descriptor cd_S5079C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5079C2, buf);
    S5079C2 *dp, &lv = *(dp=new (buf) S5079C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5079C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5079C2)");
    check_base_class_offset(lv, (S5079C3*), 0, "S5079C2");
    check_field_offset(lv, s5079c2f0, ABISELECT(40,28), "S5079C2.s5079c2f0");
    test_class_info(&lv, &cd_S5079C2);
    dp->~S5079C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5079C2(Test_S5079C2, "S5079C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5079C2C1Ev();
extern void _ZN7S5079C2D1Ev();
Name_Map name_map_S5079C2[] = {
  NSPAIR(_ZN7S5079C2C1Ev),
  NSPAIR(_ZN7S5079C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5079C3;
extern VTBL_ENTRY _ZTI7S5079C3[];
extern  VTBL_ENTRY _ZTV7S5079C3[];
static Base_Class bases_S5079C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5079C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5079C2[];
extern void _ZN7S5079C2D1Ev();
extern void _ZN7S5079C2D0Ev();
extern void _ZN7S5079C32v4Ev();
extern void _ZN7S5079C32v5Ev();
extern void _ZN7S5079C32v6Ev();
extern void _ZN7S5079C22v7Ev();
extern void _ZN7S5079C22v8Ev();
static  VTBL_ENTRY vtc_S5079C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5079C2[0]),
  (VTBL_ENTRY)&_ZN7S5079C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5079C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5079C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5079C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5079C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5079C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5079C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5079C2[];
extern  VTBL_ENTRY _ZTV7S5079C2[];
Class_Descriptor cd_S5079C2 = {  "S5079C2", // class name
  bases_S5079C2, 1,
  &(vtc_S5079C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5079C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5079C2),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  S5079C1  : S5079C2 {
  ::S856C9_nt s5079c1f0;
  ::S857C14_nt s5079c1f1;
  virtual  ~S5079C1(); // _ZN7S5079C1D1Ev
  virtual void  v1(); // _ZN7S5079C12v1Ev
  virtual void  v2(); // _ZN7S5079C12v2Ev
  virtual void  v3(); // _ZN7S5079C12v3Ev
  S5079C1(); // tgen
};
//SIG(1 S5079C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 FC6{ m FC7{ Fl[4]}} FC8{ m Fp FC9{ Fi[4]}}}


 S5079C1 ::~S5079C1(){ note_dtor("S5079C1", this);}
void  S5079C1 ::v1(){vfunc_called(this, "_ZN7S5079C12v1Ev");}
void  S5079C1 ::v2(){vfunc_called(this, "_ZN7S5079C12v2Ev");}
void  S5079C1 ::v3(){vfunc_called(this, "_ZN7S5079C12v3Ev");}
S5079C1 ::S5079C1(){ note_ctor("S5079C1", this);} // tgen

static void Test_S5079C1()
{
  extern Class_Descriptor cd_S5079C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S5079C1, buf);
    S5079C1 *dp, &lv = *(dp=new (buf) S5079C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S5079C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5079C1)");
    check_base_class_offset(lv, (S5079C3*)(S5079C2*), 0, "S5079C1");
    check_base_class_offset(lv, (S5079C2*), 0, "S5079C1");
    check_field_offset(lv, s5079c1f0, ABISELECT(48,32), "S5079C1.s5079c1f0");
    check_field_offset(lv, s5079c1f1, ABISELECT(80,48), "S5079C1.s5079c1f1");
    test_class_info(&lv, &cd_S5079C1);
    dp->~S5079C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5079C1(Test_S5079C1, "S5079C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S5079C1C1Ev();
extern void _ZN7S5079C1D1Ev();
Name_Map name_map_S5079C1[] = {
  NSPAIR(_ZN7S5079C1C1Ev),
  NSPAIR(_ZN7S5079C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5079C3;
extern VTBL_ENTRY _ZTI7S5079C3[];
extern  VTBL_ENTRY _ZTV7S5079C3[];
extern Class_Descriptor cd_S5079C2;
extern VTBL_ENTRY _ZTI7S5079C2[];
extern  VTBL_ENTRY _ZTV7S5079C2[];
static Base_Class bases_S5079C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5079C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5079C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5079C1[];
extern void _ZN7S5079C1D1Ev();
extern void _ZN7S5079C1D0Ev();
extern void _ZN7S5079C32v4Ev();
extern void _ZN7S5079C32v5Ev();
extern void _ZN7S5079C32v6Ev();
extern void _ZN7S5079C22v7Ev();
extern void _ZN7S5079C22v8Ev();
extern void _ZN7S5079C12v1Ev();
extern void _ZN7S5079C12v2Ev();
extern void _ZN7S5079C12v3Ev();
static  VTBL_ENTRY vtc_S5079C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5079C1[0]),
  (VTBL_ENTRY)&_ZN7S5079C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5079C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5079C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5079C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5079C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5079C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5079C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5079C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5079C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5079C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5079C1[];
extern  VTBL_ENTRY _ZTV7S5079C1[];
Class_Descriptor cd_S5079C1 = {  "S5079C1", // class name
  bases_S5079C1, 2,
  &(vtc_S5079C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S5079C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5079C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4766C3  {
  ::S16130C9_nt s4766c3f0;
  int s4766c3f1[2];
  char s4766c3f2;
  virtual  ~S4766C3(); // _ZN7S4766C3D1Ev
  virtual void  v3(); // _ZN7S4766C32v3Ev
  virtual void  v4(); // _ZN7S4766C32v4Ev
  virtual void  v5(); // _ZN7S4766C32v5Ev
  S4766C3(); // tgen
};
//SIG(-1 S4766C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4766C3 ::~S4766C3(){ note_dtor("S4766C3", this);}
void  S4766C3 ::v3(){vfunc_called(this, "_ZN7S4766C32v3Ev");}
void  S4766C3 ::v4(){vfunc_called(this, "_ZN7S4766C32v4Ev");}
void  S4766C3 ::v5(){vfunc_called(this, "_ZN7S4766C32v5Ev");}
S4766C3 ::S4766C3(){ note_ctor("S4766C3", this);} // tgen

static void Test_S4766C3()
{
  extern Class_Descriptor cd_S4766C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4766C3, buf);
    S4766C3 *dp, &lv = *(dp=new (buf) S4766C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4766C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4766C3)");
    check_field_offset(lv, s4766c3f0, ABISELECT(8,4), "S4766C3.s4766c3f0");
    check_field_offset(lv, s4766c3f1, ABISELECT(24,16), "S4766C3.s4766c3f1");
    check_field_offset(lv, s4766c3f2, ABISELECT(32,24), "S4766C3.s4766c3f2");
    test_class_info(&lv, &cd_S4766C3);
    dp->~S4766C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4766C3(Test_S4766C3, "S4766C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4766C3C1Ev();
extern void _ZN7S4766C3D1Ev();
Name_Map name_map_S4766C3[] = {
  NSPAIR(_ZN7S4766C3C1Ev),
  NSPAIR(_ZN7S4766C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4766C3[];
extern void _ZN7S4766C3D1Ev();
extern void _ZN7S4766C3D0Ev();
extern void _ZN7S4766C32v3Ev();
extern void _ZN7S4766C32v4Ev();
extern void _ZN7S4766C32v5Ev();
static  VTBL_ENTRY vtc_S4766C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4766C3[0]),
  (VTBL_ENTRY)&_ZN7S4766C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4766C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4766C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4766C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4766C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4766C3[];
extern  VTBL_ENTRY _ZTV7S4766C3[];
Class_Descriptor cd_S4766C3 = {  "S4766C3", // class name
  0,0,//no base classes
  &(vtc_S4766C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4766C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4766C3),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  S4766C2  : S4766C3 {
  void *s4766c2f0;
  virtual void  v6(); // _ZN7S4766C22v6Ev
  virtual void  v7(); // _ZN7S4766C22v7Ev
  ~S4766C2(); // tgen
  S4766C2(); // tgen
};
//SIG(-1 S4766C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4766C2 ::v6(){vfunc_called(this, "_ZN7S4766C22v6Ev");}
void  S4766C2 ::v7(){vfunc_called(this, "_ZN7S4766C22v7Ev");}
S4766C2 ::~S4766C2(){ note_dtor("S4766C2", this);} // tgen
S4766C2 ::S4766C2(){ note_ctor("S4766C2", this);} // tgen

static void Test_S4766C2()
{
  extern Class_Descriptor cd_S4766C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4766C2, buf);
    S4766C2 *dp, &lv = *(dp=new (buf) S4766C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4766C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4766C2)");
    check_base_class_offset(lv, (S4766C3*), 0, "S4766C2");
    check_field_offset(lv, s4766c2f0, ABISELECT(40,28), "S4766C2.s4766c2f0");
    test_class_info(&lv, &cd_S4766C2);
    dp->~S4766C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4766C2(Test_S4766C2, "S4766C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4766C2C1Ev();
extern void _ZN7S4766C2D1Ev();
Name_Map name_map_S4766C2[] = {
  NSPAIR(_ZN7S4766C2C1Ev),
  NSPAIR(_ZN7S4766C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4766C3;
extern VTBL_ENTRY _ZTI7S4766C3[];
extern  VTBL_ENTRY _ZTV7S4766C3[];
static Base_Class bases_S4766C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4766C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4766C2[];
extern void _ZN7S4766C2D1Ev();
extern void _ZN7S4766C2D0Ev();
extern void _ZN7S4766C32v3Ev();
extern void _ZN7S4766C32v4Ev();
extern void _ZN7S4766C32v5Ev();
extern void _ZN7S4766C22v6Ev();
extern void _ZN7S4766C22v7Ev();
static  VTBL_ENTRY vtc_S4766C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4766C2[0]),
  (VTBL_ENTRY)&_ZN7S4766C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4766C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4766C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4766C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4766C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4766C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4766C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4766C2[];
extern  VTBL_ENTRY _ZTV7S4766C2[];
Class_Descriptor cd_S4766C2 = {  "S4766C2", // class name
  bases_S4766C2, 1,
  &(vtc_S4766C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4766C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4766C2),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  S4766C1  : S4766C2 {
  ::S857C9_nt s4766c1f0;
  ::S857C14_nt s4766c1f1;
  virtual  ~S4766C1(); // _ZN7S4766C1D1Ev
  virtual void  v1(); // _ZN7S4766C12v1Ev
  virtual void  v2(); // _ZN7S4766C12v2Ev
  S4766C1(); // tgen
};
//SIG(1 S4766C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m FC7{ FL[4]}} FC8{ m Fp FC9{ Fi[4]}}}


 S4766C1 ::~S4766C1(){ note_dtor("S4766C1", this);}
void  S4766C1 ::v1(){vfunc_called(this, "_ZN7S4766C12v1Ev");}
void  S4766C1 ::v2(){vfunc_called(this, "_ZN7S4766C12v2Ev");}
S4766C1 ::S4766C1(){ note_ctor("S4766C1", this);} // tgen

static void Test_S4766C1()
{
  extern Class_Descriptor cd_S4766C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,22)];
    init_test(&cd_S4766C1, buf);
    S4766C1 *dp, &lv = *(dp=new (buf) S4766C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,84), "sizeof(S4766C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4766C1)");
    check_base_class_offset(lv, (S4766C3*)(S4766C2*), 0, "S4766C1");
    check_base_class_offset(lv, (S4766C2*), 0, "S4766C1");
    check_field_offset(lv, s4766c1f0, ABISELECT(48,32), "S4766C1.s4766c1f0");
    check_field_offset(lv, s4766c1f1, ABISELECT(80,64), "S4766C1.s4766c1f1");
    test_class_info(&lv, &cd_S4766C1);
    dp->~S4766C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4766C1(Test_S4766C1, "S4766C1", ABISELECT(104,84));

#else // __cplusplus

extern void _ZN7S4766C1C1Ev();
extern void _ZN7S4766C1D1Ev();
Name_Map name_map_S4766C1[] = {
  NSPAIR(_ZN7S4766C1C1Ev),
  NSPAIR(_ZN7S4766C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4766C3;
extern VTBL_ENTRY _ZTI7S4766C3[];
extern  VTBL_ENTRY _ZTV7S4766C3[];
extern Class_Descriptor cd_S4766C2;
extern VTBL_ENTRY _ZTI7S4766C2[];
extern  VTBL_ENTRY _ZTV7S4766C2[];
static Base_Class bases_S4766C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4766C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4766C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4766C1[];
extern void _ZN7S4766C1D1Ev();
extern void _ZN7S4766C1D0Ev();
extern void _ZN7S4766C32v3Ev();
extern void _ZN7S4766C32v4Ev();
extern void _ZN7S4766C32v5Ev();
extern void _ZN7S4766C22v6Ev();
extern void _ZN7S4766C22v7Ev();
extern void _ZN7S4766C12v1Ev();
extern void _ZN7S4766C12v2Ev();
static  VTBL_ENTRY vtc_S4766C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4766C1[0]),
  (VTBL_ENTRY)&_ZN7S4766C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4766C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4766C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4766C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4766C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4766C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4766C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4766C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4766C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4766C1[];
extern  VTBL_ENTRY _ZTV7S4766C1[];
Class_Descriptor cd_S4766C1 = {  "S4766C1", // class name
  bases_S4766C1, 2,
  &(vtc_S4766C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,84), // object size
  NSPAIRA(_ZTI7S4766C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4766C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4765C3  {
  ::S16130C9_nt s4765c3f0;
  int s4765c3f1[2];
  char s4765c3f2;
  virtual  ~S4765C3(); // _ZN7S4765C3D1Ev
  virtual void  v3(); // _ZN7S4765C32v3Ev
  virtual void  v4(); // _ZN7S4765C32v4Ev
  virtual void  v5(); // _ZN7S4765C32v5Ev
  S4765C3(); // tgen
};
//SIG(-1 S4765C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4765C3 ::~S4765C3(){ note_dtor("S4765C3", this);}
void  S4765C3 ::v3(){vfunc_called(this, "_ZN7S4765C32v3Ev");}
void  S4765C3 ::v4(){vfunc_called(this, "_ZN7S4765C32v4Ev");}
void  S4765C3 ::v5(){vfunc_called(this, "_ZN7S4765C32v5Ev");}
S4765C3 ::S4765C3(){ note_ctor("S4765C3", this);} // tgen

static void Test_S4765C3()
{
  extern Class_Descriptor cd_S4765C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4765C3, buf);
    S4765C3 *dp, &lv = *(dp=new (buf) S4765C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4765C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4765C3)");
    check_field_offset(lv, s4765c3f0, ABISELECT(8,4), "S4765C3.s4765c3f0");
    check_field_offset(lv, s4765c3f1, ABISELECT(24,16), "S4765C3.s4765c3f1");
    check_field_offset(lv, s4765c3f2, ABISELECT(32,24), "S4765C3.s4765c3f2");
    test_class_info(&lv, &cd_S4765C3);
    dp->~S4765C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4765C3(Test_S4765C3, "S4765C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4765C3C1Ev();
extern void _ZN7S4765C3D1Ev();
Name_Map name_map_S4765C3[] = {
  NSPAIR(_ZN7S4765C3C1Ev),
  NSPAIR(_ZN7S4765C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4765C3[];
extern void _ZN7S4765C3D1Ev();
extern void _ZN7S4765C3D0Ev();
extern void _ZN7S4765C32v3Ev();
extern void _ZN7S4765C32v4Ev();
extern void _ZN7S4765C32v5Ev();
static  VTBL_ENTRY vtc_S4765C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4765C3[0]),
  (VTBL_ENTRY)&_ZN7S4765C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4765C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4765C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4765C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4765C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4765C3[];
extern  VTBL_ENTRY _ZTV7S4765C3[];
Class_Descriptor cd_S4765C3 = {  "S4765C3", // class name
  0,0,//no base classes
  &(vtc_S4765C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4765C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4765C3),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  S4765C2  : S4765C3 {
  void *s4765c2f0;
  virtual void  v6(); // _ZN7S4765C22v6Ev
  virtual void  v7(); // _ZN7S4765C22v7Ev
  ~S4765C2(); // tgen
  S4765C2(); // tgen
};
//SIG(-1 S4765C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4765C2 ::v6(){vfunc_called(this, "_ZN7S4765C22v6Ev");}
void  S4765C2 ::v7(){vfunc_called(this, "_ZN7S4765C22v7Ev");}
S4765C2 ::~S4765C2(){ note_dtor("S4765C2", this);} // tgen
S4765C2 ::S4765C2(){ note_ctor("S4765C2", this);} // tgen

static void Test_S4765C2()
{
  extern Class_Descriptor cd_S4765C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4765C2, buf);
    S4765C2 *dp, &lv = *(dp=new (buf) S4765C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4765C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4765C2)");
    check_base_class_offset(lv, (S4765C3*), 0, "S4765C2");
    check_field_offset(lv, s4765c2f0, ABISELECT(40,28), "S4765C2.s4765c2f0");
    test_class_info(&lv, &cd_S4765C2);
    dp->~S4765C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4765C2(Test_S4765C2, "S4765C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4765C2C1Ev();
extern void _ZN7S4765C2D1Ev();
Name_Map name_map_S4765C2[] = {
  NSPAIR(_ZN7S4765C2C1Ev),
  NSPAIR(_ZN7S4765C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4765C3;
extern VTBL_ENTRY _ZTI7S4765C3[];
extern  VTBL_ENTRY _ZTV7S4765C3[];
static Base_Class bases_S4765C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4765C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4765C2[];
extern void _ZN7S4765C2D1Ev();
extern void _ZN7S4765C2D0Ev();
extern void _ZN7S4765C32v3Ev();
extern void _ZN7S4765C32v4Ev();
extern void _ZN7S4765C32v5Ev();
extern void _ZN7S4765C22v6Ev();
extern void _ZN7S4765C22v7Ev();
static  VTBL_ENTRY vtc_S4765C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4765C2[0]),
  (VTBL_ENTRY)&_ZN7S4765C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4765C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4765C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4765C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4765C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4765C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4765C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4765C2[];
extern  VTBL_ENTRY _ZTV7S4765C2[];
Class_Descriptor cd_S4765C2 = {  "S4765C2", // class name
  bases_S4765C2, 1,
  &(vtc_S4765C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4765C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4765C2),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  S4765C1  : S4765C2 {
  ::S856C9_nt s4765c1f0;
  ::S857C14_nt s4765c1f1;
  virtual  ~S4765C1(); // _ZN7S4765C1D1Ev
  virtual void  v1(); // _ZN7S4765C12v1Ev
  virtual void  v2(); // _ZN7S4765C12v2Ev
  S4765C1(); // tgen
};
//SIG(1 S4765C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m FC7{ Fl[4]}} FC8{ m Fp FC9{ Fi[4]}}}


 S4765C1 ::~S4765C1(){ note_dtor("S4765C1", this);}
void  S4765C1 ::v1(){vfunc_called(this, "_ZN7S4765C12v1Ev");}
void  S4765C1 ::v2(){vfunc_called(this, "_ZN7S4765C12v2Ev");}
S4765C1 ::S4765C1(){ note_ctor("S4765C1", this);} // tgen

static void Test_S4765C1()
{
  extern Class_Descriptor cd_S4765C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4765C1, buf);
    S4765C1 *dp, &lv = *(dp=new (buf) S4765C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4765C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4765C1)");
    check_base_class_offset(lv, (S4765C3*)(S4765C2*), 0, "S4765C1");
    check_base_class_offset(lv, (S4765C2*), 0, "S4765C1");
    check_field_offset(lv, s4765c1f0, ABISELECT(48,32), "S4765C1.s4765c1f0");
    check_field_offset(lv, s4765c1f1, ABISELECT(80,48), "S4765C1.s4765c1f1");
    test_class_info(&lv, &cd_S4765C1);
    dp->~S4765C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4765C1(Test_S4765C1, "S4765C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4765C1C1Ev();
extern void _ZN7S4765C1D1Ev();
Name_Map name_map_S4765C1[] = {
  NSPAIR(_ZN7S4765C1C1Ev),
  NSPAIR(_ZN7S4765C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4765C3;
extern VTBL_ENTRY _ZTI7S4765C3[];
extern  VTBL_ENTRY _ZTV7S4765C3[];
extern Class_Descriptor cd_S4765C2;
extern VTBL_ENTRY _ZTI7S4765C2[];
extern  VTBL_ENTRY _ZTV7S4765C2[];
static Base_Class bases_S4765C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4765C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4765C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4765C1[];
extern void _ZN7S4765C1D1Ev();
extern void _ZN7S4765C1D0Ev();
extern void _ZN7S4765C32v3Ev();
extern void _ZN7S4765C32v4Ev();
extern void _ZN7S4765C32v5Ev();
extern void _ZN7S4765C22v6Ev();
extern void _ZN7S4765C22v7Ev();
extern void _ZN7S4765C12v1Ev();
extern void _ZN7S4765C12v2Ev();
static  VTBL_ENTRY vtc_S4765C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4765C1[0]),
  (VTBL_ENTRY)&_ZN7S4765C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4765C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4765C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4765C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4765C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4765C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4765C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4765C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4765C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4765C1[];
extern  VTBL_ENTRY _ZTV7S4765C1[];
Class_Descriptor cd_S4765C1 = {  "S4765C1", // class name
  bases_S4765C1, 2,
  &(vtc_S4765C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4765C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4765C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5085C3  {
  ::S16130C9_nt s5085c3f0;
  int s5085c3f1[2];
  char s5085c3f2;
  virtual  ~S5085C3(); // _ZN7S5085C3D1Ev
  virtual void  v4(); // _ZN7S5085C32v4Ev
  virtual void  v5(); // _ZN7S5085C32v5Ev
  virtual void  v6(); // _ZN7S5085C32v6Ev
  S5085C3(); // tgen
};
//SIG(-1 S5085C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5085C3 ::~S5085C3(){ note_dtor("S5085C3", this);}
void  S5085C3 ::v4(){vfunc_called(this, "_ZN7S5085C32v4Ev");}
void  S5085C3 ::v5(){vfunc_called(this, "_ZN7S5085C32v5Ev");}
void  S5085C3 ::v6(){vfunc_called(this, "_ZN7S5085C32v6Ev");}
S5085C3 ::S5085C3(){ note_ctor("S5085C3", this);} // tgen

static void Test_S5085C3()
{
  extern Class_Descriptor cd_S5085C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5085C3, buf);
    S5085C3 *dp, &lv = *(dp=new (buf) S5085C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5085C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5085C3)");
    check_field_offset(lv, s5085c3f0, ABISELECT(8,4), "S5085C3.s5085c3f0");
    check_field_offset(lv, s5085c3f1, ABISELECT(24,16), "S5085C3.s5085c3f1");
    check_field_offset(lv, s5085c3f2, ABISELECT(32,24), "S5085C3.s5085c3f2");
    test_class_info(&lv, &cd_S5085C3);
    dp->~S5085C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5085C3(Test_S5085C3, "S5085C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5085C3C1Ev();
extern void _ZN7S5085C3D1Ev();
Name_Map name_map_S5085C3[] = {
  NSPAIR(_ZN7S5085C3C1Ev),
  NSPAIR(_ZN7S5085C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5085C3[];
extern void _ZN7S5085C3D1Ev();
extern void _ZN7S5085C3D0Ev();
extern void _ZN7S5085C32v4Ev();
extern void _ZN7S5085C32v5Ev();
extern void _ZN7S5085C32v6Ev();
static  VTBL_ENTRY vtc_S5085C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5085C3[0]),
  (VTBL_ENTRY)&_ZN7S5085C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5085C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5085C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5085C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5085C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5085C3[];
extern  VTBL_ENTRY _ZTV7S5085C3[];
Class_Descriptor cd_S5085C3 = {  "S5085C3", // class name
  0,0,//no base classes
  &(vtc_S5085C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5085C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5085C3),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  S5085C2  : S5085C3 {
  void *s5085c2f0;
  virtual void  v7(); // _ZN7S5085C22v7Ev
  virtual void  v8(); // _ZN7S5085C22v8Ev
  ~S5085C2(); // tgen
  S5085C2(); // tgen
};
//SIG(-1 S5085C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5085C2 ::v7(){vfunc_called(this, "_ZN7S5085C22v7Ev");}
void  S5085C2 ::v8(){vfunc_called(this, "_ZN7S5085C22v8Ev");}
S5085C2 ::~S5085C2(){ note_dtor("S5085C2", this);} // tgen
S5085C2 ::S5085C2(){ note_ctor("S5085C2", this);} // tgen

static void Test_S5085C2()
{
  extern Class_Descriptor cd_S5085C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5085C2, buf);
    S5085C2 *dp, &lv = *(dp=new (buf) S5085C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5085C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5085C2)");
    check_base_class_offset(lv, (S5085C3*), 0, "S5085C2");
    check_field_offset(lv, s5085c2f0, ABISELECT(40,28), "S5085C2.s5085c2f0");
    test_class_info(&lv, &cd_S5085C2);
    dp->~S5085C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5085C2(Test_S5085C2, "S5085C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5085C2C1Ev();
extern void _ZN7S5085C2D1Ev();
Name_Map name_map_S5085C2[] = {
  NSPAIR(_ZN7S5085C2C1Ev),
  NSPAIR(_ZN7S5085C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5085C3;
extern VTBL_ENTRY _ZTI7S5085C3[];
extern  VTBL_ENTRY _ZTV7S5085C3[];
static Base_Class bases_S5085C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5085C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5085C2[];
extern void _ZN7S5085C2D1Ev();
extern void _ZN7S5085C2D0Ev();
extern void _ZN7S5085C32v4Ev();
extern void _ZN7S5085C32v5Ev();
extern void _ZN7S5085C32v6Ev();
extern void _ZN7S5085C22v7Ev();
extern void _ZN7S5085C22v8Ev();
static  VTBL_ENTRY vtc_S5085C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5085C2[0]),
  (VTBL_ENTRY)&_ZN7S5085C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5085C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5085C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5085C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5085C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5085C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5085C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5085C2[];
extern  VTBL_ENTRY _ZTV7S5085C2[];
Class_Descriptor cd_S5085C2 = {  "S5085C2", // class name
  bases_S5085C2, 1,
  &(vtc_S5085C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5085C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5085C2),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  S5085C1  : S5085C2 {
  ::S16130C2_nt s5085c1f0;
  ::S857C14_nt s5085c1f1;
  virtual  ~S5085C1(); // _ZN7S5085C1D1Ev
  virtual void  v1(); // _ZN7S5085C12v1Ev
  virtual void  v2(); // _ZN7S5085C12v2Ev
  virtual void  v3(); // _ZN7S5085C12v3Ev
  S5085C1(); // tgen
};
//SIG(1 S5085C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 FC6{ m FL[4]} FC7{ m Fp FC8{ Fi[4]}}}


 S5085C1 ::~S5085C1(){ note_dtor("S5085C1", this);}
void  S5085C1 ::v1(){vfunc_called(this, "_ZN7S5085C12v1Ev");}
void  S5085C1 ::v2(){vfunc_called(this, "_ZN7S5085C12v2Ev");}
void  S5085C1 ::v3(){vfunc_called(this, "_ZN7S5085C12v3Ev");}
S5085C1 ::S5085C1(){ note_ctor("S5085C1", this);} // tgen

static void Test_S5085C1()
{
  extern Class_Descriptor cd_S5085C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,22)];
    init_test(&cd_S5085C1, buf);
    S5085C1 *dp, &lv = *(dp=new (buf) S5085C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,84), "sizeof(S5085C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5085C1)");
    check_base_class_offset(lv, (S5085C3*)(S5085C2*), 0, "S5085C1");
    check_base_class_offset(lv, (S5085C2*), 0, "S5085C1");
    check_field_offset(lv, s5085c1f0, ABISELECT(48,32), "S5085C1.s5085c1f0");
    check_field_offset(lv, s5085c1f1, ABISELECT(80,64), "S5085C1.s5085c1f1");
    test_class_info(&lv, &cd_S5085C1);
    dp->~S5085C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5085C1(Test_S5085C1, "S5085C1", ABISELECT(104,84));

#else // __cplusplus

extern void _ZN7S5085C1C1Ev();
extern void _ZN7S5085C1D1Ev();
Name_Map name_map_S5085C1[] = {
  NSPAIR(_ZN7S5085C1C1Ev),
  NSPAIR(_ZN7S5085C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5085C3;
extern VTBL_ENTRY _ZTI7S5085C3[];
extern  VTBL_ENTRY _ZTV7S5085C3[];
extern Class_Descriptor cd_S5085C2;
extern VTBL_ENTRY _ZTI7S5085C2[];
extern  VTBL_ENTRY _ZTV7S5085C2[];
static Base_Class bases_S5085C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5085C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5085C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5085C1[];
extern void _ZN7S5085C1D1Ev();
extern void _ZN7S5085C1D0Ev();
extern void _ZN7S5085C32v4Ev();
extern void _ZN7S5085C32v5Ev();
extern void _ZN7S5085C32v6Ev();
extern void _ZN7S5085C22v7Ev();
extern void _ZN7S5085C22v8Ev();
extern void _ZN7S5085C12v1Ev();
extern void _ZN7S5085C12v2Ev();
extern void _ZN7S5085C12v3Ev();
static  VTBL_ENTRY vtc_S5085C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5085C1[0]),
  (VTBL_ENTRY)&_ZN7S5085C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5085C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5085C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5085C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5085C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5085C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5085C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5085C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5085C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5085C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5085C1[];
extern  VTBL_ENTRY _ZTV7S5085C1[];
Class_Descriptor cd_S5085C1 = {  "S5085C1", // class name
  bases_S5085C1, 2,
  &(vtc_S5085C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,84), // object size
  NSPAIRA(_ZTI7S5085C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5085C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4772C3  {
  ::S16130C9_nt s4772c3f0;
  int s4772c3f1[2];
  char s4772c3f2;
  virtual  ~S4772C3(); // _ZN7S4772C3D1Ev
  virtual void  v3(); // _ZN7S4772C32v3Ev
  virtual void  v4(); // _ZN7S4772C32v4Ev
  virtual void  v5(); // _ZN7S4772C32v5Ev
  S4772C3(); // tgen
};
//SIG(-1 S4772C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4772C3 ::~S4772C3(){ note_dtor("S4772C3", this);}
void  S4772C3 ::v3(){vfunc_called(this, "_ZN7S4772C32v3Ev");}
void  S4772C3 ::v4(){vfunc_called(this, "_ZN7S4772C32v4Ev");}
void  S4772C3 ::v5(){vfunc_called(this, "_ZN7S4772C32v5Ev");}
S4772C3 ::S4772C3(){ note_ctor("S4772C3", this);} // tgen

static void Test_S4772C3()
{
  extern Class_Descriptor cd_S4772C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4772C3, buf);
    S4772C3 *dp, &lv = *(dp=new (buf) S4772C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4772C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4772C3)");
    check_field_offset(lv, s4772c3f0, ABISELECT(8,4), "S4772C3.s4772c3f0");
    check_field_offset(lv, s4772c3f1, ABISELECT(24,16), "S4772C3.s4772c3f1");
    check_field_offset(lv, s4772c3f2, ABISELECT(32,24), "S4772C3.s4772c3f2");
    test_class_info(&lv, &cd_S4772C3);
    dp->~S4772C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4772C3(Test_S4772C3, "S4772C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4772C3C1Ev();
extern void _ZN7S4772C3D1Ev();
Name_Map name_map_S4772C3[] = {
  NSPAIR(_ZN7S4772C3C1Ev),
  NSPAIR(_ZN7S4772C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4772C3[];
extern void _ZN7S4772C3D1Ev();
extern void _ZN7S4772C3D0Ev();
extern void _ZN7S4772C32v3Ev();
extern void _ZN7S4772C32v4Ev();
extern void _ZN7S4772C32v5Ev();
static  VTBL_ENTRY vtc_S4772C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4772C3[0]),
  (VTBL_ENTRY)&_ZN7S4772C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4772C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4772C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4772C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4772C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4772C3[];
extern  VTBL_ENTRY _ZTV7S4772C3[];
Class_Descriptor cd_S4772C3 = {  "S4772C3", // class name
  0,0,//no base classes
  &(vtc_S4772C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4772C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4772C3),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  S4772C2  : S4772C3 {
  void *s4772c2f0;
  virtual void  v6(); // _ZN7S4772C22v6Ev
  virtual void  v7(); // _ZN7S4772C22v7Ev
  ~S4772C2(); // tgen
  S4772C2(); // tgen
};
//SIG(-1 S4772C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4772C2 ::v6(){vfunc_called(this, "_ZN7S4772C22v6Ev");}
void  S4772C2 ::v7(){vfunc_called(this, "_ZN7S4772C22v7Ev");}
S4772C2 ::~S4772C2(){ note_dtor("S4772C2", this);} // tgen
S4772C2 ::S4772C2(){ note_ctor("S4772C2", this);} // tgen

static void Test_S4772C2()
{
  extern Class_Descriptor cd_S4772C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4772C2, buf);
    S4772C2 *dp, &lv = *(dp=new (buf) S4772C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4772C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4772C2)");
    check_base_class_offset(lv, (S4772C3*), 0, "S4772C2");
    check_field_offset(lv, s4772c2f0, ABISELECT(40,28), "S4772C2.s4772c2f0");
    test_class_info(&lv, &cd_S4772C2);
    dp->~S4772C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4772C2(Test_S4772C2, "S4772C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4772C2C1Ev();
extern void _ZN7S4772C2D1Ev();
Name_Map name_map_S4772C2[] = {
  NSPAIR(_ZN7S4772C2C1Ev),
  NSPAIR(_ZN7S4772C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4772C3;
extern VTBL_ENTRY _ZTI7S4772C3[];
extern  VTBL_ENTRY _ZTV7S4772C3[];
static Base_Class bases_S4772C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4772C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4772C2[];
extern void _ZN7S4772C2D1Ev();
extern void _ZN7S4772C2D0Ev();
extern void _ZN7S4772C32v3Ev();
extern void _ZN7S4772C32v4Ev();
extern void _ZN7S4772C32v5Ev();
extern void _ZN7S4772C22v6Ev();
extern void _ZN7S4772C22v7Ev();
static  VTBL_ENTRY vtc_S4772C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4772C2[0]),
  (VTBL_ENTRY)&_ZN7S4772C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4772C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4772C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4772C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4772C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4772C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4772C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4772C2[];
extern  VTBL_ENTRY _ZTV7S4772C2[];
Class_Descriptor cd_S4772C2 = {  "S4772C2", // class name
  bases_S4772C2, 1,
  &(vtc_S4772C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4772C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4772C2),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  S4772C1  : S4772C2 {
  ::S16130C2_nt s4772c1f0;
  ::S857C14_nt s4772c1f1;
  virtual  ~S4772C1(); // _ZN7S4772C1D1Ev
  virtual void  v1(); // _ZN7S4772C12v1Ev
  virtual void  v2(); // _ZN7S4772C12v2Ev
  S4772C1(); // tgen
};
//SIG(1 S4772C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m FL[4]} FC7{ m Fp FC8{ Fi[4]}}}


 S4772C1 ::~S4772C1(){ note_dtor("S4772C1", this);}
void  S4772C1 ::v1(){vfunc_called(this, "_ZN7S4772C12v1Ev");}
void  S4772C1 ::v2(){vfunc_called(this, "_ZN7S4772C12v2Ev");}
S4772C1 ::S4772C1(){ note_ctor("S4772C1", this);} // tgen

static void Test_S4772C1()
{
  extern Class_Descriptor cd_S4772C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,22)];
    init_test(&cd_S4772C1, buf);
    S4772C1 *dp, &lv = *(dp=new (buf) S4772C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,84), "sizeof(S4772C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4772C1)");
    check_base_class_offset(lv, (S4772C3*)(S4772C2*), 0, "S4772C1");
    check_base_class_offset(lv, (S4772C2*), 0, "S4772C1");
    check_field_offset(lv, s4772c1f0, ABISELECT(48,32), "S4772C1.s4772c1f0");
    check_field_offset(lv, s4772c1f1, ABISELECT(80,64), "S4772C1.s4772c1f1");
    test_class_info(&lv, &cd_S4772C1);
    dp->~S4772C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4772C1(Test_S4772C1, "S4772C1", ABISELECT(104,84));

#else // __cplusplus

extern void _ZN7S4772C1C1Ev();
extern void _ZN7S4772C1D1Ev();
Name_Map name_map_S4772C1[] = {
  NSPAIR(_ZN7S4772C1C1Ev),
  NSPAIR(_ZN7S4772C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4772C3;
extern VTBL_ENTRY _ZTI7S4772C3[];
extern  VTBL_ENTRY _ZTV7S4772C3[];
extern Class_Descriptor cd_S4772C2;
extern VTBL_ENTRY _ZTI7S4772C2[];
extern  VTBL_ENTRY _ZTV7S4772C2[];
static Base_Class bases_S4772C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4772C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4772C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4772C1[];
extern void _ZN7S4772C1D1Ev();
extern void _ZN7S4772C1D0Ev();
extern void _ZN7S4772C32v3Ev();
extern void _ZN7S4772C32v4Ev();
extern void _ZN7S4772C32v5Ev();
extern void _ZN7S4772C22v6Ev();
extern void _ZN7S4772C22v7Ev();
extern void _ZN7S4772C12v1Ev();
extern void _ZN7S4772C12v2Ev();
static  VTBL_ENTRY vtc_S4772C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4772C1[0]),
  (VTBL_ENTRY)&_ZN7S4772C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4772C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4772C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4772C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4772C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4772C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4772C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4772C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4772C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4772C1[];
extern  VTBL_ENTRY _ZTV7S4772C1[];
Class_Descriptor cd_S4772C1 = {  "S4772C1", // class name
  bases_S4772C1, 2,
  &(vtc_S4772C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,84), // object size
  NSPAIRA(_ZTI7S4772C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4772C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10235C2  {
  virtual  ~S10235C2(); // _ZN8S10235C2D1Ev
  virtual void  v8(); // _ZN8S10235C22v8Ev
  virtual void  v9(); // _ZN8S10235C22v9Ev
  virtual void  v10(); // _ZN8S10235C23v10Ev
  virtual void  v11(); // _ZN8S10235C23v11Ev
  virtual void  v12(); // _ZN8S10235C23v12Ev
  virtual void  v13(); // _ZN8S10235C23v13Ev
  virtual void  v14(); // _ZN8S10235C23v14Ev
  S10235C2(); // tgen
};
//SIG(-1 S10235C2) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S10235C2 ::~S10235C2(){ note_dtor("S10235C2", this);}
void  S10235C2 ::v8(){vfunc_called(this, "_ZN8S10235C22v8Ev");}
void  S10235C2 ::v9(){vfunc_called(this, "_ZN8S10235C22v9Ev");}
void  S10235C2 ::v10(){vfunc_called(this, "_ZN8S10235C23v10Ev");}
void  S10235C2 ::v11(){vfunc_called(this, "_ZN8S10235C23v11Ev");}
void  S10235C2 ::v12(){vfunc_called(this, "_ZN8S10235C23v12Ev");}
void  S10235C2 ::v13(){vfunc_called(this, "_ZN8S10235C23v13Ev");}
void  S10235C2 ::v14(){vfunc_called(this, "_ZN8S10235C23v14Ev");}
S10235C2 ::S10235C2(){ note_ctor("S10235C2", this);} // tgen

static void Test_S10235C2()
{
  extern Class_Descriptor cd_S10235C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10235C2, buf);
    S10235C2 *dp, &lv = *(dp=new (buf) S10235C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10235C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10235C2)");
    test_class_info(&lv, &cd_S10235C2);
    dp->~S10235C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10235C2(Test_S10235C2, "S10235C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10235C2C1Ev();
extern void _ZN8S10235C2D1Ev();
Name_Map name_map_S10235C2[] = {
  NSPAIR(_ZN8S10235C2C1Ev),
  NSPAIR(_ZN8S10235C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10235C2[];
extern void _ZN8S10235C2D1Ev();
extern void _ZN8S10235C2D0Ev();
extern void _ZN8S10235C22v8Ev();
extern void _ZN8S10235C22v9Ev();
extern void _ZN8S10235C23v10Ev();
extern void _ZN8S10235C23v11Ev();
extern void _ZN8S10235C23v12Ev();
extern void _ZN8S10235C23v13Ev();
extern void _ZN8S10235C23v14Ev();
static  VTBL_ENTRY vtc_S10235C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10235C2[0]),
  (VTBL_ENTRY)&_ZN8S10235C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10235C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10235C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10235C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10235C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10235C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10235C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10235C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10235C23v14Ev,
};
extern VTBL_ENTRY _ZTI8S10235C2[];
extern  VTBL_ENTRY _ZTV8S10235C2[];
Class_Descriptor cd_S10235C2 = {  "S10235C2", // class name
  0,0,//no base classes
  &(vtc_S10235C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10235C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10235C2),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  S10235C1  : S10235C2 {
  ::S5408C15_nt s10235c1f0;
  ::S857C9_nt s10235c1f1;
  virtual  ~S10235C1(); // _ZN8S10235C1D1Ev
  virtual void  v1(); // _ZN8S10235C12v1Ev
  virtual void  v2(); // _ZN8S10235C12v2Ev
  virtual void  v3(); // _ZN8S10235C12v3Ev
  virtual void  v4(); // _ZN8S10235C12v4Ev
  virtual void  v5(); // _ZN8S10235C12v5Ev
  virtual void  v6(); // _ZN8S10235C12v6Ev
  virtual void  v7(); // _ZN8S10235C12v7Ev
  S10235C1(); // tgen
};
//SIG(1 S10235C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FC6{ FL[4]}}}


 S10235C1 ::~S10235C1(){ note_dtor("S10235C1", this);}
void  S10235C1 ::v1(){vfunc_called(this, "_ZN8S10235C12v1Ev");}
void  S10235C1 ::v2(){vfunc_called(this, "_ZN8S10235C12v2Ev");}
void  S10235C1 ::v3(){vfunc_called(this, "_ZN8S10235C12v3Ev");}
void  S10235C1 ::v4(){vfunc_called(this, "_ZN8S10235C12v4Ev");}
void  S10235C1 ::v5(){vfunc_called(this, "_ZN8S10235C12v5Ev");}
void  S10235C1 ::v6(){vfunc_called(this, "_ZN8S10235C12v6Ev");}
void  S10235C1 ::v7(){vfunc_called(this, "_ZN8S10235C12v7Ev");}
S10235C1 ::S10235C1(){ note_ctor("S10235C1", this);} // tgen

static void Test_S10235C1()
{
  extern Class_Descriptor cd_S10235C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,14)];
    init_test(&cd_S10235C1, buf);
    S10235C1 *dp, &lv = *(dp=new (buf) S10235C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S10235C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10235C1)");
    check_base_class_offset(lv, (S10235C2*), 0, "S10235C1");
    check_field_offset(lv, s10235c1f0, ABISELECT(8,4), "S10235C1.s10235c1f0");
    check_field_offset(lv, s10235c1f1, ABISELECT(32,20), "S10235C1.s10235c1f1");
    test_class_info(&lv, &cd_S10235C1);
    dp->~S10235C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10235C1(Test_S10235C1, "S10235C1", ABISELECT(64,52));

#else // __cplusplus

extern void _ZN8S10235C1C1Ev();
extern void _ZN8S10235C1D1Ev();
Name_Map name_map_S10235C1[] = {
  NSPAIR(_ZN8S10235C1C1Ev),
  NSPAIR(_ZN8S10235C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10235C2;
extern VTBL_ENTRY _ZTI8S10235C2[];
extern  VTBL_ENTRY _ZTV8S10235C2[];
static Base_Class bases_S10235C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10235C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10235C1[];
extern void _ZN8S10235C1D1Ev();
extern void _ZN8S10235C1D0Ev();
extern void _ZN8S10235C22v8Ev();
extern void _ZN8S10235C22v9Ev();
extern void _ZN8S10235C23v10Ev();
extern void _ZN8S10235C23v11Ev();
extern void _ZN8S10235C23v12Ev();
extern void _ZN8S10235C23v13Ev();
extern void _ZN8S10235C23v14Ev();
extern void _ZN8S10235C12v1Ev();
extern void _ZN8S10235C12v2Ev();
extern void _ZN8S10235C12v3Ev();
extern void _ZN8S10235C12v4Ev();
extern void _ZN8S10235C12v5Ev();
extern void _ZN8S10235C12v6Ev();
extern void _ZN8S10235C12v7Ev();
static  VTBL_ENTRY vtc_S10235C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10235C1[0]),
  (VTBL_ENTRY)&_ZN8S10235C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10235C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10235C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10235C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10235C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10235C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10235C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10235C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10235C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10235C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10235C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10235C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10235C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10235C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10235C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10235C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S10235C1[];
extern  VTBL_ENTRY _ZTV8S10235C1[];
Class_Descriptor cd_S10235C1 = {  "S10235C1", // class name
  bases_S10235C1, 1,
  &(vtc_S10235C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,52), // object size
  NSPAIRA(_ZTI8S10235C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10235C1),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  S9363C2  {
  ::S16130C9_nt s9363c2f0;
  int s9363c2f1[2];
  char s9363c2f2;
  virtual  ~S9363C2(); // _ZN7S9363C2D1Ev
  virtual void  v3(); // _ZN7S9363C22v3Ev
  virtual void  v4(); // _ZN7S9363C22v4Ev
  virtual void  v5(); // _ZN7S9363C22v5Ev
  S9363C2(); // tgen
};
//SIG(-1 S9363C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9363C2 ::~S9363C2(){ note_dtor("S9363C2", this);}
void  S9363C2 ::v3(){vfunc_called(this, "_ZN7S9363C22v3Ev");}
void  S9363C2 ::v4(){vfunc_called(this, "_ZN7S9363C22v4Ev");}
void  S9363C2 ::v5(){vfunc_called(this, "_ZN7S9363C22v5Ev");}
S9363C2 ::S9363C2(){ note_ctor("S9363C2", this);} // tgen

static void Test_S9363C2()
{
  extern Class_Descriptor cd_S9363C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9363C2, buf);
    S9363C2 *dp, &lv = *(dp=new (buf) S9363C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9363C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9363C2)");
    check_field_offset(lv, s9363c2f0, ABISELECT(8,4), "S9363C2.s9363c2f0");
    check_field_offset(lv, s9363c2f1, ABISELECT(24,16), "S9363C2.s9363c2f1");
    check_field_offset(lv, s9363c2f2, ABISELECT(32,24), "S9363C2.s9363c2f2");
    test_class_info(&lv, &cd_S9363C2);
    dp->~S9363C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9363C2(Test_S9363C2, "S9363C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9363C2C1Ev();
extern void _ZN7S9363C2D1Ev();
Name_Map name_map_S9363C2[] = {
  NSPAIR(_ZN7S9363C2C1Ev),
  NSPAIR(_ZN7S9363C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9363C2[];
extern void _ZN7S9363C2D1Ev();
extern void _ZN7S9363C2D0Ev();
extern void _ZN7S9363C22v3Ev();
extern void _ZN7S9363C22v4Ev();
extern void _ZN7S9363C22v5Ev();
static  VTBL_ENTRY vtc_S9363C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9363C2[0]),
  (VTBL_ENTRY)&_ZN7S9363C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9363C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9363C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9363C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9363C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9363C2[];
extern  VTBL_ENTRY _ZTV7S9363C2[];
Class_Descriptor cd_S9363C2 = {  "S9363C2", // class name
  0,0,//no base classes
  &(vtc_S9363C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9363C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9363C2),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  S9363C1  : S9363C2 {
  void *s9363c1f0;
  ::S857C9_nt s9363c1f1;
  ::S857C14_nt s9363c1f2;
  int s9363c1f3;
  virtual  ~S9363C1(); // _ZN7S9363C1D1Ev
  virtual void  v1(); // _ZN7S9363C12v1Ev
  virtual void  v2(); // _ZN7S9363C12v2Ev
  S9363C1(); // tgen
};
//SIG(1 S9363C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp FC5{ m FC6{ FL[4]}} FC7{ m Fp FC8{ Fi[4]}} Fi}


 S9363C1 ::~S9363C1(){ note_dtor("S9363C1", this);}
void  S9363C1 ::v1(){vfunc_called(this, "_ZN7S9363C12v1Ev");}
void  S9363C1 ::v2(){vfunc_called(this, "_ZN7S9363C12v2Ev");}
S9363C1 ::S9363C1(){ note_ctor("S9363C1", this);} // tgen

static void Test_S9363C1()
{
  extern Class_Descriptor cd_S9363C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,23)];
    init_test(&cd_S9363C1, buf);
    S9363C1 *dp, &lv = *(dp=new (buf) S9363C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S9363C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9363C1)");
    check_base_class_offset(lv, (S9363C2*), 0, "S9363C1");
    check_field_offset(lv, s9363c1f0, ABISELECT(40,28), "S9363C1.s9363c1f0");
    check_field_offset(lv, s9363c1f1, ABISELECT(48,32), "S9363C1.s9363c1f1");
    check_field_offset(lv, s9363c1f2, ABISELECT(80,64), "S9363C1.s9363c1f2");
    check_field_offset(lv, s9363c1f3, ABISELECT(104,84), "S9363C1.s9363c1f3");
    test_class_info(&lv, &cd_S9363C1);
    dp->~S9363C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9363C1(Test_S9363C1, "S9363C1", ABISELECT(112,88));

#else // __cplusplus

extern void _ZN7S9363C1C1Ev();
extern void _ZN7S9363C1D1Ev();
Name_Map name_map_S9363C1[] = {
  NSPAIR(_ZN7S9363C1C1Ev),
  NSPAIR(_ZN7S9363C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9363C2;
extern VTBL_ENTRY _ZTI7S9363C2[];
extern  VTBL_ENTRY _ZTV7S9363C2[];
static Base_Class bases_S9363C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9363C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9363C1[];
extern void _ZN7S9363C1D1Ev();
extern void _ZN7S9363C1D0Ev();
extern void _ZN7S9363C22v3Ev();
extern void _ZN7S9363C22v4Ev();
extern void _ZN7S9363C22v5Ev();
extern void _ZN7S9363C12v1Ev();
extern void _ZN7S9363C12v2Ev();
static  VTBL_ENTRY vtc_S9363C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9363C1[0]),
  (VTBL_ENTRY)&_ZN7S9363C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9363C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9363C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9363C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9363C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9363C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9363C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9363C1[];
extern  VTBL_ENTRY _ZTV7S9363C1[];
Class_Descriptor cd_S9363C1 = {  "S9363C1", // class name
  bases_S9363C1, 1,
  &(vtc_S9363C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,88), // object size
  NSPAIRA(_ZTI7S9363C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9363C1),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  S9362C2  {
  ::S16130C9_nt s9362c2f0;
  int s9362c2f1[2];
  char s9362c2f2;
  virtual  ~S9362C2(); // _ZN7S9362C2D1Ev
  virtual void  v3(); // _ZN7S9362C22v3Ev
  virtual void  v4(); // _ZN7S9362C22v4Ev
  virtual void  v5(); // _ZN7S9362C22v5Ev
  S9362C2(); // tgen
};
//SIG(-1 S9362C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9362C2 ::~S9362C2(){ note_dtor("S9362C2", this);}
void  S9362C2 ::v3(){vfunc_called(this, "_ZN7S9362C22v3Ev");}
void  S9362C2 ::v4(){vfunc_called(this, "_ZN7S9362C22v4Ev");}
void  S9362C2 ::v5(){vfunc_called(this, "_ZN7S9362C22v5Ev");}
S9362C2 ::S9362C2(){ note_ctor("S9362C2", this);} // tgen

static void Test_S9362C2()
{
  extern Class_Descriptor cd_S9362C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9362C2, buf);
    S9362C2 *dp, &lv = *(dp=new (buf) S9362C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9362C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9362C2)");
    check_field_offset(lv, s9362c2f0, ABISELECT(8,4), "S9362C2.s9362c2f0");
    check_field_offset(lv, s9362c2f1, ABISELECT(24,16), "S9362C2.s9362c2f1");
    check_field_offset(lv, s9362c2f2, ABISELECT(32,24), "S9362C2.s9362c2f2");
    test_class_info(&lv, &cd_S9362C2);
    dp->~S9362C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9362C2(Test_S9362C2, "S9362C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9362C2C1Ev();
extern void _ZN7S9362C2D1Ev();
Name_Map name_map_S9362C2[] = {
  NSPAIR(_ZN7S9362C2C1Ev),
  NSPAIR(_ZN7S9362C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9362C2[];
extern void _ZN7S9362C2D1Ev();
extern void _ZN7S9362C2D0Ev();
extern void _ZN7S9362C22v3Ev();
extern void _ZN7S9362C22v4Ev();
extern void _ZN7S9362C22v5Ev();
static  VTBL_ENTRY vtc_S9362C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9362C2[0]),
  (VTBL_ENTRY)&_ZN7S9362C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9362C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9362C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9362C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9362C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9362C2[];
extern  VTBL_ENTRY _ZTV7S9362C2[];
Class_Descriptor cd_S9362C2 = {  "S9362C2", // class name
  0,0,//no base classes
  &(vtc_S9362C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9362C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9362C2),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  S9362C1  : S9362C2 {
  void *s9362c1f0;
  ::S856C9_nt s9362c1f1;
  ::S857C14_nt s9362c1f2;
  int s9362c1f3;
  virtual  ~S9362C1(); // _ZN7S9362C1D1Ev
  virtual void  v1(); // _ZN7S9362C12v1Ev
  virtual void  v2(); // _ZN7S9362C12v2Ev
  S9362C1(); // tgen
};
//SIG(1 S9362C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp FC5{ m FC6{ Fl[4]}} FC7{ m Fp FC8{ Fi[4]}} Fi}


 S9362C1 ::~S9362C1(){ note_dtor("S9362C1", this);}
void  S9362C1 ::v1(){vfunc_called(this, "_ZN7S9362C12v1Ev");}
void  S9362C1 ::v2(){vfunc_called(this, "_ZN7S9362C12v2Ev");}
S9362C1 ::S9362C1(){ note_ctor("S9362C1", this);} // tgen

static void Test_S9362C1()
{
  extern Class_Descriptor cd_S9362C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S9362C1, buf);
    S9362C1 *dp, &lv = *(dp=new (buf) S9362C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S9362C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9362C1)");
    check_base_class_offset(lv, (S9362C2*), 0, "S9362C1");
    check_field_offset(lv, s9362c1f0, ABISELECT(40,28), "S9362C1.s9362c1f0");
    check_field_offset(lv, s9362c1f1, ABISELECT(48,32), "S9362C1.s9362c1f1");
    check_field_offset(lv, s9362c1f2, ABISELECT(80,48), "S9362C1.s9362c1f2");
    check_field_offset(lv, s9362c1f3, ABISELECT(104,68), "S9362C1.s9362c1f3");
    test_class_info(&lv, &cd_S9362C1);
    dp->~S9362C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9362C1(Test_S9362C1, "S9362C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S9362C1C1Ev();
extern void _ZN7S9362C1D1Ev();
Name_Map name_map_S9362C1[] = {
  NSPAIR(_ZN7S9362C1C1Ev),
  NSPAIR(_ZN7S9362C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9362C2;
extern VTBL_ENTRY _ZTI7S9362C2[];
extern  VTBL_ENTRY _ZTV7S9362C2[];
static Base_Class bases_S9362C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9362C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9362C1[];
extern void _ZN7S9362C1D1Ev();
extern void _ZN7S9362C1D0Ev();
extern void _ZN7S9362C22v3Ev();
extern void _ZN7S9362C22v4Ev();
extern void _ZN7S9362C22v5Ev();
extern void _ZN7S9362C12v1Ev();
extern void _ZN7S9362C12v2Ev();
static  VTBL_ENTRY vtc_S9362C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9362C1[0]),
  (VTBL_ENTRY)&_ZN7S9362C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9362C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9362C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9362C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9362C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9362C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9362C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9362C1[];
extern  VTBL_ENTRY _ZTV7S9362C1[];
Class_Descriptor cd_S9362C1 = {  "S9362C1", // class name
  bases_S9362C1, 1,
  &(vtc_S9362C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S9362C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9362C1),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  S5056C3  {
  ::S16130C9_nt s5056c3f0;
  int s5056c3f1[2];
  char s5056c3f2;
  virtual  ~S5056C3(); // _ZN7S5056C3D1Ev
  virtual void  v4(); // _ZN7S5056C32v4Ev
  virtual void  v5(); // _ZN7S5056C32v5Ev
  virtual void  v6(); // _ZN7S5056C32v6Ev
  S5056C3(); // tgen
};
//SIG(-1 S5056C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5056C3 ::~S5056C3(){ note_dtor("S5056C3", this);}
void  S5056C3 ::v4(){vfunc_called(this, "_ZN7S5056C32v4Ev");}
void  S5056C3 ::v5(){vfunc_called(this, "_ZN7S5056C32v5Ev");}
void  S5056C3 ::v6(){vfunc_called(this, "_ZN7S5056C32v6Ev");}
S5056C3 ::S5056C3(){ note_ctor("S5056C3", this);} // tgen

static void Test_S5056C3()
{
  extern Class_Descriptor cd_S5056C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5056C3, buf);
    S5056C3 *dp, &lv = *(dp=new (buf) S5056C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5056C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5056C3)");
    check_field_offset(lv, s5056c3f0, ABISELECT(8,4), "S5056C3.s5056c3f0");
    check_field_offset(lv, s5056c3f1, ABISELECT(24,16), "S5056C3.s5056c3f1");
    check_field_offset(lv, s5056c3f2, ABISELECT(32,24), "S5056C3.s5056c3f2");
    test_class_info(&lv, &cd_S5056C3);
    dp->~S5056C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5056C3(Test_S5056C3, "S5056C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5056C3C1Ev();
extern void _ZN7S5056C3D1Ev();
Name_Map name_map_S5056C3[] = {
  NSPAIR(_ZN7S5056C3C1Ev),
  NSPAIR(_ZN7S5056C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5056C3[];
extern void _ZN7S5056C3D1Ev();
extern void _ZN7S5056C3D0Ev();
extern void _ZN7S5056C32v4Ev();
extern void _ZN7S5056C32v5Ev();
extern void _ZN7S5056C32v6Ev();
static  VTBL_ENTRY vtc_S5056C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5056C3[0]),
  (VTBL_ENTRY)&_ZN7S5056C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5056C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5056C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5056C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5056C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5056C3[];
extern  VTBL_ENTRY _ZTV7S5056C3[];
Class_Descriptor cd_S5056C3 = {  "S5056C3", // class name
  0,0,//no base classes
  &(vtc_S5056C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5056C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5056C3),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  S5056C2  : S5056C3 , S5055C6_nt {
  virtual  ~S5056C2(); // _ZN7S5056C2D1Ev
  virtual void  v7(); // _ZN7S5056C22v7Ev
  virtual void  v8(); // _ZN7S5056C22v8Ev
  S5056C2(); // tgen
};
//SIG(-1 S5056C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m Fp Fi[5]} vd v1 v2}


 S5056C2 ::~S5056C2(){ note_dtor("S5056C2", this);}
void  S5056C2 ::v7(){vfunc_called(this, "_ZN7S5056C22v7Ev");}
void  S5056C2 ::v8(){vfunc_called(this, "_ZN7S5056C22v8Ev");}
S5056C2 ::S5056C2(){ note_ctor("S5056C2", this);} // tgen

static void Test_S5056C2()
{
  extern Class_Descriptor cd_S5056C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S5056C2, buf);
    S5056C2 *dp, &lv = *(dp=new (buf) S5056C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S5056C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5056C2)");
    check_base_class_offset(lv, (S5056C3*), 0, "S5056C2");
    check_base_class_offset(lv, (S5055C6_nt*), ABISELECT(40,28), "S5056C2");
    test_class_info(&lv, &cd_S5056C2);
    dp->~S5056C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5056C2(Test_S5056C2, "S5056C2", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S5056C2C1Ev();
extern void _ZN7S5056C2D1Ev();
Name_Map name_map_S5056C2[] = {
  NSPAIR(_ZN7S5056C2C1Ev),
  NSPAIR(_ZN7S5056C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5056C3;
extern VTBL_ENTRY _ZTI7S5056C3[];
extern  VTBL_ENTRY _ZTV7S5056C3[];
extern Class_Descriptor cd_S5055C6_nt;
extern VTBL_ENTRY _ZTI10S5055C6_nt[];
extern  VTBL_ENTRY _ZTV10S5055C6_nt[];
static Base_Class bases_S5056C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5056C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5055C6_nt,    ABISELECT(40,28), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5056C2[];
extern void _ZN7S5056C2D1Ev();
extern void _ZN7S5056C2D0Ev();
extern void _ZN7S5056C32v4Ev();
extern void _ZN7S5056C32v5Ev();
extern void _ZN7S5056C32v6Ev();
extern void _ZN7S5056C22v7Ev();
extern void _ZN7S5056C22v8Ev();
extern void ABISELECT(_ZThn40_N7S5056C2D1Ev,_ZThn28_N7S5056C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S5056C2D0Ev,_ZThn28_N7S5056C2D0Ev)();
static  VTBL_ENTRY vtc_S5056C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5056C2[0]),
  (VTBL_ENTRY)&_ZN7S5056C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5056C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5056C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5056C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5056C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5056C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5056C22v8Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S5056C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S5056C2D1Ev,_ZThn28_N7S5056C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S5056C2D0Ev,_ZThn28_N7S5056C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S5056C2[];
extern  VTBL_ENTRY _ZTV7S5056C2[];
Class_Descriptor cd_S5056C2 = {  "S5056C2", // class name
  bases_S5056C2, 2,
  &(vtc_S5056C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S5056C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5056C2),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5056C1  : S5056C2 {
  void *s5056c1f0[2];
  int s5056c1f1;
  virtual  ~S5056C1(); // _ZN7S5056C1D1Ev
  virtual void  v1(); // _ZN7S5056C12v1Ev
  virtual void  v2(); // _ZN7S5056C12v2Ev
  virtual void  v3(); // _ZN7S5056C12v3Ev
  S5056C1(); // tgen
};
//SIG(1 S5056C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m Fp Fi[5]} vd v7 v8} vd v1 v2 v3 Fp[2] Fi}


 S5056C1 ::~S5056C1(){ note_dtor("S5056C1", this);}
void  S5056C1 ::v1(){vfunc_called(this, "_ZN7S5056C12v1Ev");}
void  S5056C1 ::v2(){vfunc_called(this, "_ZN7S5056C12v2Ev");}
void  S5056C1 ::v3(){vfunc_called(this, "_ZN7S5056C12v3Ev");}
S5056C1 ::S5056C1(){ note_ctor("S5056C1", this);} // tgen

static void Test_S5056C1()
{
  extern Class_Descriptor cd_S5056C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S5056C1, buf);
    S5056C1 *dp, &lv = *(dp=new (buf) S5056C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S5056C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5056C1)");
    check_base_class_offset(lv, (S5056C3*)(S5056C2*), 0, "S5056C1");
    check_base_class_offset(lv, (S5055C6_nt*)(S5056C2*), ABISELECT(40,28), "S5056C1");
    check_base_class_offset(lv, (S5056C2*), 0, "S5056C1");
    check_field_offset(lv, s5056c1f0, ABISELECT(80,56), "S5056C1.s5056c1f0");
    check_field_offset(lv, s5056c1f1, ABISELECT(96,64), "S5056C1.s5056c1f1");
    test_class_info(&lv, &cd_S5056C1);
    dp->~S5056C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5056C1(Test_S5056C1, "S5056C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S5056C1C1Ev();
extern void _ZN7S5056C1D1Ev();
Name_Map name_map_S5056C1[] = {
  NSPAIR(_ZN7S5056C1C1Ev),
  NSPAIR(_ZN7S5056C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5056C3;
extern VTBL_ENTRY _ZTI7S5056C3[];
extern  VTBL_ENTRY _ZTV7S5056C3[];
extern Class_Descriptor cd_S5055C6_nt;
extern VTBL_ENTRY _ZTI10S5055C6_nt[];
extern  VTBL_ENTRY _ZTV10S5055C6_nt[];
extern Class_Descriptor cd_S5056C2;
extern VTBL_ENTRY _ZTI7S5056C2[];
extern  VTBL_ENTRY _ZTV7S5056C2[];
static Base_Class bases_S5056C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5056C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5055C6_nt,    ABISELECT(40,28), //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
    2, //immediately_derived
  0, 0},
  {&cd_S5056C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5056C1[];
extern void _ZN7S5056C1D1Ev();
extern void _ZN7S5056C1D0Ev();
extern void _ZN7S5056C32v4Ev();
extern void _ZN7S5056C32v5Ev();
extern void _ZN7S5056C32v6Ev();
extern void _ZN7S5056C22v7Ev();
extern void _ZN7S5056C22v8Ev();
extern void _ZN7S5056C12v1Ev();
extern void _ZN7S5056C12v2Ev();
extern void _ZN7S5056C12v3Ev();
extern void ABISELECT(_ZThn40_N7S5056C1D1Ev,_ZThn28_N7S5056C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S5056C1D0Ev,_ZThn28_N7S5056C1D0Ev)();
static  VTBL_ENTRY vtc_S5056C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5056C1[0]),
  (VTBL_ENTRY)&_ZN7S5056C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5056C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5056C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5056C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5056C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5056C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5056C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5056C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5056C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5056C12v3Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S5056C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S5056C1D1Ev,_ZThn28_N7S5056C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S5056C1D0Ev,_ZThn28_N7S5056C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S5056C1[];
extern  VTBL_ENTRY _ZTV7S5056C1[];
Class_Descriptor cd_S5056C1 = {  "S5056C1", // class name
  bases_S5056C1, 3,
  &(vtc_S5056C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S5056C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5056C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5057C3  {
  ::S16130C9_nt s5057c3f0;
  int s5057c3f1[2];
  char s5057c3f2;
  virtual  ~S5057C3(); // _ZN7S5057C3D1Ev
  virtual void  v4(); // _ZN7S5057C32v4Ev
  virtual void  v5(); // _ZN7S5057C32v5Ev
  virtual void  v6(); // _ZN7S5057C32v6Ev
  S5057C3(); // tgen
};
//SIG(-1 S5057C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5057C3 ::~S5057C3(){ note_dtor("S5057C3", this);}
void  S5057C3 ::v4(){vfunc_called(this, "_ZN7S5057C32v4Ev");}
void  S5057C3 ::v5(){vfunc_called(this, "_ZN7S5057C32v5Ev");}
void  S5057C3 ::v6(){vfunc_called(this, "_ZN7S5057C32v6Ev");}
S5057C3 ::S5057C3(){ note_ctor("S5057C3", this);} // tgen

static void Test_S5057C3()
{
  extern Class_Descriptor cd_S5057C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5057C3, buf);
    S5057C3 *dp, &lv = *(dp=new (buf) S5057C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5057C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5057C3)");
    check_field_offset(lv, s5057c3f0, ABISELECT(8,4), "S5057C3.s5057c3f0");
    check_field_offset(lv, s5057c3f1, ABISELECT(24,16), "S5057C3.s5057c3f1");
    check_field_offset(lv, s5057c3f2, ABISELECT(32,24), "S5057C3.s5057c3f2");
    test_class_info(&lv, &cd_S5057C3);
    dp->~S5057C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5057C3(Test_S5057C3, "S5057C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5057C3C1Ev();
extern void _ZN7S5057C3D1Ev();
Name_Map name_map_S5057C3[] = {
  NSPAIR(_ZN7S5057C3C1Ev),
  NSPAIR(_ZN7S5057C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5057C3[];
extern void _ZN7S5057C3D1Ev();
extern void _ZN7S5057C3D0Ev();
extern void _ZN7S5057C32v4Ev();
extern void _ZN7S5057C32v5Ev();
extern void _ZN7S5057C32v6Ev();
static  VTBL_ENTRY vtc_S5057C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5057C3[0]),
  (VTBL_ENTRY)&_ZN7S5057C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5057C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5057C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5057C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5057C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5057C3[];
extern  VTBL_ENTRY _ZTV7S5057C3[];
Class_Descriptor cd_S5057C3 = {  "S5057C3", // class name
  0,0,//no base classes
  &(vtc_S5057C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5057C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5057C3),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  S5057C2  : S5057C3 , S5055C6_nt {
  virtual  ~S5057C2(); // _ZN7S5057C2D1Ev
  virtual void  v7(); // _ZN7S5057C22v7Ev
  virtual void  v8(); // _ZN7S5057C22v8Ev
  S5057C2(); // tgen
};
//SIG(-1 S5057C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m Fp Fi[5]} vd v1 v2}


 S5057C2 ::~S5057C2(){ note_dtor("S5057C2", this);}
void  S5057C2 ::v7(){vfunc_called(this, "_ZN7S5057C22v7Ev");}
void  S5057C2 ::v8(){vfunc_called(this, "_ZN7S5057C22v8Ev");}
S5057C2 ::S5057C2(){ note_ctor("S5057C2", this);} // tgen

static void Test_S5057C2()
{
  extern Class_Descriptor cd_S5057C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S5057C2, buf);
    S5057C2 *dp, &lv = *(dp=new (buf) S5057C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S5057C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5057C2)");
    check_base_class_offset(lv, (S5057C3*), 0, "S5057C2");
    check_base_class_offset(lv, (S5055C6_nt*), ABISELECT(40,28), "S5057C2");
    test_class_info(&lv, &cd_S5057C2);
    dp->~S5057C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5057C2(Test_S5057C2, "S5057C2", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S5057C2C1Ev();
extern void _ZN7S5057C2D1Ev();
Name_Map name_map_S5057C2[] = {
  NSPAIR(_ZN7S5057C2C1Ev),
  NSPAIR(_ZN7S5057C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5057C3;
extern VTBL_ENTRY _ZTI7S5057C3[];
extern  VTBL_ENTRY _ZTV7S5057C3[];
extern Class_Descriptor cd_S5055C6_nt;
extern VTBL_ENTRY _ZTI10S5055C6_nt[];
extern  VTBL_ENTRY _ZTV10S5055C6_nt[];
static Base_Class bases_S5057C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5057C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5055C6_nt,    ABISELECT(40,28), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5057C2[];
extern void _ZN7S5057C2D1Ev();
extern void _ZN7S5057C2D0Ev();
extern void _ZN7S5057C32v4Ev();
extern void _ZN7S5057C32v5Ev();
extern void _ZN7S5057C32v6Ev();
extern void _ZN7S5057C22v7Ev();
extern void _ZN7S5057C22v8Ev();
extern void ABISELECT(_ZThn40_N7S5057C2D1Ev,_ZThn28_N7S5057C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S5057C2D0Ev,_ZThn28_N7S5057C2D0Ev)();
static  VTBL_ENTRY vtc_S5057C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5057C2[0]),
  (VTBL_ENTRY)&_ZN7S5057C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5057C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5057C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5057C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5057C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5057C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5057C22v8Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S5057C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S5057C2D1Ev,_ZThn28_N7S5057C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S5057C2D0Ev,_ZThn28_N7S5057C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S5057C2[];
extern  VTBL_ENTRY _ZTV7S5057C2[];
Class_Descriptor cd_S5057C2 = {  "S5057C2", // class name
  bases_S5057C2, 2,
  &(vtc_S5057C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S5057C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5057C2),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5057C1  : S5057C2 {
  void *s5057c1f0[2];
  virtual  ~S5057C1(); // _ZN7S5057C1D1Ev
  virtual void  v1(); // _ZN7S5057C12v1Ev
  virtual void  v2(); // _ZN7S5057C12v2Ev
  virtual void  v3(); // _ZN7S5057C12v3Ev
  S5057C1(); // tgen
};
//SIG(1 S5057C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m Fp Fi[5]} vd v7 v8} vd v1 v2 v3 Fp[2]}


 S5057C1 ::~S5057C1(){ note_dtor("S5057C1", this);}
void  S5057C1 ::v1(){vfunc_called(this, "_ZN7S5057C12v1Ev");}
void  S5057C1 ::v2(){vfunc_called(this, "_ZN7S5057C12v2Ev");}
void  S5057C1 ::v3(){vfunc_called(this, "_ZN7S5057C12v3Ev");}
S5057C1 ::S5057C1(){ note_ctor("S5057C1", this);} // tgen

static void Test_S5057C1()
{
  extern Class_Descriptor cd_S5057C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S5057C1, buf);
    S5057C1 *dp, &lv = *(dp=new (buf) S5057C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S5057C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5057C1)");
    check_base_class_offset(lv, (S5057C3*)(S5057C2*), 0, "S5057C1");
    check_base_class_offset(lv, (S5055C6_nt*)(S5057C2*), ABISELECT(40,28), "S5057C1");
    check_base_class_offset(lv, (S5057C2*), 0, "S5057C1");
    check_field_offset(lv, s5057c1f0, ABISELECT(80,56), "S5057C1.s5057c1f0");
    test_class_info(&lv, &cd_S5057C1);
    dp->~S5057C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5057C1(Test_S5057C1, "S5057C1", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S5057C1C1Ev();
extern void _ZN7S5057C1D1Ev();
Name_Map name_map_S5057C1[] = {
  NSPAIR(_ZN7S5057C1C1Ev),
  NSPAIR(_ZN7S5057C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5057C3;
extern VTBL_ENTRY _ZTI7S5057C3[];
extern  VTBL_ENTRY _ZTV7S5057C3[];
extern Class_Descriptor cd_S5055C6_nt;
extern VTBL_ENTRY _ZTI10S5055C6_nt[];
extern  VTBL_ENTRY _ZTV10S5055C6_nt[];
extern Class_Descriptor cd_S5057C2;
extern VTBL_ENTRY _ZTI7S5057C2[];
extern  VTBL_ENTRY _ZTV7S5057C2[];
static Base_Class bases_S5057C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5057C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5055C6_nt,    ABISELECT(40,28), //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
    2, //immediately_derived
  0, 0},
  {&cd_S5057C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5057C1[];
extern void _ZN7S5057C1D1Ev();
extern void _ZN7S5057C1D0Ev();
extern void _ZN7S5057C32v4Ev();
extern void _ZN7S5057C32v5Ev();
extern void _ZN7S5057C32v6Ev();
extern void _ZN7S5057C22v7Ev();
extern void _ZN7S5057C22v8Ev();
extern void _ZN7S5057C12v1Ev();
extern void _ZN7S5057C12v2Ev();
extern void _ZN7S5057C12v3Ev();
extern void ABISELECT(_ZThn40_N7S5057C1D1Ev,_ZThn28_N7S5057C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S5057C1D0Ev,_ZThn28_N7S5057C1D0Ev)();
static  VTBL_ENTRY vtc_S5057C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5057C1[0]),
  (VTBL_ENTRY)&_ZN7S5057C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5057C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5057C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5057C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5057C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5057C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5057C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5057C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5057C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5057C12v3Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S5057C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S5057C1D1Ev,_ZThn28_N7S5057C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S5057C1D0Ev,_ZThn28_N7S5057C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S5057C1[];
extern  VTBL_ENTRY _ZTV7S5057C1[];
Class_Descriptor cd_S5057C1 = {  "S5057C1", // class name
  bases_S5057C1, 3,
  &(vtc_S5057C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S5057C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5057C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11659C2_nt  {
  int s11659c2f0[6];
};
//SIG(-1 S11659C2_nt) C1{ Fi[6]}



//skip512 S11659C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11659C5_nt  {
  int s11659c5f0[4];
};
//SIG(-1 S11659C5_nt) C1{ Fi[4]}



//skip512 S11659C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11659C3  {
  int s11659c3f0;
  void *s11659c3f1;
  ::S857C15_nt s11659c3f2;
  void *s11659c3f3;
  int s11659c3f4;
  ::S11659C5_nt s11659c3f5;
  int s11659c3f6[4];
  short s11659c3f7[2];
};
//SIG(-1 S11659C3) C1{ Fi Fp FC2{ Fi[4]} Fp Fi FC3{ Fi[4]} Fi[4] Fs[2]}



static void Test_S11659C3()
{
  {
    init_simple_test("S11659C3");
    S11659C3 lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S11659C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11659C3)");
    check_field_offset(lv, s11659c3f0, 0, "S11659C3.s11659c3f0");
    check_field_offset(lv, s11659c3f1, ABISELECT(8,4), "S11659C3.s11659c3f1");
    check_field_offset(lv, s11659c3f2, ABISELECT(16,8), "S11659C3.s11659c3f2");
    check_field_offset(lv, s11659c3f3, ABISELECT(32,24), "S11659C3.s11659c3f3");
    check_field_offset(lv, s11659c3f4, ABISELECT(40,28), "S11659C3.s11659c3f4");
    check_field_offset(lv, s11659c3f5, ABISELECT(44,32), "S11659C3.s11659c3f5");
    check_field_offset(lv, s11659c3f6, ABISELECT(60,48), "S11659C3.s11659c3f6");
    check_field_offset(lv, s11659c3f7, ABISELECT(76,64), "S11659C3.s11659c3f7");
  }
}
static Arrange_To_Call_Me vS11659C3(Test_S11659C3, "S11659C3", ABISELECT(80,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11659C1  {
  ::S11659C2_nt s11659c1f0;
  void *s11659c1f1;
  int s11659c1f2;
  void *s11659c1f3;
  int s11659c1f4[3];
  ::S11659C3 s11659c1f5;
  int s11659c1f6[3];
  short s11659c1f7[2];
  void *s11659c1f8[2];
};
//SIG(1 S11659C1) C1{ FC2{ Fi[6]} Fp Fi Fp Fi[3] FC3{ Fi Fp FC4{ Fi[4]} Fp Fi FC5{ Fi[4]} Fi[4] Fs[2]} Fi[3] Fs[2] Fp[2]}



static void Test_S11659C1()
{
  {
    init_simple_test("S11659C1");
    S11659C1 lv;
    check2(sizeof(lv), ABISELECT(176,140), "sizeof(S11659C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11659C1)");
    check_field_offset(lv, s11659c1f0, 0, "S11659C1.s11659c1f0");
    check_field_offset(lv, s11659c1f1, 24, "S11659C1.s11659c1f1");
    check_field_offset(lv, s11659c1f2, ABISELECT(32,28), "S11659C1.s11659c1f2");
    check_field_offset(lv, s11659c1f3, ABISELECT(40,32), "S11659C1.s11659c1f3");
    check_field_offset(lv, s11659c1f4, ABISELECT(48,36), "S11659C1.s11659c1f4");
    check_field_offset(lv, s11659c1f5, ABISELECT(64,48), "S11659C1.s11659c1f5");
    check_field_offset(lv, s11659c1f6, ABISELECT(144,116), "S11659C1.s11659c1f6");
    check_field_offset(lv, s11659c1f7, ABISELECT(156,128), "S11659C1.s11659c1f7");
    check_field_offset(lv, s11659c1f8, ABISELECT(160,132), "S11659C1.s11659c1f8");
  }
}
static Arrange_To_Call_Me vS11659C1(Test_S11659C1, "S11659C1", ABISELECT(176,140));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9364C2  {
  ::S16130C9_nt s9364c2f0;
  int s9364c2f1[2];
  char s9364c2f2;
  virtual  ~S9364C2(); // _ZN7S9364C2D1Ev
  virtual void  v3(); // _ZN7S9364C22v3Ev
  virtual void  v4(); // _ZN7S9364C22v4Ev
  virtual void  v5(); // _ZN7S9364C22v5Ev
  S9364C2(); // tgen
};
//SIG(-1 S9364C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9364C2 ::~S9364C2(){ note_dtor("S9364C2", this);}
void  S9364C2 ::v3(){vfunc_called(this, "_ZN7S9364C22v3Ev");}
void  S9364C2 ::v4(){vfunc_called(this, "_ZN7S9364C22v4Ev");}
void  S9364C2 ::v5(){vfunc_called(this, "_ZN7S9364C22v5Ev");}
S9364C2 ::S9364C2(){ note_ctor("S9364C2", this);} // tgen

static void Test_S9364C2()
{
  extern Class_Descriptor cd_S9364C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9364C2, buf);
    S9364C2 *dp, &lv = *(dp=new (buf) S9364C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9364C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9364C2)");
    check_field_offset(lv, s9364c2f0, ABISELECT(8,4), "S9364C2.s9364c2f0");
    check_field_offset(lv, s9364c2f1, ABISELECT(24,16), "S9364C2.s9364c2f1");
    check_field_offset(lv, s9364c2f2, ABISELECT(32,24), "S9364C2.s9364c2f2");
    test_class_info(&lv, &cd_S9364C2);
    dp->~S9364C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9364C2(Test_S9364C2, "S9364C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9364C2C1Ev();
extern void _ZN7S9364C2D1Ev();
Name_Map name_map_S9364C2[] = {
  NSPAIR(_ZN7S9364C2C1Ev),
  NSPAIR(_ZN7S9364C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9364C2[];
extern void _ZN7S9364C2D1Ev();
extern void _ZN7S9364C2D0Ev();
extern void _ZN7S9364C22v3Ev();
extern void _ZN7S9364C22v4Ev();
extern void _ZN7S9364C22v5Ev();
static  VTBL_ENTRY vtc_S9364C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9364C2[0]),
  (VTBL_ENTRY)&_ZN7S9364C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9364C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9364C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9364C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9364C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9364C2[];
extern  VTBL_ENTRY _ZTV7S9364C2[];
Class_Descriptor cd_S9364C2 = {  "S9364C2", // class name
  0,0,//no base classes
  &(vtc_S9364C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9364C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9364C2),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  S9364C1  : S9364C2 {
  void *s9364c1f0;
  ::S16130C2_nt s9364c1f1;
  ::S857C14_nt s9364c1f2;
  int s9364c1f3;
  virtual  ~S9364C1(); // _ZN7S9364C1D1Ev
  virtual void  v1(); // _ZN7S9364C12v1Ev
  virtual void  v2(); // _ZN7S9364C12v2Ev
  S9364C1(); // tgen
};
//SIG(1 S9364C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp FC5{ m FL[4]} FC6{ m Fp FC7{ Fi[4]}} Fi}


 S9364C1 ::~S9364C1(){ note_dtor("S9364C1", this);}
void  S9364C1 ::v1(){vfunc_called(this, "_ZN7S9364C12v1Ev");}
void  S9364C1 ::v2(){vfunc_called(this, "_ZN7S9364C12v2Ev");}
S9364C1 ::S9364C1(){ note_ctor("S9364C1", this);} // tgen

static void Test_S9364C1()
{
  extern Class_Descriptor cd_S9364C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,23)];
    init_test(&cd_S9364C1, buf);
    S9364C1 *dp, &lv = *(dp=new (buf) S9364C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S9364C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9364C1)");
    check_base_class_offset(lv, (S9364C2*), 0, "S9364C1");
    check_field_offset(lv, s9364c1f0, ABISELECT(40,28), "S9364C1.s9364c1f0");
    check_field_offset(lv, s9364c1f1, ABISELECT(48,32), "S9364C1.s9364c1f1");
    check_field_offset(lv, s9364c1f2, ABISELECT(80,64), "S9364C1.s9364c1f2");
    check_field_offset(lv, s9364c1f3, ABISELECT(104,84), "S9364C1.s9364c1f3");
    test_class_info(&lv, &cd_S9364C1);
    dp->~S9364C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9364C1(Test_S9364C1, "S9364C1", ABISELECT(112,88));

#else // __cplusplus

extern void _ZN7S9364C1C1Ev();
extern void _ZN7S9364C1D1Ev();
Name_Map name_map_S9364C1[] = {
  NSPAIR(_ZN7S9364C1C1Ev),
  NSPAIR(_ZN7S9364C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9364C2;
extern VTBL_ENTRY _ZTI7S9364C2[];
extern  VTBL_ENTRY _ZTV7S9364C2[];
static Base_Class bases_S9364C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9364C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9364C1[];
extern void _ZN7S9364C1D1Ev();
extern void _ZN7S9364C1D0Ev();
extern void _ZN7S9364C22v3Ev();
extern void _ZN7S9364C22v4Ev();
extern void _ZN7S9364C22v5Ev();
extern void _ZN7S9364C12v1Ev();
extern void _ZN7S9364C12v2Ev();
static  VTBL_ENTRY vtc_S9364C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9364C1[0]),
  (VTBL_ENTRY)&_ZN7S9364C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9364C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9364C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9364C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9364C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9364C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9364C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9364C1[];
extern  VTBL_ENTRY _ZTV7S9364C1[];
Class_Descriptor cd_S9364C1 = {  "S9364C1", // class name
  bases_S9364C1, 1,
  &(vtc_S9364C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,88), // object size
  NSPAIRA(_ZTI7S9364C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9364C1),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  S9066C2  {
  virtual  ~S9066C2(); // _ZN7S9066C2D1Ev
  virtual void  v2(); // _ZN7S9066C22v2Ev
  S9066C2(); // tgen
};
//SIG(-1 S9066C2) C1{ vd v1}


 S9066C2 ::~S9066C2(){ note_dtor("S9066C2", this);}
void  S9066C2 ::v2(){vfunc_called(this, "_ZN7S9066C22v2Ev");}
S9066C2 ::S9066C2(){ note_ctor("S9066C2", this);} // tgen

static void Test_S9066C2()
{
  extern Class_Descriptor cd_S9066C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9066C2, buf);
    S9066C2 *dp, &lv = *(dp=new (buf) S9066C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9066C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9066C2)");
    test_class_info(&lv, &cd_S9066C2);
    dp->~S9066C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9066C2(Test_S9066C2, "S9066C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9066C2C1Ev();
extern void _ZN7S9066C2D1Ev();
Name_Map name_map_S9066C2[] = {
  NSPAIR(_ZN7S9066C2C1Ev),
  NSPAIR(_ZN7S9066C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9066C2[];
extern void _ZN7S9066C2D1Ev();
extern void _ZN7S9066C2D0Ev();
extern void _ZN7S9066C22v2Ev();
static  VTBL_ENTRY vtc_S9066C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9066C2[0]),
  (VTBL_ENTRY)&_ZN7S9066C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9066C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9066C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9066C2[];
extern  VTBL_ENTRY _ZTV7S9066C2[];
Class_Descriptor cd_S9066C2 = {  "S9066C2", // class name
  0,0,//no base classes
  &(vtc_S9066C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9066C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9066C2),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  S9066C3_nt  {
  void *s9066c3f0[2];
  void  mf9066c3(); // _ZN10S9066C3_nt8mf9066c3Ev
};
//SIG(-1 S9066C3_nt) C1{ m Fp[2]}


void  S9066C3_nt ::mf9066c3(){}

//skip512 S9066C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9066C1  : S9066C2 {
  ::S9066C3_nt s9066c1f0;
  char s9066c1f1;
  ::S857C9_nt s9066c1f2;
  ::S857C13_nt s9066c1f3;
  virtual  ~S9066C1(); // _ZN7S9066C1D1Ev
  virtual void  v1(); // _ZN7S9066C12v1Ev
  S9066C1(); // tgen
};
//SIG(1 S9066C1) C1{ BC2{ vd v2} vd v1 FC3{ m Fp[2]} Fc FC4{ m FC5{ FL[4]}} FC6{ m Fp FC4 FC7{ m Fp FC8{ Fi[4]}} Fi Fc}}


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

static void Test_S9066C1()
{
  extern Class_Descriptor cd_S9066C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,29)];
    init_test(&cd_S9066C1, buf);
    S9066C1 *dp, &lv = *(dp=new (buf) S9066C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,112), "sizeof(S9066C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9066C1)");
    check_base_class_offset(lv, (S9066C2*), 0, "S9066C1");
    check_field_offset(lv, s9066c1f0, ABISELECT(8,4), "S9066C1.s9066c1f0");
    check_field_offset(lv, s9066c1f1, ABISELECT(24,12), "S9066C1.s9066c1f1");
    check_field_offset(lv, s9066c1f2, ABISELECT(32,16), "S9066C1.s9066c1f2");
    check_field_offset(lv, s9066c1f3, ABISELECT(64,48), "S9066C1.s9066c1f3");
    test_class_info(&lv, &cd_S9066C1);
    dp->~S9066C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9066C1(Test_S9066C1, "S9066C1", ABISELECT(136,112));

#else // __cplusplus

extern void _ZN7S9066C1C1Ev();
extern void _ZN7S9066C1D1Ev();
Name_Map name_map_S9066C1[] = {
  NSPAIR(_ZN7S9066C1C1Ev),
  NSPAIR(_ZN7S9066C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9066C2;
extern VTBL_ENTRY _ZTI7S9066C2[];
extern  VTBL_ENTRY _ZTV7S9066C2[];
static Base_Class bases_S9066C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9066C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9066C1[];
extern void _ZN7S9066C1D1Ev();
extern void _ZN7S9066C1D0Ev();
extern void _ZN7S9066C22v2Ev();
extern void _ZN7S9066C12v1Ev();
static  VTBL_ENTRY vtc_S9066C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9066C1[0]),
  (VTBL_ENTRY)&_ZN7S9066C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9066C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9066C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9066C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9066C1[];
extern  VTBL_ENTRY _ZTV7S9066C1[];
Class_Descriptor cd_S9066C1 = {  "S9066C1", // class name
  bases_S9066C1, 1,
  &(vtc_S9066C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,112), // object size
  NSPAIRA(_ZTI7S9066C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9066C1),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  S9065C2  {
  virtual  ~S9065C2(); // _ZN7S9065C2D1Ev
  virtual void  v2(); // _ZN7S9065C22v2Ev
  S9065C2(); // tgen
};
//SIG(-1 S9065C2) C1{ vd v1}


 S9065C2 ::~S9065C2(){ note_dtor("S9065C2", this);}
void  S9065C2 ::v2(){vfunc_called(this, "_ZN7S9065C22v2Ev");}
S9065C2 ::S9065C2(){ note_ctor("S9065C2", this);} // tgen

static void Test_S9065C2()
{
  extern Class_Descriptor cd_S9065C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9065C2, buf);
    S9065C2 *dp, &lv = *(dp=new (buf) S9065C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9065C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9065C2)");
    test_class_info(&lv, &cd_S9065C2);
    dp->~S9065C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9065C2(Test_S9065C2, "S9065C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9065C2C1Ev();
extern void _ZN7S9065C2D1Ev();
Name_Map name_map_S9065C2[] = {
  NSPAIR(_ZN7S9065C2C1Ev),
  NSPAIR(_ZN7S9065C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9065C2[];
extern void _ZN7S9065C2D1Ev();
extern void _ZN7S9065C2D0Ev();
extern void _ZN7S9065C22v2Ev();
static  VTBL_ENTRY vtc_S9065C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9065C2[0]),
  (VTBL_ENTRY)&_ZN7S9065C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9065C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9065C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9065C2[];
extern  VTBL_ENTRY _ZTV7S9065C2[];
Class_Descriptor cd_S9065C2 = {  "S9065C2", // class name
  0,0,//no base classes
  &(vtc_S9065C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9065C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9065C2),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  S9065C1  : S9065C2 {
  ::S9066C3_nt s9065c1f0;
  char s9065c1f1;
  ::S856C9_nt s9065c1f2;
  ::S856C13_nt s9065c1f3;
  virtual  ~S9065C1(); // _ZN7S9065C1D1Ev
  virtual void  v1(); // _ZN7S9065C12v1Ev
  S9065C1(); // tgen
};
//SIG(1 S9065C1) C1{ BC2{ vd v2} vd v1 FC3{ m Fp[2]} Fc FC4{ m FC5{ Fl[4]}} FC6{ m Fp FC4 FC7{ m Fp FC8{ Fi[4]}} Fi Fc}}


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

static void Test_S9065C1()
{
  extern Class_Descriptor cd_S9065C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S9065C1, buf);
    S9065C1 *dp, &lv = *(dp=new (buf) S9065C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S9065C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9065C1)");
    check_base_class_offset(lv, (S9065C2*), 0, "S9065C1");
    check_field_offset(lv, s9065c1f0, ABISELECT(8,4), "S9065C1.s9065c1f0");
    check_field_offset(lv, s9065c1f1, ABISELECT(24,12), "S9065C1.s9065c1f1");
    check_field_offset(lv, s9065c1f2, ABISELECT(32,16), "S9065C1.s9065c1f2");
    check_field_offset(lv, s9065c1f3, ABISELECT(64,32), "S9065C1.s9065c1f3");
    test_class_info(&lv, &cd_S9065C1);
    dp->~S9065C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9065C1(Test_S9065C1, "S9065C1", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S9065C1C1Ev();
extern void _ZN7S9065C1D1Ev();
Name_Map name_map_S9065C1[] = {
  NSPAIR(_ZN7S9065C1C1Ev),
  NSPAIR(_ZN7S9065C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9065C2;
extern VTBL_ENTRY _ZTI7S9065C2[];
extern  VTBL_ENTRY _ZTV7S9065C2[];
static Base_Class bases_S9065C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9065C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9065C1[];
extern void _ZN7S9065C1D1Ev();
extern void _ZN7S9065C1D0Ev();
extern void _ZN7S9065C22v2Ev();
extern void _ZN7S9065C12v1Ev();
static  VTBL_ENTRY vtc_S9065C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9065C1[0]),
  (VTBL_ENTRY)&_ZN7S9065C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9065C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9065C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9065C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9065C1[];
extern  VTBL_ENTRY _ZTV7S9065C1[];
Class_Descriptor cd_S9065C1 = {  "S9065C1", // class name
  bases_S9065C1, 1,
  &(vtc_S9065C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S9065C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9065C1),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  S15071C1  {
  char s15071c1f0;
  ::S2632C18_nt s15071c1f1[2];
  void *s15071c1f2;
  int s15071c1f3[4];
  void *s15071c1f4[5];
  int s15071c1f5[5];
  void *s15071c1f6;
  ::S11659C2_nt s15071c1f7[15];
  void *s15071c1f8;
  ::S11659C5_nt s15071c1f9[8];
  void *s15071c1f10;
  int s15071c1f11;
  void *s15071c1f12[2];
  void  mf15071c1(); // _ZN8S15071C19mf15071c1Ev
};
//SIG(1 S15071C1) C1{ m Fc FC2{ m Fp}[2] Fp Fi[4] Fp[5] Fi[5] Fp FC3{ Fi[6]}[15] Fp FC4{ Fi[4]}[8] Fp Fi Fp[2]}


void  S15071C1 ::mf15071c1(){}

static void Test_S15071C1()
{
  {
    init_simple_test("S15071C1");
    S15071C1 lv;
    check2(sizeof(lv), ABISELECT(648,584), "sizeof(S15071C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15071C1)");
    check_field_offset(lv, s15071c1f0, 0, "S15071C1.s15071c1f0");
    check_field_offset(lv, s15071c1f1, ABISELECT(8,4), "S15071C1.s15071c1f1");
    check_field_offset(lv, s15071c1f2, ABISELECT(24,12), "S15071C1.s15071c1f2");
    check_field_offset(lv, s15071c1f3, ABISELECT(32,16), "S15071C1.s15071c1f3");
    check_field_offset(lv, s15071c1f4, ABISELECT(48,32), "S15071C1.s15071c1f4");
    check_field_offset(lv, s15071c1f5, ABISELECT(88,52), "S15071C1.s15071c1f5");
    check_field_offset(lv, s15071c1f6, ABISELECT(112,72), "S15071C1.s15071c1f6");
    check_field_offset(lv, s15071c1f7, ABISELECT(120,76), "S15071C1.s15071c1f7");
    check_field_offset(lv, s15071c1f8, ABISELECT(480,436), "S15071C1.s15071c1f8");
    check_field_offset(lv, s15071c1f9, ABISELECT(488,440), "S15071C1.s15071c1f9");
    check_field_offset(lv, s15071c1f10, ABISELECT(616,568), "S15071C1.s15071c1f10");
    check_field_offset(lv, s15071c1f11, ABISELECT(624,572), "S15071C1.s15071c1f11");
    check_field_offset(lv, s15071c1f12, ABISELECT(632,576), "S15071C1.s15071c1f12");
  }
}
static Arrange_To_Call_Me vS15071C1(Test_S15071C1, "S15071C1", ABISELECT(648,584));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9825C2  {
  virtual  ~S9825C2(); // _ZN7S9825C2D1Ev
  virtual void  v4(); // _ZN7S9825C22v4Ev
  virtual void  v5(); // _ZN7S9825C22v5Ev
  virtual void  v6(); // _ZN7S9825C22v6Ev
  S9825C2(); // tgen
};
//SIG(-1 S9825C2) C1{ vd v1 v2 v3}


 S9825C2 ::~S9825C2(){ note_dtor("S9825C2", this);}
void  S9825C2 ::v4(){vfunc_called(this, "_ZN7S9825C22v4Ev");}
void  S9825C2 ::v5(){vfunc_called(this, "_ZN7S9825C22v5Ev");}
void  S9825C2 ::v6(){vfunc_called(this, "_ZN7S9825C22v6Ev");}
S9825C2 ::S9825C2(){ note_ctor("S9825C2", this);} // tgen

static void Test_S9825C2()
{
  extern Class_Descriptor cd_S9825C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9825C2, buf);
    S9825C2 *dp, &lv = *(dp=new (buf) S9825C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9825C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9825C2)");
    test_class_info(&lv, &cd_S9825C2);
    dp->~S9825C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9825C2(Test_S9825C2, "S9825C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9825C2C1Ev();
extern void _ZN7S9825C2D1Ev();
Name_Map name_map_S9825C2[] = {
  NSPAIR(_ZN7S9825C2C1Ev),
  NSPAIR(_ZN7S9825C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9825C2[];
extern void _ZN7S9825C2D1Ev();
extern void _ZN7S9825C2D0Ev();
extern void _ZN7S9825C22v4Ev();
extern void _ZN7S9825C22v5Ev();
extern void _ZN7S9825C22v6Ev();
static  VTBL_ENTRY vtc_S9825C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9825C2[0]),
  (VTBL_ENTRY)&_ZN7S9825C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9825C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9825C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9825C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9825C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9825C2[];
extern  VTBL_ENTRY _ZTV7S9825C2[];
Class_Descriptor cd_S9825C2 = {  "S9825C2", // class name
  0,0,//no base classes
  &(vtc_S9825C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9825C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9825C2),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  S9825C1  : S9825C2 {
  ::S857C9_nt s9825c1f0;
  ::S857C13_nt s9825c1f1;
  virtual  ~S9825C1(); // _ZN7S9825C1D1Ev
  virtual void  v1(); // _ZN7S9825C12v1Ev
  virtual void  v2(); // _ZN7S9825C12v2Ev
  virtual void  v3(); // _ZN7S9825C12v3Ev
  S9825C1(); // tgen
};
//SIG(1 S9825C1) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m FC4{ FL[4]}} FC5{ m Fp FC3 FC6{ m Fp FC7{ Fi[4]}} Fi Fc}}


 S9825C1 ::~S9825C1(){ note_dtor("S9825C1", this);}
void  S9825C1 ::v1(){vfunc_called(this, "_ZN7S9825C12v1Ev");}
void  S9825C1 ::v2(){vfunc_called(this, "_ZN7S9825C12v2Ev");}
void  S9825C1 ::v3(){vfunc_called(this, "_ZN7S9825C12v3Ev");}
S9825C1 ::S9825C1(){ note_ctor("S9825C1", this);} // tgen

static void Test_S9825C1()
{
  extern Class_Descriptor cd_S9825C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,26)];
    init_test(&cd_S9825C1, buf);
    S9825C1 *dp, &lv = *(dp=new (buf) S9825C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,100), "sizeof(S9825C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9825C1)");
    check_base_class_offset(lv, (S9825C2*), 0, "S9825C1");
    check_field_offset(lv, s9825c1f0, ABISELECT(8,4), "S9825C1.s9825c1f0");
    check_field_offset(lv, s9825c1f1, ABISELECT(40,36), "S9825C1.s9825c1f1");
    test_class_info(&lv, &cd_S9825C1);
    dp->~S9825C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9825C1(Test_S9825C1, "S9825C1", ABISELECT(112,100));

#else // __cplusplus

extern void _ZN7S9825C1C1Ev();
extern void _ZN7S9825C1D1Ev();
Name_Map name_map_S9825C1[] = {
  NSPAIR(_ZN7S9825C1C1Ev),
  NSPAIR(_ZN7S9825C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9825C2;
extern VTBL_ENTRY _ZTI7S9825C2[];
extern  VTBL_ENTRY _ZTV7S9825C2[];
static Base_Class bases_S9825C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9825C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9825C1[];
extern void _ZN7S9825C1D1Ev();
extern void _ZN7S9825C1D0Ev();
extern void _ZN7S9825C22v4Ev();
extern void _ZN7S9825C22v5Ev();
extern void _ZN7S9825C22v6Ev();
extern void _ZN7S9825C12v1Ev();
extern void _ZN7S9825C12v2Ev();
extern void _ZN7S9825C12v3Ev();
static  VTBL_ENTRY vtc_S9825C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9825C1[0]),
  (VTBL_ENTRY)&_ZN7S9825C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9825C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9825C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9825C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9825C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9825C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9825C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9825C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9825C1[];
extern  VTBL_ENTRY _ZTV7S9825C1[];
Class_Descriptor cd_S9825C1 = {  "S9825C1", // class name
  bases_S9825C1, 1,
  &(vtc_S9825C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,100), // object size
  NSPAIRA(_ZTI7S9825C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9825C1),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  S9824C2  {
  virtual  ~S9824C2(); // _ZN7S9824C2D1Ev
  virtual void  v4(); // _ZN7S9824C22v4Ev
  virtual void  v5(); // _ZN7S9824C22v5Ev
  virtual void  v6(); // _ZN7S9824C22v6Ev
  S9824C2(); // tgen
};
//SIG(-1 S9824C2) C1{ vd v1 v2 v3}


 S9824C2 ::~S9824C2(){ note_dtor("S9824C2", this);}
void  S9824C2 ::v4(){vfunc_called(this, "_ZN7S9824C22v4Ev");}
void  S9824C2 ::v5(){vfunc_called(this, "_ZN7S9824C22v5Ev");}
void  S9824C2 ::v6(){vfunc_called(this, "_ZN7S9824C22v6Ev");}
S9824C2 ::S9824C2(){ note_ctor("S9824C2", this);} // tgen

static void Test_S9824C2()
{
  extern Class_Descriptor cd_S9824C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9824C2, buf);
    S9824C2 *dp, &lv = *(dp=new (buf) S9824C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9824C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9824C2)");
    test_class_info(&lv, &cd_S9824C2);
    dp->~S9824C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9824C2(Test_S9824C2, "S9824C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9824C2C1Ev();
extern void _ZN7S9824C2D1Ev();
Name_Map name_map_S9824C2[] = {
  NSPAIR(_ZN7S9824C2C1Ev),
  NSPAIR(_ZN7S9824C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9824C2[];
extern void _ZN7S9824C2D1Ev();
extern void _ZN7S9824C2D0Ev();
extern void _ZN7S9824C22v4Ev();
extern void _ZN7S9824C22v5Ev();
extern void _ZN7S9824C22v6Ev();
static  VTBL_ENTRY vtc_S9824C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9824C2[0]),
  (VTBL_ENTRY)&_ZN7S9824C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9824C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9824C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9824C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9824C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9824C2[];
extern  VTBL_ENTRY _ZTV7S9824C2[];
Class_Descriptor cd_S9824C2 = {  "S9824C2", // class name
  0,0,//no base classes
  &(vtc_S9824C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9824C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9824C2),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  S9824C1  : S9824C2 {
  ::S856C9_nt s9824c1f0;
  ::S856C13_nt s9824c1f1;
  virtual  ~S9824C1(); // _ZN7S9824C1D1Ev
  virtual void  v1(); // _ZN7S9824C12v1Ev
  virtual void  v2(); // _ZN7S9824C12v2Ev
  virtual void  v3(); // _ZN7S9824C12v3Ev
  S9824C1(); // tgen
};
//SIG(1 S9824C1) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m FC4{ Fl[4]}} FC5{ m Fp FC3 FC6{ m Fp FC7{ Fi[4]}} Fi Fc}}


 S9824C1 ::~S9824C1(){ note_dtor("S9824C1", this);}
void  S9824C1 ::v1(){vfunc_called(this, "_ZN7S9824C12v1Ev");}
void  S9824C1 ::v2(){vfunc_called(this, "_ZN7S9824C12v2Ev");}
void  S9824C1 ::v3(){vfunc_called(this, "_ZN7S9824C12v3Ev");}
S9824C1 ::S9824C1(){ note_ctor("S9824C1", this);} // tgen

static void Test_S9824C1()
{
  extern Class_Descriptor cd_S9824C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,18)];
    init_test(&cd_S9824C1, buf);
    S9824C1 *dp, &lv = *(dp=new (buf) S9824C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S9824C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9824C1)");
    check_base_class_offset(lv, (S9824C2*), 0, "S9824C1");
    check_field_offset(lv, s9824c1f0, ABISELECT(8,4), "S9824C1.s9824c1f0");
    check_field_offset(lv, s9824c1f1, ABISELECT(40,20), "S9824C1.s9824c1f1");
    test_class_info(&lv, &cd_S9824C1);
    dp->~S9824C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9824C1(Test_S9824C1, "S9824C1", ABISELECT(112,68));

#else // __cplusplus

extern void _ZN7S9824C1C1Ev();
extern void _ZN7S9824C1D1Ev();
Name_Map name_map_S9824C1[] = {
  NSPAIR(_ZN7S9824C1C1Ev),
  NSPAIR(_ZN7S9824C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9824C2;
extern VTBL_ENTRY _ZTI7S9824C2[];
extern  VTBL_ENTRY _ZTV7S9824C2[];
static Base_Class bases_S9824C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9824C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9824C1[];
extern void _ZN7S9824C1D1Ev();
extern void _ZN7S9824C1D0Ev();
extern void _ZN7S9824C22v4Ev();
extern void _ZN7S9824C22v5Ev();
extern void _ZN7S9824C22v6Ev();
extern void _ZN7S9824C12v1Ev();
extern void _ZN7S9824C12v2Ev();
extern void _ZN7S9824C12v3Ev();
static  VTBL_ENTRY vtc_S9824C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9824C1[0]),
  (VTBL_ENTRY)&_ZN7S9824C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9824C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9824C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9824C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9824C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9824C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9824C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9824C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9824C1[];
extern  VTBL_ENTRY _ZTV7S9824C1[];
Class_Descriptor cd_S9824C1 = {  "S9824C1", // class name
  bases_S9824C1, 1,
  &(vtc_S9824C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI7S9824C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9824C1),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  S19829C1  : virtual S16130C17_nt , S5408C7_nt {
  ::S20711C13 s19829c1f0;
  ~S19829C1(); // tgen
  S19829C1(); // tgen
};
//SIG(1 S19829C1) C1{ VBC2{ m} BC3{ m} FC4{ VBC3 VBC5{ BC6{ m FD} VBC3 VBC7{ m FC6[7]} vd} VBC8{ BC6 BC7 VBC3} BC6}}


S19829C1 ::~S19829C1(){ note_dtor("S19829C1", this);} // tgen
S19829C1 ::S19829C1(){ note_ctor("S19829C1", this);} // tgen

static void Test_S19829C1()
{
  extern Class_Descriptor cd_S19829C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,56)];
    init_test(&cd_S19829C1, buf);
    S19829C1 *dp, &lv = *(dp=new (buf) S19829C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,220), "sizeof(S19829C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19829C1)");
    check_base_class_offset(lv, (S16130C17_nt*), 0, "S19829C1");
    check_base_class_offset(lv, (S5408C7_nt*), 0, "S19829C1");
    check_field_offset(lv, s19829c1f0, ABISELECT(16,4), "S19829C1.s19829c1f0");
    test_class_info(&lv, &cd_S19829C1);
    dp->~S19829C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19829C1(Test_S19829C1, "S19829C1", ABISELECT(336,220));

#else // __cplusplus

extern void _ZN8S19829C1C1Ev();
extern void _ZN8S19829C1D1Ev();
Name_Map name_map_S19829C1[] = {
  NSPAIR(_ZN8S19829C1C1Ev),
  NSPAIR(_ZN8S19829C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
extern Class_Descriptor cd_S5408C7_nt;
extern VTBL_ENTRY _ZTI10S5408C7_nt[];
static Base_Class bases_S19829C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5408C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19829C1[];
static  VTBL_ENTRY vtc_S19829C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19829C1[0]),
};
extern VTBL_ENTRY _ZTV8S19829C1[];
static  VTT_ENTRY vtt_S19829C1[] = {
  {&(_ZTV8S19829C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19829C1[];
extern  VTBL_ENTRY _ZTV8S19829C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19829C1[];
Class_Descriptor cd_S19829C1 = {  "S19829C1", // class name
  bases_S19829C1, 2,
  &(vtc_S19829C1[0]), // expected_vtbl_contents
  &(vtt_S19829C1[0]), // expected_vtt_contents
  ABISELECT(336,220), // object size
  NSPAIRA(_ZTI8S19829C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19829C1),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19829C1),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9352C2  {
  ::S16130C9_nt s9352c2f0;
  int s9352c2f1[2];
  char s9352c2f2;
  virtual  ~S9352C2(); // _ZN7S9352C2D1Ev
  virtual void  v3(); // _ZN7S9352C22v3Ev
  virtual void  v4(); // _ZN7S9352C22v4Ev
  virtual void  v5(); // _ZN7S9352C22v5Ev
  S9352C2(); // tgen
};
//SIG(-1 S9352C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9352C2 ::~S9352C2(){ note_dtor("S9352C2", this);}
void  S9352C2 ::v3(){vfunc_called(this, "_ZN7S9352C22v3Ev");}
void  S9352C2 ::v4(){vfunc_called(this, "_ZN7S9352C22v4Ev");}
void  S9352C2 ::v5(){vfunc_called(this, "_ZN7S9352C22v5Ev");}
S9352C2 ::S9352C2(){ note_ctor("S9352C2", this);} // tgen

static void Test_S9352C2()
{
  extern Class_Descriptor cd_S9352C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9352C2, buf);
    S9352C2 *dp, &lv = *(dp=new (buf) S9352C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9352C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9352C2)");
    check_field_offset(lv, s9352c2f0, ABISELECT(8,4), "S9352C2.s9352c2f0");
    check_field_offset(lv, s9352c2f1, ABISELECT(24,16), "S9352C2.s9352c2f1");
    check_field_offset(lv, s9352c2f2, ABISELECT(32,24), "S9352C2.s9352c2f2");
    test_class_info(&lv, &cd_S9352C2);
    dp->~S9352C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9352C2(Test_S9352C2, "S9352C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9352C2C1Ev();
extern void _ZN7S9352C2D1Ev();
Name_Map name_map_S9352C2[] = {
  NSPAIR(_ZN7S9352C2C1Ev),
  NSPAIR(_ZN7S9352C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9352C2[];
extern void _ZN7S9352C2D1Ev();
extern void _ZN7S9352C2D0Ev();
extern void _ZN7S9352C22v3Ev();
extern void _ZN7S9352C22v4Ev();
extern void _ZN7S9352C22v5Ev();
static  VTBL_ENTRY vtc_S9352C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9352C2[0]),
  (VTBL_ENTRY)&_ZN7S9352C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9352C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9352C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9352C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9352C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9352C2[];
extern  VTBL_ENTRY _ZTV7S9352C2[];
Class_Descriptor cd_S9352C2 = {  "S9352C2", // class name
  0,0,//no base classes
  &(vtc_S9352C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9352C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9352C2),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  S9352C1  : S9352C2 {
  void *s9352c1f0;
  ::S16130C9_nt s9352c1f1;
  ::S16130C9_nt s9352c1f2;
  ::S9066C3_nt s9352c1f3;
  virtual  ~S9352C1(); // _ZN7S9352C1D1Ev
  virtual void  v1(); // _ZN7S9352C12v1Ev
  virtual void  v2(); // _ZN7S9352C12v2Ev
  S9352C1(); // tgen
};
//SIG(1 S9352C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp FC3 FC3 FC5{ m Fp[2]}}


 S9352C1 ::~S9352C1(){ note_dtor("S9352C1", this);}
void  S9352C1 ::v1(){vfunc_called(this, "_ZN7S9352C12v1Ev");}
void  S9352C1 ::v2(){vfunc_called(this, "_ZN7S9352C12v2Ev");}
S9352C1 ::S9352C1(){ note_ctor("S9352C1", this);} // tgen

static void Test_S9352C1()
{
  extern Class_Descriptor cd_S9352C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S9352C1, buf);
    S9352C1 *dp, &lv = *(dp=new (buf) S9352C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S9352C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9352C1)");
    check_base_class_offset(lv, (S9352C2*), 0, "S9352C1");
    check_field_offset(lv, s9352c1f0, ABISELECT(40,28), "S9352C1.s9352c1f0");
    check_field_offset(lv, s9352c1f1, ABISELECT(48,32), "S9352C1.s9352c1f1");
    check_field_offset(lv, s9352c1f2, ABISELECT(64,44), "S9352C1.s9352c1f2");
    check_field_offset(lv, s9352c1f3, ABISELECT(80,56), "S9352C1.s9352c1f3");
    test_class_info(&lv, &cd_S9352C1);
    dp->~S9352C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9352C1(Test_S9352C1, "S9352C1", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S9352C1C1Ev();
extern void _ZN7S9352C1D1Ev();
Name_Map name_map_S9352C1[] = {
  NSPAIR(_ZN7S9352C1C1Ev),
  NSPAIR(_ZN7S9352C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9352C2;
extern VTBL_ENTRY _ZTI7S9352C2[];
extern  VTBL_ENTRY _ZTV7S9352C2[];
static Base_Class bases_S9352C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9352C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9352C1[];
extern void _ZN7S9352C1D1Ev();
extern void _ZN7S9352C1D0Ev();
extern void _ZN7S9352C22v3Ev();
extern void _ZN7S9352C22v4Ev();
extern void _ZN7S9352C22v5Ev();
extern void _ZN7S9352C12v1Ev();
extern void _ZN7S9352C12v2Ev();
static  VTBL_ENTRY vtc_S9352C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9352C1[0]),
  (VTBL_ENTRY)&_ZN7S9352C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9352C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9352C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9352C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9352C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9352C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9352C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9352C1[];
extern  VTBL_ENTRY _ZTV7S9352C1[];
Class_Descriptor cd_S9352C1 = {  "S9352C1", // class name
  bases_S9352C1, 1,
  &(vtc_S9352C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S9352C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9352C1),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  S15132C3_nt  {
  char s15132c3f0;
  char s15132c3f1[15];
  void  mf15132c3(); // _ZN11S15132C3_nt9mf15132c3Ev
};
//SIG(-1 S15132C3_nt) C1{ m Fc[16]}


void  S15132C3_nt ::mf15132c3(){}

//skip512 S15132C3_nt

#else // __cplusplus

Class_Descriptor cd_S15132C3_nt = {  "S15132C3_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  S15132C2_nt  : S15132C3_nt {
};
//SIG(-1 S15132C2_nt) C1{ BC2{ m Fc[16]}}



//skip512 S15132C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S15132C3_nt;
static Base_Class bases_S15132C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15132C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S15132C1  {
  char s15132c1f0;
  void *s15132c1f1;
  int s15132c1f2[3];
  ::S15132C2_nt s15132c1f3;
  int s15132c1f4[12];
  void *s15132c1f5;
  int s15132c1f6;
  void *s15132c1f7[24];
  int s15132c1f8[4];
  void *s15132c1f9[4];
  int s15132c1f10[2];
  void  mf15132c1(); // _ZN8S15132C19mf15132c1Ev
};
//SIG(1 S15132C1) C1{ m Fc Fp Fi[3] FC2{ BC3{ m Fc[16]}} Fi[12] Fp Fi Fp[24] Fi[4] Fp[4] Fi[2]}


void  S15132C1 ::mf15132c1(){}

static void Test_S15132C1()
{
  {
    init_simple_test("S15132C1");
    S15132C1 lv;
    check2(sizeof(lv), ABISELECT(360,228), "sizeof(S15132C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15132C1)");
    check_field_offset(lv, s15132c1f0, 0, "S15132C1.s15132c1f0");
    check_field_offset(lv, s15132c1f1, ABISELECT(8,4), "S15132C1.s15132c1f1");
    check_field_offset(lv, s15132c1f2, ABISELECT(16,8), "S15132C1.s15132c1f2");
    check_field_offset(lv, s15132c1f3, ABISELECT(28,20), "S15132C1.s15132c1f3");
    check_field_offset(lv, s15132c1f4, ABISELECT(44,36), "S15132C1.s15132c1f4");
    check_field_offset(lv, s15132c1f5, ABISELECT(96,84), "S15132C1.s15132c1f5");
    check_field_offset(lv, s15132c1f6, ABISELECT(104,88), "S15132C1.s15132c1f6");
    check_field_offset(lv, s15132c1f7, ABISELECT(112,92), "S15132C1.s15132c1f7");
    check_field_offset(lv, s15132c1f8, ABISELECT(304,188), "S15132C1.s15132c1f8");
    check_field_offset(lv, s15132c1f9, ABISELECT(320,204), "S15132C1.s15132c1f9");
    check_field_offset(lv, s15132c1f10, ABISELECT(352,220), "S15132C1.s15132c1f10");
  }
}
static Arrange_To_Call_Me vS15132C1(Test_S15132C1, "S15132C1", ABISELECT(360,228));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8330C3_nt  {
  int s8330c3f0;
  void *s8330c3f1;
};
//SIG(-1 S8330C3_nt) C1{ Fi Fp}



//skip512 S8330C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8330C1  : S817C5_nt {
  int s8330c1f0;
  __tsi64 s8330c1f1;
  void *s8330c1f2[2];
  int s8330c1f3[2];
  ::S8330C3_nt s8330c1f4;
  int s8330c1f5;
  char s8330c1f6;
  int s8330c1f7;
  void *s8330c1f8;
  int s8330c1f9[3];
  void *s8330c1f10;
  char s8330c1f11[64];
  int s8330c1f12[4];
  virtual  ~S8330C1(); // _ZN7S8330C1D1Ev
  S8330C1(); // tgen
};
//SIG(1 S8330C1) C1{ BC2{ vd m} vd Fi FL Fp[2] Fi[2] FC3{ Fi Fp} Fi Fc Fi Fp Fi[3] Fp Fc[64] Fi[4]}


 S8330C1 ::~S8330C1(){ note_dtor("S8330C1", this);}
S8330C1 ::S8330C1(){ note_ctor("S8330C1", this);} // tgen

static void Test_S8330C1()
{
  extern Class_Descriptor cd_S8330C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,39)];
    init_test(&cd_S8330C1, buf);
    S8330C1 *dp, &lv = *(dp=new (buf) S8330C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,152), "sizeof(S8330C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8330C1)");
    check_base_class_offset(lv, (S817C5_nt*), 0, "S8330C1");
    check_field_offset(lv, s8330c1f0, ABISELECT(8,4), "S8330C1.s8330c1f0");
    check_field_offset(lv, s8330c1f1, ABISELECT(16,8), "S8330C1.s8330c1f1");
    check_field_offset(lv, s8330c1f2, ABISELECT(24,16), "S8330C1.s8330c1f2");
    check_field_offset(lv, s8330c1f3, ABISELECT(40,24), "S8330C1.s8330c1f3");
    check_field_offset(lv, s8330c1f4, ABISELECT(48,32), "S8330C1.s8330c1f4");
    check_field_offset(lv, s8330c1f5, ABISELECT(64,40), "S8330C1.s8330c1f5");
    check_field_offset(lv, s8330c1f6, ABISELECT(68,44), "S8330C1.s8330c1f6");
    check_field_offset(lv, s8330c1f7, ABISELECT(72,48), "S8330C1.s8330c1f7");
    check_field_offset(lv, s8330c1f8, ABISELECT(80,52), "S8330C1.s8330c1f8");
    check_field_offset(lv, s8330c1f9, ABISELECT(88,56), "S8330C1.s8330c1f9");
    check_field_offset(lv, s8330c1f10, ABISELECT(104,68), "S8330C1.s8330c1f10");
    check_field_offset(lv, s8330c1f11, ABISELECT(112,72), "S8330C1.s8330c1f11");
    check_field_offset(lv, s8330c1f12, ABISELECT(176,136), "S8330C1.s8330c1f12");
    test_class_info(&lv, &cd_S8330C1);
    dp->~S8330C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8330C1(Test_S8330C1, "S8330C1", ABISELECT(192,152));

#else // __cplusplus

extern void _ZN7S8330C1C1Ev();
extern void _ZN7S8330C1D1Ev();
Name_Map name_map_S8330C1[] = {
  NSPAIR(_ZN7S8330C1C1Ev),
  NSPAIR(_ZN7S8330C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S817C5_nt;
extern VTBL_ENTRY _ZTI9S817C5_nt[];
extern  VTBL_ENTRY _ZTV9S817C5_nt[];
static Base_Class bases_S8330C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S817C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8330C1[];
extern void _ZN7S8330C1D1Ev();
extern void _ZN7S8330C1D0Ev();
static  VTBL_ENTRY vtc_S8330C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8330C1[0]),
  (VTBL_ENTRY)&_ZN7S8330C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8330C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8330C1[];
extern  VTBL_ENTRY _ZTV7S8330C1[];
Class_Descriptor cd_S8330C1 = {  "S8330C1", // class name
  bases_S8330C1, 1,
  &(vtc_S8330C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,152), // object size
  NSPAIRA(_ZTI7S8330C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8330C1),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  S15203C3_nt  {
  void *s15203c3f0[2];
  void  mf15203c3(); // _ZN11S15203C3_nt9mf15203c3Ev
};
//SIG(-1 S15203C3_nt) C1{ m Fp[2]}


void  S15203C3_nt ::mf15203c3(){}

//skip512 S15203C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15203C1  {
  char s15203c1f0[2];
  void *s15203c1f1[2];
  ::S9066C3_nt s15203c1f2;
  ::S15203C3_nt s15203c1f3;
  int s15203c1f4[2];
  void *s15203c1f5;
  int s15203c1f6[2];
  ::S16130C9_nt s15203c1f7;
  void  mf15203c1(); // _ZN8S15203C19mf15203c1Ev
};
//SIG(1 S15203C1) C1{ m Fc[2] Fp[2] FC2{ m Fp[2]} FC3{ m Fp[2]} Fi[2] Fp Fi[2] FC4{ m Fp Fi FC5{ m}}}


void  S15203C1 ::mf15203c1(){}

static void Test_S15203C1()
{
  {
    init_simple_test("S15203C1");
    S15203C1 lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S15203C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15203C1)");
    check_field_offset(lv, s15203c1f0, 0, "S15203C1.s15203c1f0");
    check_field_offset(lv, s15203c1f1, ABISELECT(8,4), "S15203C1.s15203c1f1");
    check_field_offset(lv, s15203c1f2, ABISELECT(24,12), "S15203C1.s15203c1f2");
    check_field_offset(lv, s15203c1f3, ABISELECT(40,20), "S15203C1.s15203c1f3");
    check_field_offset(lv, s15203c1f4, ABISELECT(56,28), "S15203C1.s15203c1f4");
    check_field_offset(lv, s15203c1f5, ABISELECT(64,36), "S15203C1.s15203c1f5");
    check_field_offset(lv, s15203c1f6, ABISELECT(72,40), "S15203C1.s15203c1f6");
    check_field_offset(lv, s15203c1f7, ABISELECT(80,48), "S15203C1.s15203c1f7");
  }
}
static Arrange_To_Call_Me vS15203C1(Test_S15203C1, "S15203C1", ABISELECT(96,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17262C6_nt  {
  void *s17262c6f0[2];
  int s17262c6f1;
  void  mf17262c6(); // _ZN11S17262C6_nt9mf17262c6Ev
  virtual  ~S17262C6_nt(); // _ZN11S17262C6_ntD1Ev
  S17262C6_nt(); // tgen
};
//SIG(-1 S17262C6_nt) C1{ vd m Fp[2] Fi}


void  S17262C6_nt ::mf17262c6(){}
 S17262C6_nt ::~S17262C6_nt(){ note_dtor("S17262C6_nt", this);}
S17262C6_nt ::S17262C6_nt(){ note_ctor("S17262C6_nt", this);} // tgen

//skip512 S17262C6_nt

#else // __cplusplus

extern void _ZN11S17262C6_ntC1Ev();
extern void _ZN11S17262C6_ntD1Ev();
Name_Map name_map_S17262C6_nt[] = {
  NSPAIR(_ZN11S17262C6_ntC1Ev),
  NSPAIR(_ZN11S17262C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S17262C6_nt[];
extern void _ZN11S17262C6_ntD1Ev();
extern void _ZN11S17262C6_ntD0Ev();
static  VTBL_ENTRY vtc_S17262C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S17262C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S17262C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S17262C6_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S17262C6_nt[];
VTBL_ENTRY *P__ZTI11S17262C6_nt = _ZTI11S17262C6_nt; 
extern  VTBL_ENTRY _ZTV11S17262C6_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17262C1  {
  int s17262c1f0[5];
  ::S857C9_nt s17262c1f1;
  ::S857C14_nt s17262c1f2;
  ::S17262C6_nt s17262c1f3;
  void *s17262c1f4;
  char s17262c1f5[3];
  void  mf17262c1(); // _ZN8S17262C19mf17262c1Ev
};
//SIG(1 S17262C1) C1{ m Fi[5] FC2{ m FC3{ FL[4]}} FC4{ m Fp FC5{ Fi[4]}} FC6{ vd m Fp[2] Fi} Fp Fc[3]}


void  S17262C1 ::mf17262c1(){}

static void Test_S17262C1()
{
  {
    init_simple_test("S17262C1");
    S17262C1 lv;
    check2(sizeof(lv), ABISELECT(128,96), "sizeof(S17262C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17262C1)");
    check_field_offset(lv, s17262c1f0, 0, "S17262C1.s17262c1f0");
    check_field_offset(lv, s17262c1f1, ABISELECT(24,20), "S17262C1.s17262c1f1");
    check_field_offset(lv, s17262c1f2, ABISELECT(56,52), "S17262C1.s17262c1f2");
    check_field_offset(lv, s17262c1f3, ABISELECT(80,72), "S17262C1.s17262c1f3");
    check_field_offset(lv, s17262c1f4, ABISELECT(112,88), "S17262C1.s17262c1f4");
    check_field_offset(lv, s17262c1f5, ABISELECT(120,92), "S17262C1.s17262c1f5");
  }
}
static Arrange_To_Call_Me vS17262C1(Test_S17262C1, "S17262C1", ABISELECT(128,96));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17261C1  {
  int s17261c1f0[5];
  ::S856C9_nt s17261c1f1;
  ::S857C14_nt s17261c1f2;
  ::S17262C6_nt s17261c1f3;
  void *s17261c1f4;
  char s17261c1f5[3];
  void  mf17261c1(); // _ZN8S17261C19mf17261c1Ev
};
//SIG(1 S17261C1) C1{ m Fi[5] FC2{ m FC3{ Fl[4]}} FC4{ m Fp FC5{ Fi[4]}} FC6{ vd m Fp[2] Fi} Fp Fc[3]}


void  S17261C1 ::mf17261c1(){}

static void Test_S17261C1()
{
  {
    init_simple_test("S17261C1");
    S17261C1 lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S17261C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17261C1)");
    check_field_offset(lv, s17261c1f0, 0, "S17261C1.s17261c1f0");
    check_field_offset(lv, s17261c1f1, ABISELECT(24,20), "S17261C1.s17261c1f1");
    check_field_offset(lv, s17261c1f2, ABISELECT(56,36), "S17261C1.s17261c1f2");
    check_field_offset(lv, s17261c1f3, ABISELECT(80,56), "S17261C1.s17261c1f3");
    check_field_offset(lv, s17261c1f4, ABISELECT(112,72), "S17261C1.s17261c1f4");
    check_field_offset(lv, s17261c1f5, ABISELECT(120,76), "S17261C1.s17261c1f5");
  }
}
static Arrange_To_Call_Me vS17261C1(Test_S17261C1, "S17261C1", ABISELECT(128,80));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9351C2  {
  ::S16130C9_nt s9351c2f0;
  int s9351c2f1[2];
  char s9351c2f2;
  virtual  ~S9351C2(); // _ZN7S9351C2D1Ev
  virtual void  v3(); // _ZN7S9351C22v3Ev
  virtual void  v4(); // _ZN7S9351C22v4Ev
  virtual void  v5(); // _ZN7S9351C22v5Ev
  S9351C2(); // tgen
};
//SIG(-1 S9351C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9351C2 ::~S9351C2(){ note_dtor("S9351C2", this);}
void  S9351C2 ::v3(){vfunc_called(this, "_ZN7S9351C22v3Ev");}
void  S9351C2 ::v4(){vfunc_called(this, "_ZN7S9351C22v4Ev");}
void  S9351C2 ::v5(){vfunc_called(this, "_ZN7S9351C22v5Ev");}
S9351C2 ::S9351C2(){ note_ctor("S9351C2", this);} // tgen

static void Test_S9351C2()
{
  extern Class_Descriptor cd_S9351C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9351C2, buf);
    S9351C2 *dp, &lv = *(dp=new (buf) S9351C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9351C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9351C2)");
    check_field_offset(lv, s9351c2f0, ABISELECT(8,4), "S9351C2.s9351c2f0");
    check_field_offset(lv, s9351c2f1, ABISELECT(24,16), "S9351C2.s9351c2f1");
    check_field_offset(lv, s9351c2f2, ABISELECT(32,24), "S9351C2.s9351c2f2");
    test_class_info(&lv, &cd_S9351C2);
    dp->~S9351C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9351C2(Test_S9351C2, "S9351C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9351C2C1Ev();
extern void _ZN7S9351C2D1Ev();
Name_Map name_map_S9351C2[] = {
  NSPAIR(_ZN7S9351C2C1Ev),
  NSPAIR(_ZN7S9351C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9351C2[];
extern void _ZN7S9351C2D1Ev();
extern void _ZN7S9351C2D0Ev();
extern void _ZN7S9351C22v3Ev();
extern void _ZN7S9351C22v4Ev();
extern void _ZN7S9351C22v5Ev();
static  VTBL_ENTRY vtc_S9351C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9351C2[0]),
  (VTBL_ENTRY)&_ZN7S9351C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9351C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9351C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9351C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9351C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9351C2[];
extern  VTBL_ENTRY _ZTV7S9351C2[];
Class_Descriptor cd_S9351C2 = {  "S9351C2", // class name
  0,0,//no base classes
  &(vtc_S9351C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9351C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9351C2),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  S9351C1  : S9351C2 {
  void *s9351c1f0;
  ::S16130C9_nt s9351c1f1;
  char s9351c1f2;
  void *s9351c1f3;
  int s9351c1f4;
  virtual  ~S9351C1(); // _ZN7S9351C1D1Ev
  virtual void  v1(); // _ZN7S9351C12v1Ev
  virtual void  v2(); // _ZN7S9351C12v2Ev
  S9351C1(); // tgen
};
//SIG(1 S9351C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp FC3 Fc Fp Fi}


 S9351C1 ::~S9351C1(){ note_dtor("S9351C1", this);}
void  S9351C1 ::v1(){vfunc_called(this, "_ZN7S9351C12v1Ev");}
void  S9351C1 ::v2(){vfunc_called(this, "_ZN7S9351C12v2Ev");}
S9351C1 ::S9351C1(){ note_ctor("S9351C1", this);} // tgen

static void Test_S9351C1()
{
  extern Class_Descriptor cd_S9351C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S9351C1, buf);
    S9351C1 *dp, &lv = *(dp=new (buf) S9351C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S9351C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9351C1)");
    check_base_class_offset(lv, (S9351C2*), 0, "S9351C1");
    check_field_offset(lv, s9351c1f0, ABISELECT(40,28), "S9351C1.s9351c1f0");
    check_field_offset(lv, s9351c1f1, ABISELECT(48,32), "S9351C1.s9351c1f1");
    check_field_offset(lv, s9351c1f2, ABISELECT(64,44), "S9351C1.s9351c1f2");
    check_field_offset(lv, s9351c1f3, ABISELECT(72,48), "S9351C1.s9351c1f3");
    check_field_offset(lv, s9351c1f4, ABISELECT(80,52), "S9351C1.s9351c1f4");
    test_class_info(&lv, &cd_S9351C1);
    dp->~S9351C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9351C1(Test_S9351C1, "S9351C1", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S9351C1C1Ev();
extern void _ZN7S9351C1D1Ev();
Name_Map name_map_S9351C1[] = {
  NSPAIR(_ZN7S9351C1C1Ev),
  NSPAIR(_ZN7S9351C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9351C2;
extern VTBL_ENTRY _ZTI7S9351C2[];
extern  VTBL_ENTRY _ZTV7S9351C2[];
static Base_Class bases_S9351C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9351C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9351C1[];
extern void _ZN7S9351C1D1Ev();
extern void _ZN7S9351C1D0Ev();
extern void _ZN7S9351C22v3Ev();
extern void _ZN7S9351C22v4Ev();
extern void _ZN7S9351C22v5Ev();
extern void _ZN7S9351C12v1Ev();
extern void _ZN7S9351C12v2Ev();
static  VTBL_ENTRY vtc_S9351C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9351C1[0]),
  (VTBL_ENTRY)&_ZN7S9351C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9351C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9351C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9351C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9351C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9351C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9351C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9351C1[];
extern  VTBL_ENTRY _ZTV7S9351C1[];
Class_Descriptor cd_S9351C1 = {  "S9351C1", // class name
  bases_S9351C1, 1,
  &(vtc_S9351C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S9351C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9351C1),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  S9709C2  {
  ::S16130C9_nt s9709c2f0;
  int s9709c2f1[2];
  char s9709c2f2;
  virtual  ~S9709C2(); // _ZN7S9709C2D1Ev
  virtual void  v4(); // _ZN7S9709C22v4Ev
  virtual void  v5(); // _ZN7S9709C22v5Ev
  virtual void  v6(); // _ZN7S9709C22v6Ev
  S9709C2(); // tgen
};
//SIG(-1 S9709C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9709C2 ::~S9709C2(){ note_dtor("S9709C2", this);}
void  S9709C2 ::v4(){vfunc_called(this, "_ZN7S9709C22v4Ev");}
void  S9709C2 ::v5(){vfunc_called(this, "_ZN7S9709C22v5Ev");}
void  S9709C2 ::v6(){vfunc_called(this, "_ZN7S9709C22v6Ev");}
S9709C2 ::S9709C2(){ note_ctor("S9709C2", this);} // tgen

static void Test_S9709C2()
{
  extern Class_Descriptor cd_S9709C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9709C2, buf);
    S9709C2 *dp, &lv = *(dp=new (buf) S9709C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9709C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9709C2)");
    check_field_offset(lv, s9709c2f0, ABISELECT(8,4), "S9709C2.s9709c2f0");
    check_field_offset(lv, s9709c2f1, ABISELECT(24,16), "S9709C2.s9709c2f1");
    check_field_offset(lv, s9709c2f2, ABISELECT(32,24), "S9709C2.s9709c2f2");
    test_class_info(&lv, &cd_S9709C2);
    dp->~S9709C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9709C2(Test_S9709C2, "S9709C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9709C2C1Ev();
extern void _ZN7S9709C2D1Ev();
Name_Map name_map_S9709C2[] = {
  NSPAIR(_ZN7S9709C2C1Ev),
  NSPAIR(_ZN7S9709C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9709C2[];
extern void _ZN7S9709C2D1Ev();
extern void _ZN7S9709C2D0Ev();
extern void _ZN7S9709C22v4Ev();
extern void _ZN7S9709C22v5Ev();
extern void _ZN7S9709C22v6Ev();
static  VTBL_ENTRY vtc_S9709C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9709C2[0]),
  (VTBL_ENTRY)&_ZN7S9709C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9709C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9709C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9709C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9709C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9709C2[];
extern  VTBL_ENTRY _ZTV7S9709C2[];
Class_Descriptor cd_S9709C2 = {  "S9709C2", // class name
  0,0,//no base classes
  &(vtc_S9709C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9709C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9709C2),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  S9709C1  : S9709C2 {
  void *s9709c1f0[2];
  char s9709c1f1[2];
  virtual  ~S9709C1(); // _ZN7S9709C1D1Ev
  virtual void  v1(); // _ZN7S9709C12v1Ev
  virtual void  v2(); // _ZN7S9709C12v2Ev
  virtual void  v3(); // _ZN7S9709C12v3Ev
  S9709C1(); // tgen
};
//SIG(1 S9709C1) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 Fp[2] Fc[2]}


 S9709C1 ::~S9709C1(){ note_dtor("S9709C1", this);}
void  S9709C1 ::v1(){vfunc_called(this, "_ZN7S9709C12v1Ev");}
void  S9709C1 ::v2(){vfunc_called(this, "_ZN7S9709C12v2Ev");}
void  S9709C1 ::v3(){vfunc_called(this, "_ZN7S9709C12v3Ev");}
S9709C1 ::S9709C1(){ note_ctor("S9709C1", this);} // tgen

static void Test_S9709C1()
{
  extern Class_Descriptor cd_S9709C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S9709C1, buf);
    S9709C1 *dp, &lv = *(dp=new (buf) S9709C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S9709C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9709C1)");
    check_base_class_offset(lv, (S9709C2*), 0, "S9709C1");
    check_field_offset(lv, s9709c1f0, ABISELECT(40,28), "S9709C1.s9709c1f0");
    check_field_offset(lv, s9709c1f1, ABISELECT(56,36), "S9709C1.s9709c1f1");
    test_class_info(&lv, &cd_S9709C1);
    dp->~S9709C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9709C1(Test_S9709C1, "S9709C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S9709C1C1Ev();
extern void _ZN7S9709C1D1Ev();
Name_Map name_map_S9709C1[] = {
  NSPAIR(_ZN7S9709C1C1Ev),
  NSPAIR(_ZN7S9709C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9709C2;
extern VTBL_ENTRY _ZTI7S9709C2[];
extern  VTBL_ENTRY _ZTV7S9709C2[];
static Base_Class bases_S9709C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9709C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9709C1[];
extern void _ZN7S9709C1D1Ev();
extern void _ZN7S9709C1D0Ev();
extern void _ZN7S9709C22v4Ev();
extern void _ZN7S9709C22v5Ev();
extern void _ZN7S9709C22v6Ev();
extern void _ZN7S9709C12v1Ev();
extern void _ZN7S9709C12v2Ev();
extern void _ZN7S9709C12v3Ev();
static  VTBL_ENTRY vtc_S9709C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9709C1[0]),
  (VTBL_ENTRY)&_ZN7S9709C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9709C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9709C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9709C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9709C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9709C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9709C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9709C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9709C1[];
extern  VTBL_ENTRY _ZTV7S9709C1[];
Class_Descriptor cd_S9709C1 = {  "S9709C1", // class name
  bases_S9709C1, 1,
  &(vtc_S9709C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S9709C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9709C1),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  S16241C1  {
  ::S16130C9_nt s16241c1f0;
  ::S857C9_nt s16241c1f1;
  ::S857C14_nt s16241c1f2;
  int s16241c1f3[2];
  void *s16241c1f4;
  void  mf16241c1(); // _ZN8S16241C19mf16241c1Ev
};
//SIG(1 S16241C1) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m FC5{ FL[4]}} FC6{ m Fp FC7{ Fi[4]}} Fi[2] Fp}


void  S16241C1 ::mf16241c1(){}

static void Test_S16241C1()
{
  {
    init_simple_test("S16241C1");
    S16241C1 lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S16241C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16241C1)");
    check_field_offset(lv, s16241c1f0, 0, "S16241C1.s16241c1f0");
    check_field_offset(lv, s16241c1f1, ABISELECT(16,12), "S16241C1.s16241c1f1");
    check_field_offset(lv, s16241c1f2, ABISELECT(48,44), "S16241C1.s16241c1f2");
    check_field_offset(lv, s16241c1f3, ABISELECT(72,64), "S16241C1.s16241c1f3");
    check_field_offset(lv, s16241c1f4, ABISELECT(80,72), "S16241C1.s16241c1f4");
  }
}
static Arrange_To_Call_Me vS16241C1(Test_S16241C1, "S16241C1", ABISELECT(88,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16240C1  {
  ::S16130C9_nt s16240c1f0;
  ::S856C9_nt s16240c1f1;
  ::S857C14_nt s16240c1f2;
  int s16240c1f3[2];
  void *s16240c1f4;
  void  mf16240c1(); // _ZN8S16240C19mf16240c1Ev
};
//SIG(1 S16240C1) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m FC5{ Fl[4]}} FC6{ m Fp FC7{ Fi[4]}} Fi[2] Fp}


void  S16240C1 ::mf16240c1(){}

static void Test_S16240C1()
{
  {
    init_simple_test("S16240C1");
    S16240C1 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S16240C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16240C1)");
    check_field_offset(lv, s16240c1f0, 0, "S16240C1.s16240c1f0");
    check_field_offset(lv, s16240c1f1, ABISELECT(16,12), "S16240C1.s16240c1f1");
    check_field_offset(lv, s16240c1f2, ABISELECT(48,28), "S16240C1.s16240c1f2");
    check_field_offset(lv, s16240c1f3, ABISELECT(72,48), "S16240C1.s16240c1f3");
    check_field_offset(lv, s16240c1f4, ABISELECT(80,56), "S16240C1.s16240c1f4");
  }
}
static Arrange_To_Call_Me vS16240C1(Test_S16240C1, "S16240C1", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17263C1  {
  int s17263c1f0[5];
  ::S16130C2_nt s17263c1f1;
  ::S857C14_nt s17263c1f2;
  ::S17262C6_nt s17263c1f3;
  void *s17263c1f4;
  char s17263c1f5[3];
  void  mf17263c1(); // _ZN8S17263C19mf17263c1Ev
};
//SIG(1 S17263C1) C1{ m Fi[5] FC2{ m FL[4]} FC3{ m Fp FC4{ Fi[4]}} FC5{ vd m Fp[2] Fi} Fp Fc[3]}


void  S17263C1 ::mf17263c1(){}

static void Test_S17263C1()
{
  {
    init_simple_test("S17263C1");
    S17263C1 lv;
    check2(sizeof(lv), ABISELECT(128,96), "sizeof(S17263C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17263C1)");
    check_field_offset(lv, s17263c1f0, 0, "S17263C1.s17263c1f0");
    check_field_offset(lv, s17263c1f1, ABISELECT(24,20), "S17263C1.s17263c1f1");
    check_field_offset(lv, s17263c1f2, ABISELECT(56,52), "S17263C1.s17263c1f2");
    check_field_offset(lv, s17263c1f3, ABISELECT(80,72), "S17263C1.s17263c1f3");
    check_field_offset(lv, s17263c1f4, ABISELECT(112,88), "S17263C1.s17263c1f4");
    check_field_offset(lv, s17263c1f5, ABISELECT(120,92), "S17263C1.s17263c1f5");
  }
}
static Arrange_To_Call_Me vS17263C1(Test_S17263C1, "S17263C1", ABISELECT(128,96));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17208C1  {
  int s17208c1f0[3];
  void *s17208c1f1[3];
  int s17208c1f2[2];
  char s17208c1f3[2];
  void *s17208c1f4[2];
  __tsi64 s17208c1f5;
  ::S9728C9_nt s17208c1f6;
  int s17208c1f7;
  __tsi64 s17208c1f8[2];
  ::S9728C9_nt s17208c1f9;
  int s17208c1f10;
  __tsi64 s17208c1f11;
  void  mf17208c1(); // _ZN8S17208C19mf17208c1Ev
};
//SIG(1 S17208C1) C1{ m Fi[3] Fp[3] Fi[2] Fc[2] Fp[2] FL FC2{ FL[4]} Fi FL[2] FC2 Fi FL}


void  S17208C1 ::mf17208c1(){}

static void Test_S17208C1()
{
  {
    init_simple_test("S17208C1");
    S17208C1 lv;
    check2(sizeof(lv), ABISELECT(184,148), "sizeof(S17208C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17208C1)");
    check_field_offset(lv, s17208c1f0, 0, "S17208C1.s17208c1f0");
    check_field_offset(lv, s17208c1f1, ABISELECT(16,12), "S17208C1.s17208c1f1");
    check_field_offset(lv, s17208c1f2, ABISELECT(40,24), "S17208C1.s17208c1f2");
    check_field_offset(lv, s17208c1f3, ABISELECT(48,32), "S17208C1.s17208c1f3");
    check_field_offset(lv, s17208c1f4, ABISELECT(56,36), "S17208C1.s17208c1f4");
    check_field_offset(lv, s17208c1f5, ABISELECT(72,44), "S17208C1.s17208c1f5");
    check_field_offset(lv, s17208c1f6, ABISELECT(80,52), "S17208C1.s17208c1f6");
    check_field_offset(lv, s17208c1f7, ABISELECT(112,84), "S17208C1.s17208c1f7");
    check_field_offset(lv, s17208c1f8, ABISELECT(120,88), "S17208C1.s17208c1f8");
    check_field_offset(lv, s17208c1f9, ABISELECT(136,104), "S17208C1.s17208c1f9");
    check_field_offset(lv, s17208c1f10, ABISELECT(168,136), "S17208C1.s17208c1f10");
    check_field_offset(lv, s17208c1f11, ABISELECT(176,140), "S17208C1.s17208c1f11");
  }
}
static Arrange_To_Call_Me vS17208C1(Test_S17208C1, "S17208C1", ABISELECT(184,148));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11578C2_nt  {
  int s11578c2f0[2];
};
//SIG(-1 S11578C2_nt) C1{ Fi[2]}



//skip512 S11578C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11578C3  {
  ::S11659C5_nt s11578c3f0;
  int s11578c3f1[3];
};
//SIG(-1 S11578C3) C1{ FC2{ Fi[4]} Fi[3]}



static void Test_S11578C3()
{
  {
    init_simple_test("S11578C3");
    S11578C3 lv;
    check2(sizeof(lv), 28, "sizeof(S11578C3)");
    check2(__alignof__(lv), 4, "__alignof__(S11578C3)");
    check_field_offset(lv, s11578c3f0, 0, "S11578C3.s11578c3f0");
    check_field_offset(lv, s11578c3f1, 16, "S11578C3.s11578c3f1");
  }
}
static Arrange_To_Call_Me vS11578C3(Test_S11578C3, "S11578C3", 28);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11578C6  {
  long s11578c6f0;
  int s11578c6f1;
};
//SIG(-1 S11578C6) C1{ Fl Fi}



static void Test_S11578C6()
{
  {
    init_simple_test("S11578C6");
    S11578C6 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S11578C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11578C6)");
    check_field_offset(lv, s11578c6f0, 0, "S11578C6.s11578c6f0");
    check_field_offset(lv, s11578c6f1, ABISELECT(8,4), "S11578C6.s11578c6f1");
  }
}
static Arrange_To_Call_Me vS11578C6(Test_S11578C6, "S11578C6", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11578C5  {
  ::S11578C6 s11578c5f0;
  int s11578c5f1[3];
};
//SIG(-1 S11578C5) C1{ FC2{ Fl Fi} Fi[3]}



static void Test_S11578C5()
{
  {
    init_simple_test("S11578C5");
    S11578C5 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S11578C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11578C5)");
    check_field_offset(lv, s11578c5f0, 0, "S11578C5.s11578c5f0");
    check_field_offset(lv, s11578c5f1, ABISELECT(16,8), "S11578C5.s11578c5f1");
  }
}
static Arrange_To_Call_Me vS11578C5(Test_S11578C5, "S11578C5", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11578C1  {
  ::S11578C2_nt s11578c1f0;
  int s11578c1f1;
  ::S11578C3 s11578c1f2;
  ::S11578C5 s11578c1f3;
  ::S11578C5 s11578c1f4;
  int s11578c1f5[2];
};
//SIG(1 S11578C1) C1{ FC2{ Fi[2]} Fi FC3{ FC4{ Fi[4]} Fi[3]} FC5{ FC6{ Fl Fi} Fi[3]} FC5 Fi[2]}



static void Test_S11578C1()
{
  {
    init_simple_test("S11578C1");
    S11578C1 lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S11578C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11578C1)");
    check_field_offset(lv, s11578c1f0, 0, "S11578C1.s11578c1f0");
    check_field_offset(lv, s11578c1f1, 8, "S11578C1.s11578c1f1");
    check_field_offset(lv, s11578c1f2, 12, "S11578C1.s11578c1f2");
    check_field_offset(lv, s11578c1f3, 40, "S11578C1.s11578c1f3");
    check_field_offset(lv, s11578c1f4, ABISELECT(72,60), "S11578C1.s11578c1f4");
    check_field_offset(lv, s11578c1f5, ABISELECT(104,80), "S11578C1.s11578c1f5");
  }
}
static Arrange_To_Call_Me vS11578C1(Test_S11578C1, "S11578C1", ABISELECT(112,88));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17648C2  {
  void *s17648c2f0[2];
  ::S3221C4_nt s17648c2f1;
  char s17648c2f2[2];
  void  mf17648c2(); // _ZN8S17648C29mf17648c2Ev
};
//SIG(-1 S17648C2) C1{ m Fp[2] FC2{ m Fi[2]} Fc[2]}


void  S17648C2 ::mf17648c2(){}

static void Test_S17648C2()
{
  {
    init_simple_test("S17648C2");
    S17648C2 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S17648C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17648C2)");
    check_field_offset(lv, s17648c2f0, 0, "S17648C2.s17648c2f0");
    check_field_offset(lv, s17648c2f1, ABISELECT(16,8), "S17648C2.s17648c2f1");
    check_field_offset(lv, s17648c2f2, ABISELECT(24,16), "S17648C2.s17648c2f2");
  }
}
static Arrange_To_Call_Me vS17648C2(Test_S17648C2, "S17648C2", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17648C1  {
  void *s17648c1f0;
  ::S17648C2 s17648c1f1;
  ::S17648C2 s17648c1f2;
  void *s17648c1f3;
  ::S3221C4_nt s17648c1f4;
  ::S3221C4_nt s17648c1f5;
  void *s17648c1f6[3];
  int s17648c1f7;
  void *s17648c1f8;
  void  mf17648c1(); // _ZN8S17648C19mf17648c1Ev
};
//SIG(1 S17648C1) C1{ m Fp FC2{ m Fp[2] FC3{ m Fi[2]} Fc[2]} FC2 Fp FC3 FC3 Fp[3] Fi Fp}


void  S17648C1 ::mf17648c1(){}

static void Test_S17648C1()
{
  {
    init_simple_test("S17648C1");
    S17648C1 lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S17648C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17648C1)");
    check_field_offset(lv, s17648c1f0, 0, "S17648C1.s17648c1f0");
    check_field_offset(lv, s17648c1f1, ABISELECT(8,4), "S17648C1.s17648c1f1");
    check_field_offset(lv, s17648c1f2, ABISELECT(40,24), "S17648C1.s17648c1f2");
    check_field_offset(lv, s17648c1f3, ABISELECT(72,44), "S17648C1.s17648c1f3");
    check_field_offset(lv, s17648c1f4, ABISELECT(80,48), "S17648C1.s17648c1f4");
    check_field_offset(lv, s17648c1f5, ABISELECT(88,56), "S17648C1.s17648c1f5");
    check_field_offset(lv, s17648c1f6, ABISELECT(96,64), "S17648C1.s17648c1f6");
    check_field_offset(lv, s17648c1f7, ABISELECT(120,76), "S17648C1.s17648c1f7");
    check_field_offset(lv, s17648c1f8, ABISELECT(128,80), "S17648C1.s17648c1f8");
  }
}
static Arrange_To_Call_Me vS17648C1(Test_S17648C1, "S17648C1", ABISELECT(136,84));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16248C1  {
  ::S16130C9_nt s16248c1f0;
  ::S16130C2_nt s16248c1f1;
  ::S857C14_nt s16248c1f2;
  int s16248c1f3[2];
  void *s16248c1f4;
  void  mf16248c1(); // _ZN8S16248C19mf16248c1Ev
};
//SIG(1 S16248C1) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m FL[4]} FC5{ m Fp FC6{ Fi[4]}} Fi[2] Fp}


void  S16248C1 ::mf16248c1(){}

static void Test_S16248C1()
{
  {
    init_simple_test("S16248C1");
    S16248C1 lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S16248C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16248C1)");
    check_field_offset(lv, s16248c1f0, 0, "S16248C1.s16248c1f0");
    check_field_offset(lv, s16248c1f1, ABISELECT(16,12), "S16248C1.s16248c1f1");
    check_field_offset(lv, s16248c1f2, ABISELECT(48,44), "S16248C1.s16248c1f2");
    check_field_offset(lv, s16248c1f3, ABISELECT(72,64), "S16248C1.s16248c1f3");
    check_field_offset(lv, s16248c1f4, ABISELECT(80,72), "S16248C1.s16248c1f4");
  }
}
static Arrange_To_Call_Me vS16248C1(Test_S16248C1, "S16248C1", ABISELECT(88,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7147C2  {
  virtual  ~S7147C2(); // _ZN7S7147C2D1Ev
  virtual void  v8(); // _ZN7S7147C22v8Ev
  virtual void  v9(); // _ZN7S7147C22v9Ev
  virtual void  v10(); // _ZN7S7147C23v10Ev
  virtual void  v11(); // _ZN7S7147C23v11Ev
  virtual void  v12(); // _ZN7S7147C23v12Ev
  virtual void  v13(); // _ZN7S7147C23v13Ev
  virtual void  v14(); // _ZN7S7147C23v14Ev
  S7147C2(); // tgen
};
//SIG(-1 S7147C2) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S7147C2 ::~S7147C2(){ note_dtor("S7147C2", this);}
void  S7147C2 ::v8(){vfunc_called(this, "_ZN7S7147C22v8Ev");}
void  S7147C2 ::v9(){vfunc_called(this, "_ZN7S7147C22v9Ev");}
void  S7147C2 ::v10(){vfunc_called(this, "_ZN7S7147C23v10Ev");}
void  S7147C2 ::v11(){vfunc_called(this, "_ZN7S7147C23v11Ev");}
void  S7147C2 ::v12(){vfunc_called(this, "_ZN7S7147C23v12Ev");}
void  S7147C2 ::v13(){vfunc_called(this, "_ZN7S7147C23v13Ev");}
void  S7147C2 ::v14(){vfunc_called(this, "_ZN7S7147C23v14Ev");}
S7147C2 ::S7147C2(){ note_ctor("S7147C2", this);} // tgen

static void Test_S7147C2()
{
  extern Class_Descriptor cd_S7147C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7147C2, buf);
    S7147C2 *dp, &lv = *(dp=new (buf) S7147C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7147C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7147C2)");
    test_class_info(&lv, &cd_S7147C2);
    dp->~S7147C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7147C2(Test_S7147C2, "S7147C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7147C2C1Ev();
extern void _ZN7S7147C2D1Ev();
Name_Map name_map_S7147C2[] = {
  NSPAIR(_ZN7S7147C2C1Ev),
  NSPAIR(_ZN7S7147C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7147C2[];
extern void _ZN7S7147C2D1Ev();
extern void _ZN7S7147C2D0Ev();
extern void _ZN7S7147C22v8Ev();
extern void _ZN7S7147C22v9Ev();
extern void _ZN7S7147C23v10Ev();
extern void _ZN7S7147C23v11Ev();
extern void _ZN7S7147C23v12Ev();
extern void _ZN7S7147C23v13Ev();
extern void _ZN7S7147C23v14Ev();
static  VTBL_ENTRY vtc_S7147C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7147C2[0]),
  (VTBL_ENTRY)&_ZN7S7147C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7147C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7147C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7147C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7147C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7147C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7147C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7147C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7147C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S7147C2[];
extern  VTBL_ENTRY _ZTV7S7147C2[];
Class_Descriptor cd_S7147C2 = {  "S7147C2", // class name
  0,0,//no base classes
  &(vtc_S7147C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7147C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7147C2),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  S7147C1  : S7147C2 {
  void *s7147c1f0;
  virtual  ~S7147C1(); // _ZN7S7147C1D1Ev
  virtual void  v1(); // _ZN7S7147C12v1Ev
  virtual void  v2(); // _ZN7S7147C12v2Ev
  virtual void  v3(); // _ZN7S7147C12v3Ev
  virtual void  v4(); // _ZN7S7147C12v4Ev
  virtual void  v5(); // _ZN7S7147C12v5Ev
  virtual void  v6(); // _ZN7S7147C12v6Ev
  virtual void  v7(); // _ZN7S7147C12v7Ev
  S7147C1(); // tgen
};
//SIG(1 S7147C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 Fp}


 S7147C1 ::~S7147C1(){ note_dtor("S7147C1", this);}
void  S7147C1 ::v1(){vfunc_called(this, "_ZN7S7147C12v1Ev");}
void  S7147C1 ::v2(){vfunc_called(this, "_ZN7S7147C12v2Ev");}
void  S7147C1 ::v3(){vfunc_called(this, "_ZN7S7147C12v3Ev");}
void  S7147C1 ::v4(){vfunc_called(this, "_ZN7S7147C12v4Ev");}
void  S7147C1 ::v5(){vfunc_called(this, "_ZN7S7147C12v5Ev");}
void  S7147C1 ::v6(){vfunc_called(this, "_ZN7S7147C12v6Ev");}
void  S7147C1 ::v7(){vfunc_called(this, "_ZN7S7147C12v7Ev");}
S7147C1 ::S7147C1(){ note_ctor("S7147C1", this);} // tgen

static void Test_S7147C1()
{
  extern Class_Descriptor cd_S7147C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7147C1, buf);
    S7147C1 *dp, &lv = *(dp=new (buf) S7147C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7147C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7147C1)");
    check_base_class_offset(lv, (S7147C2*), 0, "S7147C1");
    check_field_offset(lv, s7147c1f0, ABISELECT(8,4), "S7147C1.s7147c1f0");
    test_class_info(&lv, &cd_S7147C1);
    dp->~S7147C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7147C1(Test_S7147C1, "S7147C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7147C1C1Ev();
extern void _ZN7S7147C1D1Ev();
Name_Map name_map_S7147C1[] = {
  NSPAIR(_ZN7S7147C1C1Ev),
  NSPAIR(_ZN7S7147C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7147C2;
extern VTBL_ENTRY _ZTI7S7147C2[];
extern  VTBL_ENTRY _ZTV7S7147C2[];
static Base_Class bases_S7147C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7147C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7147C1[];
extern void _ZN7S7147C1D1Ev();
extern void _ZN7S7147C1D0Ev();
extern void _ZN7S7147C22v8Ev();
extern void _ZN7S7147C22v9Ev();
extern void _ZN7S7147C23v10Ev();
extern void _ZN7S7147C23v11Ev();
extern void _ZN7S7147C23v12Ev();
extern void _ZN7S7147C23v13Ev();
extern void _ZN7S7147C23v14Ev();
extern void _ZN7S7147C12v1Ev();
extern void _ZN7S7147C12v2Ev();
extern void _ZN7S7147C12v3Ev();
extern void _ZN7S7147C12v4Ev();
extern void _ZN7S7147C12v5Ev();
extern void _ZN7S7147C12v6Ev();
extern void _ZN7S7147C12v7Ev();
static  VTBL_ENTRY vtc_S7147C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7147C1[0]),
  (VTBL_ENTRY)&_ZN7S7147C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7147C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7147C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7147C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7147C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7147C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7147C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7147C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7147C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7147C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7147C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7147C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7147C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7147C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7147C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7147C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S7147C1[];
extern  VTBL_ENTRY _ZTV7S7147C1[];
Class_Descriptor cd_S7147C1 = {  "S7147C1", // class name
  bases_S7147C1, 1,
  &(vtc_S7147C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7147C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7147C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16803C4_nt  {
  void *s16803c4f0;
  int s16803c4f1;
  ::S16130C17_nt s16803c4f2;
  void  mf16803c4(); // _ZN11S16803C4_nt9mf16803c4Ev
};
//SIG(-1 S16803C4_nt) C1{ m Fp Fi FC2{ m}}


void  S16803C4_nt ::mf16803c4(){}

//skip512 S16803C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16803C1  {
  int s16803c1f0;
  ::S16130C9_nt s16803c1f1;
  int s16803c1f2;
  ::S16803C4_nt s16803c1f3;
  ::S16130C9_nt s16803c1f4;
  int s16803c1f5;
  char s16803c1f6[2];
  void  mf16803c1(); // _ZN8S16803C19mf16803c1Ev
};
//SIG(1 S16803C1) C1{ m Fi FC2{ m Fp Fi FC3{ m}} Fi FC4{ m Fp Fi FC5{ m}} FC2 Fi Fc[2]}


void  S16803C1 ::mf16803c1(){}

static void Test_S16803C1()
{
  {
    init_simple_test("S16803C1");
    S16803C1 lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S16803C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16803C1)");
    check_field_offset(lv, s16803c1f0, 0, "S16803C1.s16803c1f0");
    check_field_offset(lv, s16803c1f1, ABISELECT(8,4), "S16803C1.s16803c1f1");
    check_field_offset(lv, s16803c1f2, ABISELECT(24,16), "S16803C1.s16803c1f2");
    check_field_offset(lv, s16803c1f3, ABISELECT(32,20), "S16803C1.s16803c1f3");
    check_field_offset(lv, s16803c1f4, ABISELECT(48,32), "S16803C1.s16803c1f4");
    check_field_offset(lv, s16803c1f5, ABISELECT(64,44), "S16803C1.s16803c1f5");
    check_field_offset(lv, s16803c1f6, ABISELECT(68,48), "S16803C1.s16803c1f6");
  }
}
static Arrange_To_Call_Me vS16803C1(Test_S16803C1, "S16803C1", ABISELECT(72,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15691C4_nt  {
  int s15691c4f0[3];
};
//SIG(-1 S15691C4_nt) C1{ Fi[3]}



//skip512 S15691C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15691C2  {
  ::S9728C9_nt s15691c2f0;
  ::S15691C4_nt s15691c2f1[32];
  void  mf15691c2(); // _ZN8S15691C29mf15691c2Ev
};
//SIG(-1 S15691C2) C1{ m FC2{ FL[4]} FC3{ Fi[3]}[32]}


void  S15691C2 ::mf15691c2(){}

static void Test_S15691C2()
{
  {
    init_simple_test("S15691C2");
    S15691C2 lv;
    check2(sizeof(lv), 416, "sizeof(S15691C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15691C2)");
    check_field_offset(lv, s15691c2f0, 0, "S15691C2.s15691c2f0");
    check_field_offset(lv, s15691c2f1, 32, "S15691C2.s15691c2f1");
  }
}
static Arrange_To_Call_Me vS15691C2(Test_S15691C2, "S15691C2", 416);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15691C5  {
  ::S9728C9_nt s15691c5f0;
  ::S11659C5_nt s15691c5f1[32];
  void  mf15691c5(); // _ZN8S15691C59mf15691c5Ev
};
//SIG(-1 S15691C5) C1{ m FC2{ FL[4]} FC3{ Fi[4]}[32]}


void  S15691C5 ::mf15691c5(){}

static void Test_S15691C5()
{
  {
    init_simple_test("S15691C5");
    S15691C5 lv;
    check2(sizeof(lv), 544, "sizeof(S15691C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15691C5)");
    check_field_offset(lv, s15691c5f0, 0, "S15691C5.s15691c5f0");
    check_field_offset(lv, s15691c5f1, 32, "S15691C5.s15691c5f1");
  }
}
static Arrange_To_Call_Me vS15691C5(Test_S15691C5, "S15691C5", 544);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15691C1  {
  ::S15691C2 s15691c1f0;
  ::S15691C5 s15691c1f1;
  void  mf15691c1(); // _ZN8S15691C19mf15691c1Ev
};
//SIG(1 S15691C1) C1{ m FC2{ m FC3{ FL[4]} FC4{ Fi[3]}[32]} FC5{ m FC3 FC6{ Fi[4]}[32]}}


void  S15691C1 ::mf15691c1(){}

static void Test_S15691C1()
{
  {
    init_simple_test("S15691C1");
    S15691C1 lv;
    check2(sizeof(lv), 960, "sizeof(S15691C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15691C1)");
    check_field_offset(lv, s15691c1f0, 0, "S15691C1.s15691c1f0");
    check_field_offset(lv, s15691c1f1, 416, "S15691C1.s15691c1f1");
  }
}
static Arrange_To_Call_Me vS15691C1(Test_S15691C1, "S15691C1", 960);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15690C2  {
  ::S856C10_nt s15690c2f0;
  ::S15691C4_nt s15690c2f1[32];
  void  mf15690c2(); // _ZN8S15690C29mf15690c2Ev
};
//SIG(-1 S15690C2) C1{ m FC2{ Fl[4]} FC3{ Fi[3]}[32]}


void  S15690C2 ::mf15690c2(){}

static void Test_S15690C2()
{
  {
    init_simple_test("S15690C2");
    S15690C2 lv;
    check2(sizeof(lv), ABISELECT(416,400), "sizeof(S15690C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15690C2)");
    check_field_offset(lv, s15690c2f0, 0, "S15690C2.s15690c2f0");
    check_field_offset(lv, s15690c2f1, ABISELECT(32,16), "S15690C2.s15690c2f1");
  }
}
static Arrange_To_Call_Me vS15690C2(Test_S15690C2, "S15690C2", ABISELECT(416,400));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15690C5  {
  ::S856C10_nt s15690c5f0;
  ::S11659C5_nt s15690c5f1[32];
  void  mf15690c5(); // _ZN8S15690C59mf15690c5Ev
};
//SIG(-1 S15690C5) C1{ m FC2{ Fl[4]} FC3{ Fi[4]}[32]}


void  S15690C5 ::mf15690c5(){}

static void Test_S15690C5()
{
  {
    init_simple_test("S15690C5");
    S15690C5 lv;
    check2(sizeof(lv), ABISELECT(544,528), "sizeof(S15690C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15690C5)");
    check_field_offset(lv, s15690c5f0, 0, "S15690C5.s15690c5f0");
    check_field_offset(lv, s15690c5f1, ABISELECT(32,16), "S15690C5.s15690c5f1");
  }
}
static Arrange_To_Call_Me vS15690C5(Test_S15690C5, "S15690C5", ABISELECT(544,528));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15690C1  {
  ::S15690C2 s15690c1f0;
  ::S15690C5 s15690c1f1;
  void  mf15690c1(); // _ZN8S15690C19mf15690c1Ev
};
//SIG(1 S15690C1) C1{ m FC2{ m FC3{ Fl[4]} FC4{ Fi[3]}[32]} FC5{ m FC3 FC6{ Fi[4]}[32]}}


void  S15690C1 ::mf15690c1(){}

static void Test_S15690C1()
{
  {
    init_simple_test("S15690C1");
    S15690C1 lv;
    check2(sizeof(lv), ABISELECT(960,928), "sizeof(S15690C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15690C1)");
    check_field_offset(lv, s15690c1f0, 0, "S15690C1.s15690c1f0");
    check_field_offset(lv, s15690c1f1, ABISELECT(416,400), "S15690C1.s15690c1f1");
  }
}
static Arrange_To_Call_Me vS15690C1(Test_S15690C1, "S15690C1", ABISELECT(960,928));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16128C2  {
  __tsi64 s16128c2f0[4];
  ::S15691C4_nt s16128c2f1[32];
  void  mf16128c2(); // _ZN8S16128C29mf16128c2Ev
};
//SIG(-1 S16128C2) C1{ m FL[4] FC2{ Fi[3]}[32]}


void  S16128C2 ::mf16128c2(){}

static void Test_S16128C2()
{
  {
    init_simple_test("S16128C2");
    S16128C2 lv;
    check2(sizeof(lv), 416, "sizeof(S16128C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16128C2)");
    check_field_offset(lv, s16128c2f0, 0, "S16128C2.s16128c2f0");
    check_field_offset(lv, s16128c2f1, 32, "S16128C2.s16128c2f1");
  }
}
static Arrange_To_Call_Me vS16128C2(Test_S16128C2, "S16128C2", 416);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16128C4  {
  __tsi64 s16128c4f0[4];
  ::S11659C5_nt s16128c4f1[32];
  void  mf16128c4(); // _ZN8S16128C49mf16128c4Ev
};
//SIG(-1 S16128C4) C1{ m FL[4] FC2{ Fi[4]}[32]}


void  S16128C4 ::mf16128c4(){}

static void Test_S16128C4()
{
  {
    init_simple_test("S16128C4");
    S16128C4 lv;
    check2(sizeof(lv), 544, "sizeof(S16128C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16128C4)");
    check_field_offset(lv, s16128c4f0, 0, "S16128C4.s16128c4f0");
    check_field_offset(lv, s16128c4f1, 32, "S16128C4.s16128c4f1");
  }
}
static Arrange_To_Call_Me vS16128C4(Test_S16128C4, "S16128C4", 544);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16128C1  {
  ::S16128C2 s16128c1f0;
  ::S16128C4 s16128c1f1;
  void  mf16128c1(); // _ZN8S16128C19mf16128c1Ev
};
//SIG(1 S16128C1) C1{ m FC2{ m FL[4] FC3{ Fi[3]}[32]} FC4{ m FL[4] FC5{ Fi[4]}[32]}}


void  S16128C1 ::mf16128c1(){}

static void Test_S16128C1()
{
  {
    init_simple_test("S16128C1");
    S16128C1 lv;
    check2(sizeof(lv), 960, "sizeof(S16128C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16128C1)");
    check_field_offset(lv, s16128c1f0, 0, "S16128C1.s16128c1f0");
    check_field_offset(lv, s16128c1f1, 416, "S16128C1.s16128c1f1");
  }
}
static Arrange_To_Call_Me vS16128C1(Test_S16128C1, "S16128C1", 960);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16819C1  {
  int s16819c1f0;
  ::S15203C3_nt s16819c1f1;
  ::S857C9_nt s16819c1f2;
  ::S857C14_nt s16819c1f3;
  int s16819c1f4;
  void  mf16819c1(); // _ZN8S16819C19mf16819c1Ev
};
//SIG(1 S16819C1) C1{ m Fi FC2{ m Fp[2]} FC3{ m FC4{ FL[4]}} FC5{ m Fp FC6{ Fi[4]}} Fi}


void  S16819C1 ::mf16819c1(){}

static void Test_S16819C1()
{
  {
    init_simple_test("S16819C1");
    S16819C1 lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S16819C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16819C1)");
    check_field_offset(lv, s16819c1f0, 0, "S16819C1.s16819c1f0");
    check_field_offset(lv, s16819c1f1, ABISELECT(8,4), "S16819C1.s16819c1f1");
    check_field_offset(lv, s16819c1f2, ABISELECT(24,12), "S16819C1.s16819c1f2");
    check_field_offset(lv, s16819c1f3, ABISELECT(56,44), "S16819C1.s16819c1f3");
    check_field_offset(lv, s16819c1f4, ABISELECT(80,64), "S16819C1.s16819c1f4");
  }
}
static Arrange_To_Call_Me vS16819C1(Test_S16819C1, "S16819C1", ABISELECT(88,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16818C1  {
  int s16818c1f0;
  ::S15203C3_nt s16818c1f1;
  ::S856C9_nt s16818c1f2;
  ::S857C14_nt s16818c1f3;
  int s16818c1f4;
  void  mf16818c1(); // _ZN8S16818C19mf16818c1Ev
};
//SIG(1 S16818C1) C1{ m Fi FC2{ m Fp[2]} FC3{ m FC4{ Fl[4]}} FC5{ m Fp FC6{ Fi[4]}} Fi}


void  S16818C1 ::mf16818c1(){}

static void Test_S16818C1()
{
  {
    init_simple_test("S16818C1");
    S16818C1 lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S16818C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16818C1)");
    check_field_offset(lv, s16818c1f0, 0, "S16818C1.s16818c1f0");
    check_field_offset(lv, s16818c1f1, ABISELECT(8,4), "S16818C1.s16818c1f1");
    check_field_offset(lv, s16818c1f2, ABISELECT(24,12), "S16818C1.s16818c1f2");
    check_field_offset(lv, s16818c1f3, ABISELECT(56,28), "S16818C1.s16818c1f3");
    check_field_offset(lv, s16818c1f4, ABISELECT(80,48), "S16818C1.s16818c1f4");
  }
}
static Arrange_To_Call_Me vS16818C1(Test_S16818C1, "S16818C1", ABISELECT(88,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17949C2  {
  char s17949c2f0;
  void *s17949c2f1;
  __tsi64 s17949c2f2;
  void *s17949c2f3;
  char s17949c2f4;
  int s17949c2f5[3];
  void *s17949c2f6;
  void  mf17949c2(); // _ZN8S17949C29mf17949c2Ev
};
//SIG(-1 S17949C2) C1{ m Fc Fp FL Fp Fc Fi[3] Fp}


void  S17949C2 ::mf17949c2(){}

static void Test_S17949C2()
{
  {
    init_simple_test("S17949C2");
    S17949C2 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S17949C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17949C2)");
    check_field_offset(lv, s17949c2f0, 0, "S17949C2.s17949c2f0");
    check_field_offset(lv, s17949c2f1, ABISELECT(8,4), "S17949C2.s17949c2f1");
    check_field_offset(lv, s17949c2f2, ABISELECT(16,8), "S17949C2.s17949c2f2");
    check_field_offset(lv, s17949c2f3, ABISELECT(24,16), "S17949C2.s17949c2f3");
    check_field_offset(lv, s17949c2f4, ABISELECT(32,20), "S17949C2.s17949c2f4");
    check_field_offset(lv, s17949c2f5, ABISELECT(36,24), "S17949C2.s17949c2f5");
    check_field_offset(lv, s17949c2f6, ABISELECT(48,36), "S17949C2.s17949c2f6");
  }
}
static Arrange_To_Call_Me vS17949C2(Test_S17949C2, "S17949C2", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17949C1  {
  void *s17949c1f0[2];
  ::S17949C2 s17949c1f1;
  __tsi64 s17949c1f2;
  char s17949c1f3[2];
  void *s17949c1f4;
  int s17949c1f5;
  void  mf17949c1(); // _ZN8S17949C19mf17949c1Ev
};
//SIG(1 S17949C1) C1{ m Fp[2] FC2{ m Fc Fp FL Fp Fc Fi[3] Fp} FL Fc[2] Fp Fi}


void  S17949C1 ::mf17949c1(){}

static void Test_S17949C1()
{
  {
    init_simple_test("S17949C1");
    S17949C1 lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S17949C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17949C1)");
    check_field_offset(lv, s17949c1f0, 0, "S17949C1.s17949c1f0");
    check_field_offset(lv, s17949c1f1, ABISELECT(16,8), "S17949C1.s17949c1f1");
    check_field_offset(lv, s17949c1f2, ABISELECT(72,48), "S17949C1.s17949c1f2");
    check_field_offset(lv, s17949c1f3, ABISELECT(80,56), "S17949C1.s17949c1f3");
    check_field_offset(lv, s17949c1f4, ABISELECT(88,60), "S17949C1.s17949c1f4");
    check_field_offset(lv, s17949c1f5, ABISELECT(96,64), "S17949C1.s17949c1f5");
  }
}
static Arrange_To_Call_Me vS17949C1(Test_S17949C1, "S17949C1", ABISELECT(104,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16820C1  {
  int s16820c1f0;
  ::S15203C3_nt s16820c1f1;
  ::S16130C2_nt s16820c1f2;
  ::S857C14_nt s16820c1f3;
  int s16820c1f4;
  void  mf16820c1(); // _ZN8S16820C19mf16820c1Ev
};
//SIG(1 S16820C1) C1{ m Fi FC2{ m Fp[2]} FC3{ m FL[4]} FC4{ m Fp FC5{ Fi[4]}} Fi}


void  S16820C1 ::mf16820c1(){}

static void Test_S16820C1()
{
  {
    init_simple_test("S16820C1");
    S16820C1 lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S16820C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16820C1)");
    check_field_offset(lv, s16820c1f0, 0, "S16820C1.s16820c1f0");
    check_field_offset(lv, s16820c1f1, ABISELECT(8,4), "S16820C1.s16820c1f1");
    check_field_offset(lv, s16820c1f2, ABISELECT(24,12), "S16820C1.s16820c1f2");
    check_field_offset(lv, s16820c1f3, ABISELECT(56,44), "S16820C1.s16820c1f3");
    check_field_offset(lv, s16820c1f4, ABISELECT(80,64), "S16820C1.s16820c1f4");
  }
}
static Arrange_To_Call_Me vS16820C1(Test_S16820C1, "S16820C1", ABISELECT(88,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8905C2_nt  {
  void *s8905c2f0;
  virtual  ~S8905C2_nt(); // _ZN10S8905C2_ntD1Ev
  virtual void  v2(); // _ZN10S8905C2_nt2v2Ev
  virtual void  v3(); // _ZN10S8905C2_nt2v3Ev
  S8905C2_nt(); // tgen
};
//SIG(-1 S8905C2_nt) C1{ vd v1 v2 Fp}


 S8905C2_nt ::~S8905C2_nt(){ note_dtor("S8905C2_nt", this);}
void  S8905C2_nt ::v2(){vfunc_called(this, "_ZN10S8905C2_nt2v2Ev");}
void  S8905C2_nt ::v3(){vfunc_called(this, "_ZN10S8905C2_nt2v3Ev");}
S8905C2_nt ::S8905C2_nt(){ note_ctor("S8905C2_nt", this);} // tgen

//skip512 S8905C2_nt

#else // __cplusplus

extern void _ZN10S8905C2_ntC1Ev();
extern void _ZN10S8905C2_ntD1Ev();
Name_Map name_map_S8905C2_nt[] = {
  NSPAIR(_ZN10S8905C2_ntC1Ev),
  NSPAIR(_ZN10S8905C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8905C2_nt[];
extern void _ZN10S8905C2_ntD1Ev();
extern void _ZN10S8905C2_ntD0Ev();
extern void _ZN10S8905C2_nt2v2Ev();
extern void _ZN10S8905C2_nt2v3Ev();
static  VTBL_ENTRY vtc_S8905C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8905C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8905C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8905C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8905C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8905C2_nt2v3Ev,
};
extern VTBL_ENTRY _ZTI10S8905C2_nt[];
VTBL_ENTRY *P__ZTI10S8905C2_nt = _ZTI10S8905C2_nt; 
extern  VTBL_ENTRY _ZTV10S8905C2_nt[];
Class_Descriptor cd_S8905C2_nt = {  "S8905C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8905C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S8905C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8905C2_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  S8905C3_nt  {
  ::S16803C4_nt s8905c3f0;
  int s8905c3f1;
  void  mf8905c3(); // _ZN10S8905C3_nt8mf8905c3Ev
};
//SIG(-1 S8905C3_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S8905C3_nt ::mf8905c3(){}

//skip512 S8905C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8905C1  : S8905C2_nt {
  ::S8905C3_nt s8905c1f0;
  ::S8905C3_nt s8905c1f1;
  virtual void  v1(); // _ZN7S8905C12v1Ev
  ~S8905C1(); // tgen
  S8905C1(); // tgen
};
//SIG(1 S8905C1) C1{ BC2{ vd v2 v3 Fp} v1 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC3}


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

static void Test_S8905C1()
{
  extern Class_Descriptor cd_S8905C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S8905C1, buf);
    S8905C1 *dp, &lv = *(dp=new (buf) S8905C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S8905C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8905C1)");
    check_base_class_offset(lv, (S8905C2_nt*), 0, "S8905C1");
    check_field_offset(lv, s8905c1f0, ABISELECT(16,8), "S8905C1.s8905c1f0");
    check_field_offset(lv, s8905c1f1, ABISELECT(40,24), "S8905C1.s8905c1f1");
    test_class_info(&lv, &cd_S8905C1);
    dp->~S8905C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8905C1(Test_S8905C1, "S8905C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S8905C1C1Ev();
extern void _ZN7S8905C1D1Ev();
Name_Map name_map_S8905C1[] = {
  NSPAIR(_ZN7S8905C1C1Ev),
  NSPAIR(_ZN7S8905C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8905C2_nt;
extern VTBL_ENTRY _ZTI10S8905C2_nt[];
extern  VTBL_ENTRY _ZTV10S8905C2_nt[];
static Base_Class bases_S8905C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8905C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8905C1[];
extern void _ZN7S8905C1D1Ev();
extern void _ZN7S8905C1D0Ev();
extern void _ZN10S8905C2_nt2v2Ev();
extern void _ZN10S8905C2_nt2v3Ev();
extern void _ZN7S8905C12v1Ev();
static  VTBL_ENTRY vtc_S8905C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8905C1[0]),
  (VTBL_ENTRY)&_ZN7S8905C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8905C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8905C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8905C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN7S8905C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8905C1[];
extern  VTBL_ENTRY _ZTV7S8905C1[];
Class_Descriptor cd_S8905C1 = {  "S8905C1", // class name
  bases_S8905C1, 1,
  &(vtc_S8905C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S8905C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8905C1),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  S13350C1  {
  int s13350c1f0[3];
  ::S2632C13 s13350c1f1;
  ::S2632C4_nt s13350c1f2;
};
//SIG(1 S13350C1) C1{ Fi[3] FC2{ m Fi FC3{ BC4{ m Fp Fi}}} FC5{ m FC6{ m Fp}}}



static void Test_S13350C1()
{
  {
    init_simple_test("S13350C1");
    S13350C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S13350C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13350C1)");
    check_field_offset(lv, s13350c1f0, 0, "S13350C1.s13350c1f0");
    check_field_offset(lv, s13350c1f1, ABISELECT(16,12), "S13350C1.s13350c1f1");
    check_field_offset(lv, s13350c1f2, ABISELECT(40,24), "S13350C1.s13350c1f2");
  }
}
static Arrange_To_Call_Me vS13350C1(Test_S13350C1, "S13350C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13318C1  {
  int s13318c1f0[3];
  char s13318c1f1[4];
  void *s13318c1f2;
  int s13318c1f3;
  __tsi64 s13318c1f4;
  int s13318c1f5[10];
  char s13318c1f6[16];
  int s13318c1f7[3];
  char s13318c1f8[160];
};
//SIG(1 S13318C1) C1{ Fi[3] Fc[4] Fp Fi FL Fi[10] Fc[16] Fi[3] Fc[160]}



static void Test_S13318C1()
{
  {
    init_simple_test("S13318C1");
    S13318C1 lv;
    check2(sizeof(lv), ABISELECT(272,260), "sizeof(S13318C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13318C1)");
    check_field_offset(lv, s13318c1f0, 0, "S13318C1.s13318c1f0");
    check_field_offset(lv, s13318c1f1, 12, "S13318C1.s13318c1f1");
    check_field_offset(lv, s13318c1f2, 16, "S13318C1.s13318c1f2");
    check_field_offset(lv, s13318c1f3, ABISELECT(24,20), "S13318C1.s13318c1f3");
    check_field_offset(lv, s13318c1f4, ABISELECT(32,24), "S13318C1.s13318c1f4");
    check_field_offset(lv, s13318c1f5, ABISELECT(40,32), "S13318C1.s13318c1f5");
    check_field_offset(lv, s13318c1f6, ABISELECT(80,72), "S13318C1.s13318c1f6");
    check_field_offset(lv, s13318c1f7, ABISELECT(96,88), "S13318C1.s13318c1f7");
    check_field_offset(lv, s13318c1f8, ABISELECT(108,100), "S13318C1.s13318c1f8");
  }
}
static Arrange_To_Call_Me vS13318C1(Test_S13318C1, "S13318C1", ABISELECT(272,260));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21513C1  {
  ::S5408C15_nt s21513c1f0;
  int s21513c1f1[6];
  char s21513c1f2[4];
  __tsi64 s21513c1f3;
  int s21513c1f4;
  __tsi64 s21513c1f5;
  void  mf21513c1(); // _ZN8S21513C19mf21513c1Ev
  virtual  ~S21513C1(); // _ZN8S21513C1D1Ev
  S21513C1(); // tgen
};
//SIG(1 S21513C1) C1{ vd m FC2{ m Fp Fi[2] FC3{ m}} Fi[6] Fc[4] FL Fi FL}


void  S21513C1 ::mf21513c1(){}
 S21513C1 ::~S21513C1(){ note_dtor("S21513C1", this);}
S21513C1 ::S21513C1(){ note_ctor("S21513C1", this);} // tgen

static void Test_S21513C1()
{
  extern Class_Descriptor cd_S21513C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,18)];
    init_test(&cd_S21513C1, buf);
    S21513C1 *dp, &lv = *(dp=new (buf) S21513C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S21513C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21513C1)");
    check_field_offset(lv, s21513c1f0, ABISELECT(8,4), "S21513C1.s21513c1f0");
    check_field_offset(lv, s21513c1f1, ABISELECT(32,20), "S21513C1.s21513c1f1");
    check_field_offset(lv, s21513c1f2, ABISELECT(56,44), "S21513C1.s21513c1f2");
    check_field_offset(lv, s21513c1f3, ABISELECT(64,48), "S21513C1.s21513c1f3");
    check_field_offset(lv, s21513c1f4, ABISELECT(72,56), "S21513C1.s21513c1f4");
    check_field_offset(lv, s21513c1f5, ABISELECT(80,60), "S21513C1.s21513c1f5");
    test_class_info(&lv, &cd_S21513C1);
    dp->~S21513C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21513C1(Test_S21513C1, "S21513C1", ABISELECT(88,68));

#else // __cplusplus

extern void _ZN8S21513C1C1Ev();
extern void _ZN8S21513C1D1Ev();
Name_Map name_map_S21513C1[] = {
  NSPAIR(_ZN8S21513C1C1Ev),
  NSPAIR(_ZN8S21513C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21513C1[];
extern void _ZN8S21513C1D1Ev();
extern void _ZN8S21513C1D0Ev();
static  VTBL_ENTRY vtc_S21513C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21513C1[0]),
  (VTBL_ENTRY)&_ZN8S21513C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21513C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21513C1[];
extern  VTBL_ENTRY _ZTV8S21513C1[];
Class_Descriptor cd_S21513C1 = {  "S21513C1", // class name
  0,0,//no base classes
  &(vtc_S21513C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,68), // object size
  NSPAIRA(_ZTI8S21513C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21513C1),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  S9200C2_nt  {
  short s9200c2f0;
  int s9200c2f1;
  char s9200c2f2;
  void *s9200c2f3;
  int s9200c2f4;
  virtual  ~S9200C2_nt(); // _ZN10S9200C2_ntD1Ev
  virtual void  v3(); // _ZN10S9200C2_nt2v3Ev
  virtual void  v4(); // _ZN10S9200C2_nt2v4Ev
  S9200C2_nt(); // tgen
};
//SIG(-1 S9200C2_nt) C1{ vd v1 v2 Fs Fi Fc Fp Fi}


 S9200C2_nt ::~S9200C2_nt(){ note_dtor("S9200C2_nt", this);}
void  S9200C2_nt ::v3(){vfunc_called(this, "_ZN10S9200C2_nt2v3Ev");}
void  S9200C2_nt ::v4(){vfunc_called(this, "_ZN10S9200C2_nt2v4Ev");}
S9200C2_nt ::S9200C2_nt(){ note_ctor("S9200C2_nt", this);} // tgen

//skip512 S9200C2_nt

#else // __cplusplus

extern void _ZN10S9200C2_ntC1Ev();
extern void _ZN10S9200C2_ntD1Ev();
Name_Map name_map_S9200C2_nt[] = {
  NSPAIR(_ZN10S9200C2_ntC1Ev),
  NSPAIR(_ZN10S9200C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9200C2_nt[];
extern void _ZN10S9200C2_ntD1Ev();
extern void _ZN10S9200C2_ntD0Ev();
extern void _ZN10S9200C2_nt2v3Ev();
extern void _ZN10S9200C2_nt2v4Ev();
static  VTBL_ENTRY vtc_S9200C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9200C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9200C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9200C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9200C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9200C2_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S9200C2_nt[];
VTBL_ENTRY *P__ZTI10S9200C2_nt = _ZTI10S9200C2_nt; 
extern  VTBL_ENTRY _ZTV10S9200C2_nt[];
Class_Descriptor cd_S9200C2_nt = {  "S9200C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9200C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI10S9200C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9200C2_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  S9200C1  : S9200C2_nt {
  ::S11659C5_nt s9200c1f0;
  virtual  ~S9200C1(); // _ZN7S9200C1D1Ev
  virtual void  v1(); // _ZN7S9200C12v1Ev
  virtual void  v2(); // _ZN7S9200C12v2Ev
  S9200C1(); // tgen
};
//SIG(1 S9200C1) C1{ BC2{ vd v3 v4 Fs Fi Fc Fp Fi} vd v1 v2 FC3{ Fi[4]}}


 S9200C1 ::~S9200C1(){ note_dtor("S9200C1", this);}
void  S9200C1 ::v1(){vfunc_called(this, "_ZN7S9200C12v1Ev");}
void  S9200C1 ::v2(){vfunc_called(this, "_ZN7S9200C12v2Ev");}
S9200C1 ::S9200C1(){ note_ctor("S9200C1", this);} // tgen

static void Test_S9200C1()
{
  extern Class_Descriptor cd_S9200C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S9200C1, buf);
    S9200C1 *dp, &lv = *(dp=new (buf) S9200C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S9200C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9200C1)");
    check_base_class_offset(lv, (S9200C2_nt*), 0, "S9200C1");
    check_field_offset(lv, s9200c1f0, ABISELECT(36,24), "S9200C1.s9200c1f0");
    test_class_info(&lv, &cd_S9200C1);
    dp->~S9200C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9200C1(Test_S9200C1, "S9200C1", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S9200C1C1Ev();
extern void _ZN7S9200C1D1Ev();
Name_Map name_map_S9200C1[] = {
  NSPAIR(_ZN7S9200C1C1Ev),
  NSPAIR(_ZN7S9200C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9200C2_nt;
extern VTBL_ENTRY _ZTI10S9200C2_nt[];
extern  VTBL_ENTRY _ZTV10S9200C2_nt[];
static Base_Class bases_S9200C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9200C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9200C1[];
extern void _ZN7S9200C1D1Ev();
extern void _ZN7S9200C1D0Ev();
extern void _ZN10S9200C2_nt2v3Ev();
extern void _ZN10S9200C2_nt2v4Ev();
extern void _ZN7S9200C12v1Ev();
extern void _ZN7S9200C12v2Ev();
static  VTBL_ENTRY vtc_S9200C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9200C1[0]),
  (VTBL_ENTRY)&_ZN7S9200C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9200C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9200C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9200C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S9200C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9200C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9200C1[];
extern  VTBL_ENTRY _ZTV7S9200C1[];
Class_Descriptor cd_S9200C1 = {  "S9200C1", // class name
  bases_S9200C1, 1,
  &(vtc_S9200C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S9200C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9200C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13343C3  {
  int s13343c3f0[2];
  char s13343c3f1[27];
  int s13343c3f2[2];
};
//SIG(1 S13343C3) C1{ Fi[2] Fc[27] Fi[2]}



static void Test_S13343C3()
{
  {
    init_simple_test("S13343C3");
    S13343C3 lv;
    check2(sizeof(lv), 44, "sizeof(S13343C3)");
    check2(__alignof__(lv), 4, "__alignof__(S13343C3)");
    check_field_offset(lv, s13343c3f0, 0, "S13343C3.s13343c3f0");
    check_field_offset(lv, s13343c3f1, 8, "S13343C3.s13343c3f1");
    check_field_offset(lv, s13343c3f2, 36, "S13343C3.s13343c3f2");
  }
}
static Arrange_To_Call_Me vS13343C3(Test_S13343C3, "S13343C3", 44);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13343C1  {
  int s13343c1f0[3];
  ::S11659C5_nt s13343c1f1[8];
  ::S13343C3 s13343c1f2[2];
};
//SIG(1 S13343C1) C1{ Fi[3] FC2{ Fi[4]}[8] FC3{ Fi[2] Fc[27] Fi[2]}[2]}



static void Test_S13343C1()
{
  {
    init_simple_test("S13343C1");
    S13343C1 lv;
    check2(sizeof(lv), 228, "sizeof(S13343C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13343C1)");
    check_field_offset(lv, s13343c1f0, 0, "S13343C1.s13343c1f0");
    check_field_offset(lv, s13343c1f1, 12, "S13343C1.s13343c1f1");
    check_field_offset(lv, s13343c1f2, 140, "S13343C1.s13343c1f2");
  }
}
static Arrange_To_Call_Me vS13343C1(Test_S13343C1, "S13343C1", 228);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13106C1  {
  int s13106c1f0[2];
  ::S11659C5_nt s13106c1f1[8];
  ::S13343C3 s13106c1f2[2];
};
//SIG(1 S13106C1) C1{ Fi[2] FC2{ Fi[4]}[8] FC3{ Fi[2] Fc[27] Fi[2]}[2]}



static void Test_S13106C1()
{
  {
    init_simple_test("S13106C1");
    S13106C1 lv;
    check2(sizeof(lv), 224, "sizeof(S13106C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13106C1)");
    check_field_offset(lv, s13106c1f0, 0, "S13106C1.s13106c1f0");
    check_field_offset(lv, s13106c1f1, 8, "S13106C1.s13106c1f1");
    check_field_offset(lv, s13106c1f2, 136, "S13106C1.s13106c1f2");
  }
}
static Arrange_To_Call_Me vS13106C1(Test_S13106C1, "S13106C1", 224);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11868C1  {
  ::S11764C3_nt s11868c1f0;
  ::S856C10_nt s11868c1f1;
  ::S11659C5_nt s11868c1f2;
  int s11868c1f3[2];
  void *s11868c1f4;
  ::S856C10_nt s11868c1f5;
  void *s11868c1f6;
};
//SIG(1 S11868C1) C1{ FC2{ Fp[2]} FC3{ Fl[4]} FC4{ Fi[4]} Fi[2] Fp FC3 Fp}



static void Test_S11868C1()
{
  {
    init_simple_test("S11868C1");
    S11868C1 lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S11868C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11868C1)");
    check_field_offset(lv, s11868c1f0, 0, "S11868C1.s11868c1f0");
    check_field_offset(lv, s11868c1f1, ABISELECT(16,8), "S11868C1.s11868c1f1");
    check_field_offset(lv, s11868c1f2, ABISELECT(48,24), "S11868C1.s11868c1f2");
    check_field_offset(lv, s11868c1f3, ABISELECT(64,40), "S11868C1.s11868c1f3");
    check_field_offset(lv, s11868c1f4, ABISELECT(72,48), "S11868C1.s11868c1f4");
    check_field_offset(lv, s11868c1f5, ABISELECT(80,52), "S11868C1.s11868c1f5");
    check_field_offset(lv, s11868c1f6, ABISELECT(112,68), "S11868C1.s11868c1f6");
  }
}
static Arrange_To_Call_Me vS11868C1(Test_S11868C1, "S11868C1", ABISELECT(120,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10704C1  {
  char s10704c1f0[2];
  short s10704c1f1[3];
  int s10704c1f2[2];
  ::S15691C4_nt s10704c1f3;
  ::S15691C4_nt s10704c1f4;
  ::S11659C5_nt s10704c1f5;
  ::S11659C5_nt s10704c1f6;
};
//SIG(1 S10704C1) C1{ Fc[2] Fs[3] Fi[2] FC2{ Fi[3]} FC2 FC3{ Fi[4]} FC3}



static void Test_S10704C1()
{
  {
    init_simple_test("S10704C1");
    S10704C1 lv;
    check2(sizeof(lv), 72, "sizeof(S10704C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10704C1)");
    check_field_offset(lv, s10704c1f0, 0, "S10704C1.s10704c1f0");
    check_field_offset(lv, s10704c1f1, 2, "S10704C1.s10704c1f1");
    check_field_offset(lv, s10704c1f2, 8, "S10704C1.s10704c1f2");
    check_field_offset(lv, s10704c1f3, 16, "S10704C1.s10704c1f3");
    check_field_offset(lv, s10704c1f4, 28, "S10704C1.s10704c1f4");
    check_field_offset(lv, s10704c1f5, 40, "S10704C1.s10704c1f5");
    check_field_offset(lv, s10704c1f6, 56, "S10704C1.s10704c1f6");
  }
}
static Arrange_To_Call_Me vS10704C1(Test_S10704C1, "S10704C1", 72);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11869C1  {
  ::S11764C3_nt s11869c1f0;
  ::S9728C9_nt s11869c1f1;
  ::S11659C5_nt s11869c1f2;
  int s11869c1f3[2];
  void *s11869c1f4;
  ::S9728C9_nt s11869c1f5;
  void *s11869c1f6;
};
//SIG(1 S11869C1) C1{ FC2{ Fp[2]} FC3{ FL[4]} FC4{ Fi[4]} Fi[2] Fp FC3 Fp}



static void Test_S11869C1()
{
  {
    init_simple_test("S11869C1");
    S11869C1 lv;
    check2(sizeof(lv), ABISELECT(120,104), "sizeof(S11869C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11869C1)");
    check_field_offset(lv, s11869c1f0, 0, "S11869C1.s11869c1f0");
    check_field_offset(lv, s11869c1f1, ABISELECT(16,8), "S11869C1.s11869c1f1");
    check_field_offset(lv, s11869c1f2, ABISELECT(48,40), "S11869C1.s11869c1f2");
    check_field_offset(lv, s11869c1f3, ABISELECT(64,56), "S11869C1.s11869c1f3");
    check_field_offset(lv, s11869c1f4, ABISELECT(72,64), "S11869C1.s11869c1f4");
    check_field_offset(lv, s11869c1f5, ABISELECT(80,68), "S11869C1.s11869c1f5");
    check_field_offset(lv, s11869c1f6, ABISELECT(112,100), "S11869C1.s11869c1f6");
  }
}
static Arrange_To_Call_Me vS11869C1(Test_S11869C1, "S11869C1", ABISELECT(120,104));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15698C1  {
  ::S857C9_nt s15698c1f0;
  ::S857C9_nt s15698c1f1;
  ::S857C14_nt s15698c1f2;
  void  mf15698c1(); // _ZN8S15698C19mf15698c1Ev
};
//SIG(1 S15698C1) C1{ m FC2{ m FC3{ FL[4]}} FC2 FC4{ m Fp FC5{ Fi[4]}}}


void  S15698C1 ::mf15698c1(){}

static void Test_S15698C1()
{
  {
    init_simple_test("S15698C1");
    S15698C1 lv;
    check2(sizeof(lv), ABISELECT(88,84), "sizeof(S15698C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15698C1)");
    check_field_offset(lv, s15698c1f0, 0, "S15698C1.s15698c1f0");
    check_field_offset(lv, s15698c1f1, 32, "S15698C1.s15698c1f1");
    check_field_offset(lv, s15698c1f2, 64, "S15698C1.s15698c1f2");
  }
}
static Arrange_To_Call_Me vS15698C1(Test_S15698C1, "S15698C1", ABISELECT(88,84));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15697C1  {
  ::S856C9_nt s15697c1f0;
  ::S856C9_nt s15697c1f1;
  ::S857C14_nt s15697c1f2;
  void  mf15697c1(); // _ZN8S15697C19mf15697c1Ev
};
//SIG(1 S15697C1) C1{ m FC2{ m FC3{ Fl[4]}} FC2 FC4{ m Fp FC5{ Fi[4]}}}


void  S15697C1 ::mf15697c1(){}

static void Test_S15697C1()
{
  {
    init_simple_test("S15697C1");
    S15697C1 lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S15697C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15697C1)");
    check_field_offset(lv, s15697c1f0, 0, "S15697C1.s15697c1f0");
    check_field_offset(lv, s15697c1f1, ABISELECT(32,16), "S15697C1.s15697c1f1");
    check_field_offset(lv, s15697c1f2, ABISELECT(64,32), "S15697C1.s15697c1f2");
  }
}
static Arrange_To_Call_Me vS15697C1(Test_S15697C1, "S15697C1", ABISELECT(88,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17100C2  {
  int s17100c2f0[3];
  ::S3221C18 s17100c2f1;
  void  mf17100c2(); // _ZN8S17100C29mf17100c2Ev
};
//SIG(-1 S17100C2) C1{ m Fi[3] FC2{ BC3{ m Fp Fi[2]}}}


void  S17100C2 ::mf17100c2(){}

static void Test_S17100C2()
{
  {
    init_simple_test("S17100C2");
    S17100C2 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S17100C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17100C2)");
    check_field_offset(lv, s17100c2f0, 0, "S17100C2.s17100c2f0");
    check_field_offset(lv, s17100c2f1, ABISELECT(16,12), "S17100C2.s17100c2f1");
  }
}
static Arrange_To_Call_Me vS17100C2(Test_S17100C2, "S17100C2", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17100C1  {
  int s17100c1f0[2];
  ::S17100C2 s17100c1f1;
  void  mf17100c1(); // _ZN8S17100C19mf17100c1Ev
};
//SIG(1 S17100C1) C1{ m Fi[2] FC2{ m Fi[3] FC3{ BC4{ m Fp Fi[2]}}}}


void  S17100C1 ::mf17100c1(){}

static void Test_S17100C1()
{
  {
    init_simple_test("S17100C1");
    S17100C1 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S17100C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17100C1)");
    check_field_offset(lv, s17100c1f0, 0, "S17100C1.s17100c1f0");
    check_field_offset(lv, s17100c1f1, 8, "S17100C1.s17100c1f1");
  }
}
static Arrange_To_Call_Me vS17100C1(Test_S17100C1, "S17100C1", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2598C2  : S3221C8_nt {
};
//SIG(-1 S2598C2) C1{ BC2{ m Fi}}



static void Test_S2598C2()
{
  extern Class_Descriptor cd_S2598C2;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S2598C2, buf);
    S2598C2 &lv = *(new (buf) S2598C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S2598C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2598C2)");
    check_base_class_offset(lv, (S3221C8_nt*), 0, "S2598C2");
    test_class_info(&lv, &cd_S2598C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2598C2(Test_S2598C2, "S2598C2", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S2598C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2598C2 = {  "S2598C2", // class name
  bases_S2598C2, 1,
  0, // no vftv
  0, //no vtt
  4, // 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  S2598C4_nt  {
  void *s2598c4f0[2];
  int s2598c4f1;
  void  mf2598c4(); // _ZN10S2598C4_nt8mf2598c4Ev
};
//SIG(-1 S2598C4_nt) C1{ m Fp[2] Fi}


void  S2598C4_nt ::mf2598c4(){}

//skip512 S2598C4_nt

#else // __cplusplus

Class_Descriptor cd_S2598C4_nt = {  "S2598C4_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,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  S2598C1  : S2598C2 , S2598C4_nt {
  void *s2598c1f0[2];
  int s2598c1f1;
  void *s2598c1f2;
};
//SIG(1 S2598C1) C1{ BC2{ BC3{ m Fi}} BC4{ m Fp[2] Fi} Fp[2] Fi Fp}



static void Test_S2598C1()
{
  extern Class_Descriptor cd_S2598C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S2598C1, buf);
    S2598C1 &lv = *(new (buf) S2598C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S2598C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2598C1)");
    check_base_class_offset(lv, (S3221C8_nt*)(S2598C2*), 0, "S2598C1");
    check_base_class_offset(lv, (S2598C2*), 0, "S2598C1");
    check_base_class_offset(lv, (S2598C4_nt*), ABISELECT(8,4), "S2598C1");
    check_field_offset(lv, s2598c1f0, ABISELECT(32,16), "S2598C1.s2598c1f0");
    check_field_offset(lv, s2598c1f1, ABISELECT(48,24), "S2598C1.s2598c1f1");
    check_field_offset(lv, s2598c1f2, ABISELECT(56,28), "S2598C1.s2598c1f2");
    test_class_info(&lv, &cd_S2598C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2598C1(Test_S2598C1, "S2598C1", ABISELECT(64,32));

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
extern Class_Descriptor cd_S2598C2;
extern Class_Descriptor cd_S2598C4_nt;
static Base_Class bases_S2598C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2598C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2598C4_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}};
Class_Descriptor cd_S2598C1 = {  "S2598C1", // class name
  bases_S2598C1, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(64,32), // 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  S15992C1  {
  ::S3221C4_nt s15992c1f0;
  ::S3221C17 s15992c1f1;
  void  mf15992c1(); // _ZN8S15992C19mf15992c1Ev
};
//SIG(1 S15992C1) C1{ m FC2{ m Fi[2]} FC3{ BC4{ BC5{ m Fp Fi[2]}}}}


void  S15992C1 ::mf15992c1(){}

static void Test_S15992C1()
{
  {
    init_simple_test("S15992C1");
    S15992C1 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S15992C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15992C1)");
    check_field_offset(lv, s15992c1f0, 0, "S15992C1.s15992c1f0");
    check_field_offset(lv, s15992c1f1, 8, "S15992C1.s15992c1f1");
  }
}
static Arrange_To_Call_Me vS15992C1(Test_S15992C1, "S15992C1", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8764C2_nt  {
  int s8764c2f0;
  virtual  ~S8764C2_nt(); // _ZN10S8764C2_ntD1Ev
  virtual void  v2(); // _ZN10S8764C2_nt2v2Ev
  S8764C2_nt(); // tgen
};
//SIG(-1 S8764C2_nt) C1{ vd v1 Fi}


 S8764C2_nt ::~S8764C2_nt(){ note_dtor("S8764C2_nt", this);}
void  S8764C2_nt ::v2(){vfunc_called(this, "_ZN10S8764C2_nt2v2Ev");}
S8764C2_nt ::S8764C2_nt(){ note_ctor("S8764C2_nt", this);} // tgen

//skip512 S8764C2_nt

#else // __cplusplus

extern void _ZN10S8764C2_ntC1Ev();
extern void _ZN10S8764C2_ntD1Ev();
Name_Map name_map_S8764C2_nt[] = {
  NSPAIR(_ZN10S8764C2_ntC1Ev),
  NSPAIR(_ZN10S8764C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8764C2_nt[];
extern void _ZN10S8764C2_ntD1Ev();
extern void _ZN10S8764C2_ntD0Ev();
extern void _ZN10S8764C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8764C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8764C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8764C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8764C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8764C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8764C2_nt[];
VTBL_ENTRY *P__ZTI10S8764C2_nt = _ZTI10S8764C2_nt; 
extern  VTBL_ENTRY _ZTV10S8764C2_nt[];
Class_Descriptor cd_S8764C2_nt = {  "S8764C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8764C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S8764C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8764C2_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  S8764C4_nt  {
  __tsi64 s8764c4f0[2];
  void  mf8764c4(); // _ZN10S8764C4_nt8mf8764c4Ev
};
//SIG(-1 S8764C4_nt) C1{ m FL[2]}


void  S8764C4_nt ::mf8764c4(){}

//skip512 S8764C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8764C3_nt  {
  ::S8764C4_nt s8764c3f0;
  void  mf8764c3(); // _ZN10S8764C3_nt8mf8764c3Ev
};
//SIG(-1 S8764C3_nt) C1{ m FC2{ m FL[2]}}


void  S8764C3_nt ::mf8764c3(){}

//skip512 S8764C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8764C1  : S8764C2_nt {
  ::S8764C3_nt s8764c1f0;
  virtual  ~S8764C1(); // _ZN7S8764C1D1Ev
  virtual void  v1(); // _ZN7S8764C12v1Ev
  S8764C1(); // tgen
};
//SIG(1 S8764C1) C1{ BC2{ vd v2 Fi} vd v1 FC3{ m FC4{ m FL[2]}}}


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

static void Test_S8764C1()
{
  extern Class_Descriptor cd_S8764C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S8764C1, buf);
    S8764C1 *dp, &lv = *(dp=new (buf) S8764C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S8764C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8764C1)");
    check_base_class_offset(lv, (S8764C2_nt*), 0, "S8764C1");
    check_field_offset(lv, s8764c1f0, ABISELECT(16,8), "S8764C1.s8764c1f0");
    test_class_info(&lv, &cd_S8764C1);
    dp->~S8764C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8764C1(Test_S8764C1, "S8764C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S8764C1C1Ev();
extern void _ZN7S8764C1D1Ev();
Name_Map name_map_S8764C1[] = {
  NSPAIR(_ZN7S8764C1C1Ev),
  NSPAIR(_ZN7S8764C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8764C2_nt;
extern VTBL_ENTRY _ZTI10S8764C2_nt[];
extern  VTBL_ENTRY _ZTV10S8764C2_nt[];
static Base_Class bases_S8764C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8764C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8764C1[];
extern void _ZN7S8764C1D1Ev();
extern void _ZN7S8764C1D0Ev();
extern void _ZN10S8764C2_nt2v2Ev();
extern void _ZN7S8764C12v1Ev();
static  VTBL_ENTRY vtc_S8764C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8764C1[0]),
  (VTBL_ENTRY)&_ZN7S8764C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8764C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8764C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8764C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8764C1[];
extern  VTBL_ENTRY _ZTV7S8764C1[];
Class_Descriptor cd_S8764C1 = {  "S8764C1", // class name
  bases_S8764C1, 1,
  &(vtc_S8764C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S8764C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8764C1),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  S16131C1  {
  ::S16130C2_nt s16131c1f0;
  ::S16130C2_nt s16131c1f1;
  ::S857C14_nt s16131c1f2;
  void  mf16131c1(); // _ZN8S16131C19mf16131c1Ev
};
//SIG(1 S16131C1) C1{ m FC2{ m FL[4]} FC2 FC3{ m Fp FC4{ Fi[4]}}}


void  S16131C1 ::mf16131c1(){}

static void Test_S16131C1()
{
  {
    init_simple_test("S16131C1");
    S16131C1 lv;
    check2(sizeof(lv), ABISELECT(88,84), "sizeof(S16131C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16131C1)");
    check_field_offset(lv, s16131c1f0, 0, "S16131C1.s16131c1f0");
    check_field_offset(lv, s16131c1f1, 32, "S16131C1.s16131c1f1");
    check_field_offset(lv, s16131c1f2, 64, "S16131C1.s16131c1f2");
  }
}
static Arrange_To_Call_Me vS16131C1(Test_S16131C1, "S16131C1", ABISELECT(88,84));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16744C1  {
  int s16744c1f0;
  ::S3221C4_nt s16744c1f1;
  ::S3221C18 s16744c1f2;
  void  mf16744c1(); // _ZN8S16744C19mf16744c1Ev
};
//SIG(1 S16744C1) C1{ m Fi FC2{ m Fi[2]} FC3{ BC4{ m Fp Fi[2]}}}


void  S16744C1 ::mf16744c1(){}

static void Test_S16744C1()
{
  {
    init_simple_test("S16744C1");
    S16744C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S16744C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16744C1)");
    check_field_offset(lv, s16744c1f0, 0, "S16744C1.s16744c1f0");
    check_field_offset(lv, s16744c1f1, 4, "S16744C1.s16744c1f1");
    check_field_offset(lv, s16744c1f2, ABISELECT(16,12), "S16744C1.s16744c1f2");
  }
}
static Arrange_To_Call_Me vS16744C1(Test_S16744C1, "S16744C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21854C1  {
  void *s21854c1f0[4];
  int s21854c1f1[2];
  ::S16803C4_nt s21854c1f2;
  void  mf21854c1(); // _ZN8S21854C19mf21854c1Ev
  virtual  ~S21854C1(); // _ZN8S21854C1D1Ev
  S21854C1(); // tgen
};
//SIG(1 S21854C1) C1{ vd m Fp[4] Fi[2] FC2{ m Fp Fi FC3{ m}}}


void  S21854C1 ::mf21854c1(){}
 S21854C1 ::~S21854C1(){ note_dtor("S21854C1", this);}
S21854C1 ::S21854C1(){ note_ctor("S21854C1", this);} // tgen

static void Test_S21854C1()
{
  extern Class_Descriptor cd_S21854C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S21854C1, buf);
    S21854C1 *dp, &lv = *(dp=new (buf) S21854C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S21854C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21854C1)");
    check_field_offset(lv, s21854c1f0, ABISELECT(8,4), "S21854C1.s21854c1f0");
    check_field_offset(lv, s21854c1f1, ABISELECT(40,20), "S21854C1.s21854c1f1");
    check_field_offset(lv, s21854c1f2, ABISELECT(48,28), "S21854C1.s21854c1f2");
    test_class_info(&lv, &cd_S21854C1);
    dp->~S21854C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21854C1(Test_S21854C1, "S21854C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S21854C1C1Ev();
extern void _ZN8S21854C1D1Ev();
Name_Map name_map_S21854C1[] = {
  NSPAIR(_ZN8S21854C1C1Ev),
  NSPAIR(_ZN8S21854C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21854C1[];
extern void _ZN8S21854C1D1Ev();
extern void _ZN8S21854C1D0Ev();
static  VTBL_ENTRY vtc_S21854C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21854C1[0]),
  (VTBL_ENTRY)&_ZN8S21854C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21854C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21854C1[];
extern  VTBL_ENTRY _ZTV8S21854C1[];
Class_Descriptor cd_S21854C1 = {  "S21854C1", // class name
  0,0,//no base classes
  &(vtc_S21854C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S21854C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21854C1),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  S21772C1  {
  void *s21772c1f0[2];
  char s21772c1f1;
  ::S5408C15_nt s21772c1f2;
  void  mf21772c1(); // _ZN8S21772C19mf21772c1Ev
  virtual  ~S21772C1(); // _ZN8S21772C1D1Ev
  S21772C1(); // tgen
};
//SIG(1 S21772C1) C1{ vd m Fp[2] Fc FC2{ m Fp Fi[2] FC3{ m}}}


void  S21772C1 ::mf21772c1(){}
 S21772C1 ::~S21772C1(){ note_dtor("S21772C1", this);}
S21772C1 ::S21772C1(){ note_ctor("S21772C1", this);} // tgen

static void Test_S21772C1()
{
  extern Class_Descriptor cd_S21772C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S21772C1, buf);
    S21772C1 *dp, &lv = *(dp=new (buf) S21772C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S21772C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21772C1)");
    check_field_offset(lv, s21772c1f0, ABISELECT(8,4), "S21772C1.s21772c1f0");
    check_field_offset(lv, s21772c1f1, ABISELECT(24,12), "S21772C1.s21772c1f1");
    check_field_offset(lv, s21772c1f2, ABISELECT(32,16), "S21772C1.s21772c1f2");
    test_class_info(&lv, &cd_S21772C1);
    dp->~S21772C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21772C1(Test_S21772C1, "S21772C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S21772C1C1Ev();
extern void _ZN8S21772C1D1Ev();
Name_Map name_map_S21772C1[] = {
  NSPAIR(_ZN8S21772C1C1Ev),
  NSPAIR(_ZN8S21772C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21772C1[];
extern void _ZN8S21772C1D1Ev();
extern void _ZN8S21772C1D0Ev();
static  VTBL_ENTRY vtc_S21772C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21772C1[0]),
  (VTBL_ENTRY)&_ZN8S21772C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21772C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21772C1[];
extern  VTBL_ENTRY _ZTV8S21772C1[];
Class_Descriptor cd_S21772C1 = {  "S21772C1", // class name
  0,0,//no base classes
  &(vtc_S21772C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S21772C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21772C1),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  S17775C1  {
  void *s17775c1f0;
  int s17775c1f1[2];
  char s17775c1f2[32];
  int s17775c1f3;
  char s17775c1f4;
  int s17775c1f5[3];
  __tsi64 s17775c1f6[2];
  void  mf17775c1(); // _ZN8S17775C19mf17775c1Ev
};
//SIG(1 S17775C1) C1{ m Fp Fi[2] Fc[32] Fi Fc Fi[3] FL[2]}


void  S17775C1 ::mf17775c1(){}

static void Test_S17775C1()
{
  {
    init_simple_test("S17775C1");
    S17775C1 lv;
    check2(sizeof(lv), ABISELECT(88,80), "sizeof(S17775C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17775C1)");
    check_field_offset(lv, s17775c1f0, 0, "S17775C1.s17775c1f0");
    check_field_offset(lv, s17775c1f1, ABISELECT(8,4), "S17775C1.s17775c1f1");
    check_field_offset(lv, s17775c1f2, ABISELECT(16,12), "S17775C1.s17775c1f2");
    check_field_offset(lv, s17775c1f3, ABISELECT(48,44), "S17775C1.s17775c1f3");
    check_field_offset(lv, s17775c1f4, ABISELECT(52,48), "S17775C1.s17775c1f4");
    check_field_offset(lv, s17775c1f5, ABISELECT(56,52), "S17775C1.s17775c1f5");
    check_field_offset(lv, s17775c1f6, ABISELECT(72,64), "S17775C1.s17775c1f6");
  }
}
static Arrange_To_Call_Me vS17775C1(Test_S17775C1, "S17775C1", ABISELECT(88,80));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16613C1  {
  int s16613c1f0;
  ::S239C8_nt s16613c1f1;
  void  mf16613c1(); // _ZN8S16613C19mf16613c1Ev
};
//SIG(1 S16613C1) C1{ m Fi FC2{ BC3{ BC4{ BC5{ m Fp Fi[2]}}}}}


void  S16613C1 ::mf16613c1(){}

static void Test_S16613C1()
{
  {
    init_simple_test("S16613C1");
    S16613C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S16613C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16613C1)");
    check_field_offset(lv, s16613c1f0, 0, "S16613C1.s16613c1f0");
    check_field_offset(lv, s16613c1f1, ABISELECT(8,4), "S16613C1.s16613c1f1");
  }
}
static Arrange_To_Call_Me vS16613C1(Test_S16613C1, "S16613C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12205C1  {
  int s12205c1f0;
  char s12205c1f1;
  int s12205c1f2;
  ::S16803C4_nt s12205c1f3;
  ::S16803C4_nt s12205c1f4;
  int s12205c1f5;
};
//SIG(1 S12205C1) C1{ Fi Fc Fi FC2{ m Fp Fi FC3{ m}} FC2 Fi}



static void Test_S12205C1()
{
  {
    init_simple_test("S12205C1");
    S12205C1 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S12205C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12205C1)");
    check_field_offset(lv, s12205c1f0, 0, "S12205C1.s12205c1f0");
    check_field_offset(lv, s12205c1f1, 4, "S12205C1.s12205c1f1");
    check_field_offset(lv, s12205c1f2, 8, "S12205C1.s12205c1f2");
    check_field_offset(lv, s12205c1f3, ABISELECT(16,12), "S12205C1.s12205c1f3");
    check_field_offset(lv, s12205c1f4, ABISELECT(32,24), "S12205C1.s12205c1f4");
    check_field_offset(lv, s12205c1f5, ABISELECT(48,36), "S12205C1.s12205c1f5");
  }
}
static Arrange_To_Call_Me vS12205C1(Test_S12205C1, "S12205C1", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15274C2  {
  __tsi64 s15274c2f0[2];
  short s15274c2f1;
  virtual void  v1(); // _ZN8S15274C22v1Ev
  ~S15274C2(); // tgen
  S15274C2(); // tgen
};
//SIG(1 S15274C2) C1{ v1 FL[2] Fs}


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

static void Test_S15274C2()
{
  extern Class_Descriptor cd_S15274C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S15274C2, buf);
    S15274C2 *dp, &lv = *(dp=new (buf) S15274C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S15274C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15274C2)");
    check_field_offset(lv, s15274c2f0, ABISELECT(8,4), "S15274C2.s15274c2f0");
    check_field_offset(lv, s15274c2f1, ABISELECT(24,20), "S15274C2.s15274c2f1");
    test_class_info(&lv, &cd_S15274C2);
    dp->~S15274C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15274C2(Test_S15274C2, "S15274C2", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S15274C2C1Ev();
extern void _ZN8S15274C2D1Ev();
Name_Map name_map_S15274C2[] = {
  NSPAIR(_ZN8S15274C2C1Ev),
  NSPAIR(_ZN8S15274C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S15274C2[];
extern void _ZN8S15274C22v1Ev();
static  VTBL_ENTRY vtc_S15274C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S15274C2[0]),
  (VTBL_ENTRY)&_ZN8S15274C22v1Ev,
};
extern VTBL_ENTRY _ZTI8S15274C2[];
extern  VTBL_ENTRY _ZTV8S15274C2[];
Class_Descriptor cd_S15274C2 = {  "S15274C2", // class name
  0,0,//no base classes
  &(vtc_S15274C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S15274C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S15274C2),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  S15274C1  {
  char s15274c1f0[9];
  int s15274c1f1;
  ::S15274C2 s15274c1f2[2];
  short s15274c1f3;
  void  mf15274c1(); // _ZN8S15274C19mf15274c1Ev
};
//SIG(1 S15274C1) C1{ m Fc[9] Fi FC2{ v1 FL[2] Fs}[2] Fs}


void  S15274C1 ::mf15274c1(){}

static void Test_S15274C1()
{
  {
    init_simple_test("S15274C1");
    S15274C1 lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S15274C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15274C1)");
    check_field_offset(lv, s15274c1f0, 0, "S15274C1.s15274c1f0");
    check_field_offset(lv, s15274c1f1, 12, "S15274C1.s15274c1f1");
    check_field_offset(lv, s15274c1f2, 16, "S15274C1.s15274c1f2");
    check_field_offset(lv, s15274c1f3, ABISELECT(80,64), "S15274C1.s15274c1f3");
  }
}
static Arrange_To_Call_Me vS15274C1(Test_S15274C1, "S15274C1", ABISELECT(88,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17106C1  {
  int s17106c1f0[2];
  ::S16803C4_nt s17106c1f1;
  int s17106c1f2;
  ::S16803C4_nt s17106c1f3;
  void  mf17106c1(); // _ZN8S17106C19mf17106c1Ev
};
//SIG(1 S17106C1) C1{ m Fi[2] FC2{ m Fp Fi FC3{ m}} Fi FC2}


void  S17106C1 ::mf17106c1(){}

static void Test_S17106C1()
{
  {
    init_simple_test("S17106C1");
    S17106C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S17106C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17106C1)");
    check_field_offset(lv, s17106c1f0, 0, "S17106C1.s17106c1f0");
    check_field_offset(lv, s17106c1f1, 8, "S17106C1.s17106c1f1");
    check_field_offset(lv, s17106c1f2, ABISELECT(24,20), "S17106C1.s17106c1f2");
    check_field_offset(lv, s17106c1f3, ABISELECT(32,24), "S17106C1.s17106c1f3");
  }
}
static Arrange_To_Call_Me vS17106C1(Test_S17106C1, "S17106C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11639C3  {
  int s11639c3f0[2];
  char s11639c3f1[4160];
};
//SIG(1 S11639C3) C1{ Fi[2] Fc[4160]}



static void Test_S11639C3()
{
  {
    init_simple_test("S11639C3");
    S11639C3 lv;
    check2(sizeof(lv), 4168, "sizeof(S11639C3)");
    check2(__alignof__(lv), 4, "__alignof__(S11639C3)");
    check_field_offset(lv, s11639c3f0, 0, "S11639C3.s11639c3f0");
    check_field_offset(lv, s11639c3f1, 8, "S11639C3.s11639c3f1");
  }
}
static Arrange_To_Call_Me vS11639C3(Test_S11639C3, "S11639C3", 4168);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11639C1  {
  ::S11659C5_nt s11639c1f0;
  ::S11639C3 s11639c1f1[8];
};
//SIG(1 S11639C1) C1{ FC2{ Fi[4]} FC3{ Fi[2] Fc[4160]}[8]}



static void Test_S11639C1()
{
  {
    init_simple_test("S11639C1");
    S11639C1 lv;
    check2(sizeof(lv), 33360, "sizeof(S11639C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11639C1)");
    check_field_offset(lv, s11639c1f0, 0, "S11639C1.s11639c1f0");
    check_field_offset(lv, s11639c1f1, 16, "S11639C1.s11639c1f1");
  }
}
static Arrange_To_Call_Me vS11639C1(Test_S11639C1, "S11639C1", 33360);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14635C1  {
  void *s14635c1f0[3];
  int s14635c1f1[5];
  void *s14635c1f2[3];
  int s14635c1f3;
  long s14635c1f4[2];
  void *s14635c1f5;
  int s14635c1f6;
};
//SIG(1 S14635C1) C1{ Fp[3] Fi[5] Fp[3] Fi Fl[2] Fp Fi}



static void Test_S14635C1()
{
  {
    init_simple_test("S14635C1");
    S14635C1 lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S14635C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14635C1)");
    check_field_offset(lv, s14635c1f0, 0, "S14635C1.s14635c1f0");
    check_field_offset(lv, s14635c1f1, ABISELECT(24,12), "S14635C1.s14635c1f1");
    check_field_offset(lv, s14635c1f2, ABISELECT(48,32), "S14635C1.s14635c1f2");
    check_field_offset(lv, s14635c1f3, ABISELECT(72,44), "S14635C1.s14635c1f3");
    check_field_offset(lv, s14635c1f4, ABISELECT(80,48), "S14635C1.s14635c1f4");
    check_field_offset(lv, s14635c1f5, ABISELECT(96,56), "S14635C1.s14635c1f5");
    check_field_offset(lv, s14635c1f6, ABISELECT(104,60), "S14635C1.s14635c1f6");
  }
}
static Arrange_To_Call_Me vS14635C1(Test_S14635C1, "S14635C1", ABISELECT(112,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12071C1  {
  ::S3221C13_nt s12071c1f0;
  ::S3221C13_nt s12071c1f1;
  ::S3221C13_nt s12071c1f2;
  ::S3221C13_nt s12071c1f3;
  ::S3221C13_nt s12071c1f4;
  ::S3221C13_nt s12071c1f5;
};
//SIG(1 S12071C1) C1{ FC2{ m Fi[3]} FC2 FC2 FC2 FC2 FC2}



static void Test_S12071C1()
{
  {
    init_simple_test("S12071C1");
    S12071C1 lv;
    check2(sizeof(lv), 72, "sizeof(S12071C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12071C1)");
    check_field_offset(lv, s12071c1f0, 0, "S12071C1.s12071c1f0");
    check_field_offset(lv, s12071c1f1, 12, "S12071C1.s12071c1f1");
    check_field_offset(lv, s12071c1f2, 24, "S12071C1.s12071c1f2");
    check_field_offset(lv, s12071c1f3, 36, "S12071C1.s12071c1f3");
    check_field_offset(lv, s12071c1f4, 48, "S12071C1.s12071c1f4");
    check_field_offset(lv, s12071c1f5, 60, "S12071C1.s12071c1f5");
  }
}
static Arrange_To_Call_Me vS12071C1(Test_S12071C1, "S12071C1", 72);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5858C1  : S3221C8_nt {
  ::S16803C4_nt s5858c1f0;
  char s5858c1f1;
};
//SIG(1 S5858C1) C1{ BC2{ m Fi} FC3{ m Fp Fi FC4{ m}} Fc}



static void Test_S5858C1()
{
  extern Class_Descriptor cd_S5858C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S5858C1, buf);
    S5858C1 &lv = *(new (buf) S5858C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S5858C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5858C1)");
    check_base_class_offset(lv, (S3221C8_nt*), 0, "S5858C1");
    check_field_offset(lv, s5858c1f0, ABISELECT(8,4), "S5858C1.s5858c1f0");
    check_field_offset(lv, s5858c1f1, ABISELECT(24,16), "S5858C1.s5858c1f1");
    test_class_info(&lv, &cd_S5858C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5858C1(Test_S5858C1, "S5858C1", ABISELECT(32,20));

#else // __cplusplus

extern Class_Descriptor cd_S3221C8_nt;
extern VTBL_ENTRY _ZTI10S3221C8_nt[];
static Base_Class bases_S5858C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3221C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5858C1 = {  "S5858C1", // class name
  bases_S5858C1, 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  S12049C1  {
  ::S3221C4_nt s12049c1f0;
  ::S3221C13_nt s12049c1f1;
  ::S3221C13_nt s12049c1f2;
  void *s12049c1f3;
};
//SIG(1 S12049C1) C1{ FC2{ m Fi[2]} FC3{ m Fi[3]} FC3 Fp}



static void Test_S12049C1()
{
  {
    init_simple_test("S12049C1");
    S12049C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S12049C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12049C1)");
    check_field_offset(lv, s12049c1f0, 0, "S12049C1.s12049c1f0");
    check_field_offset(lv, s12049c1f1, 8, "S12049C1.s12049c1f1");
    check_field_offset(lv, s12049c1f2, 20, "S12049C1.s12049c1f2");
    check_field_offset(lv, s12049c1f3, 32, "S12049C1.s12049c1f3");
  }
}
static Arrange_To_Call_Me vS12049C1(Test_S12049C1, "S12049C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12479C1  {
  int s12479c1f0;
  ::S11659C5_nt s12479c1f1;
  int s12479c1f2;
  ::S9728C7_nt s12479c1f3;
  ::S9728C7_nt s12479c1f4;
  ::S9728C7_nt s12479c1f5;
};
//SIG(1 S12479C1) C1{ Fi FC2{ Fi[4]} Fi FC3{ FL} FC3 FC3}



static void Test_S12479C1()
{
  {
    init_simple_test("S12479C1");
    S12479C1 lv;
    check2(sizeof(lv), 48, "sizeof(S12479C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12479C1)");
    check_field_offset(lv, s12479c1f0, 0, "S12479C1.s12479c1f0");
    check_field_offset(lv, s12479c1f1, 4, "S12479C1.s12479c1f1");
    check_field_offset(lv, s12479c1f2, 20, "S12479C1.s12479c1f2");
    check_field_offset(lv, s12479c1f3, 24, "S12479C1.s12479c1f3");
    check_field_offset(lv, s12479c1f4, 32, "S12479C1.s12479c1f4");
    check_field_offset(lv, s12479c1f5, 40, "S12479C1.s12479c1f5");
  }
}
static Arrange_To_Call_Me vS12479C1(Test_S12479C1, "S12479C1", 48);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12478C3_nt  {
  long s12478c3f0;
};
//SIG(-1 S12478C3_nt) C1{ Fl}



//skip512 S12478C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12478C1  {
  int s12478c1f0;
  ::S11659C5_nt s12478c1f1;
  int s12478c1f2;
  ::S12478C3_nt s12478c1f3;
  ::S12478C3_nt s12478c1f4;
  ::S12478C3_nt s12478c1f5;
};
//SIG(1 S12478C1) C1{ Fi FC2{ Fi[4]} Fi FC3{ Fl} FC3 FC3}



static void Test_S12478C1()
{
  {
    init_simple_test("S12478C1");
    S12478C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S12478C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12478C1)");
    check_field_offset(lv, s12478c1f0, 0, "S12478C1.s12478c1f0");
    check_field_offset(lv, s12478c1f1, 4, "S12478C1.s12478c1f1");
    check_field_offset(lv, s12478c1f2, 20, "S12478C1.s12478c1f2");
    check_field_offset(lv, s12478c1f3, 24, "S12478C1.s12478c1f3");
    check_field_offset(lv, s12478c1f4, ABISELECT(32,28), "S12478C1.s12478c1f4");
    check_field_offset(lv, s12478c1f5, ABISELECT(40,32), "S12478C1.s12478c1f5");
  }
}
static Arrange_To_Call_Me vS12478C1(Test_S12478C1, "S12478C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12514C1  {
  int s12514c1f0;
  ::S13396C6 s12514c1f1;
  ::S13396C6 s12514c1f2;
  ::S13396C6 s12514c1f3;
  int s12514c1f4[3];
};
//SIG(1 S12514C1) C1{ Fi FC2{ Fp Fi[4]} FC2 FC2 Fi[3]}



static void Test_S12514C1()
{
  {
    init_simple_test("S12514C1");
    S12514C1 lv;
    check2(sizeof(lv), ABISELECT(96,76), "sizeof(S12514C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12514C1)");
    check_field_offset(lv, s12514c1f0, 0, "S12514C1.s12514c1f0");
    check_field_offset(lv, s12514c1f1, ABISELECT(8,4), "S12514C1.s12514c1f1");
    check_field_offset(lv, s12514c1f2, ABISELECT(32,24), "S12514C1.s12514c1f2");
    check_field_offset(lv, s12514c1f3, ABISELECT(56,44), "S12514C1.s12514c1f3");
    check_field_offset(lv, s12514c1f4, ABISELECT(80,64), "S12514C1.s12514c1f4");
  }
}
static Arrange_To_Call_Me vS12514C1(Test_S12514C1, "S12514C1", ABISELECT(96,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8695C2  {
  int s8695c2f0;
  char s8695c2f1[20];
  long s8695c2f2;
  virtual  ~S8695C2(); // _ZN7S8695C2D1Ev
  virtual void  v2(); // _ZN7S8695C22v2Ev
  S8695C2(); // tgen
};
//SIG(-1 S8695C2) C1{ vd v1 Fi Fc[20] Fl}


 S8695C2 ::~S8695C2(){ note_dtor("S8695C2", this);}
void  S8695C2 ::v2(){vfunc_called(this, "_ZN7S8695C22v2Ev");}
S8695C2 ::S8695C2(){ note_ctor("S8695C2", this);} // tgen

static void Test_S8695C2()
{
  extern Class_Descriptor cd_S8695C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S8695C2, buf);
    S8695C2 *dp, &lv = *(dp=new (buf) S8695C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S8695C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8695C2)");
    check_field_offset(lv, s8695c2f0, ABISELECT(8,4), "S8695C2.s8695c2f0");
    check_field_offset(lv, s8695c2f1, ABISELECT(12,8), "S8695C2.s8695c2f1");
    check_field_offset(lv, s8695c2f2, ABISELECT(32,28), "S8695C2.s8695c2f2");
    test_class_info(&lv, &cd_S8695C2);
    dp->~S8695C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8695C2(Test_S8695C2, "S8695C2", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN7S8695C2C1Ev();
extern void _ZN7S8695C2D1Ev();
Name_Map name_map_S8695C2[] = {
  NSPAIR(_ZN7S8695C2C1Ev),
  NSPAIR(_ZN7S8695C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8695C2[];
extern void _ZN7S8695C2D1Ev();
extern void _ZN7S8695C2D0Ev();
extern void _ZN7S8695C22v2Ev();
static  VTBL_ENTRY vtc_S8695C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8695C2[0]),
  (VTBL_ENTRY)&_ZN7S8695C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8695C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8695C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8695C2[];
extern  VTBL_ENTRY _ZTV7S8695C2[];
Class_Descriptor cd_S8695C2 = {  "S8695C2", // class name
  0,0,//no base classes
  &(vtc_S8695C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI7S8695C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8695C2),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  S8695C1  : S8695C2 {
  virtual  ~S8695C1(); // _ZN7S8695C1D1Ev
  virtual void  v1(); // _ZN7S8695C12v1Ev
  S8695C1(); // tgen
};
//SIG(1 S8695C1) C1{ BC2{ vd v2 Fi Fc[20] Fl} vd v1}


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

static void Test_S8695C1()
{
  extern Class_Descriptor cd_S8695C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S8695C1, buf);
    S8695C1 *dp, &lv = *(dp=new (buf) S8695C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S8695C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8695C1)");
    check_base_class_offset(lv, (S8695C2*), 0, "S8695C1");
    test_class_info(&lv, &cd_S8695C1);
    dp->~S8695C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8695C1(Test_S8695C1, "S8695C1", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN7S8695C1C1Ev();
extern void _ZN7S8695C1D1Ev();
Name_Map name_map_S8695C1[] = {
  NSPAIR(_ZN7S8695C1C1Ev),
  NSPAIR(_ZN7S8695C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8695C2;
extern VTBL_ENTRY _ZTI7S8695C2[];
extern  VTBL_ENTRY _ZTV7S8695C2[];
static Base_Class bases_S8695C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8695C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8695C1[];
extern void _ZN7S8695C1D1Ev();
extern void _ZN7S8695C1D0Ev();
extern void _ZN7S8695C22v2Ev();
extern void _ZN7S8695C12v1Ev();
static  VTBL_ENTRY vtc_S8695C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8695C1[0]),
  (VTBL_ENTRY)&_ZN7S8695C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8695C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8695C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8695C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8695C1[];
extern  VTBL_ENTRY _ZTV7S8695C1[];
Class_Descriptor cd_S8695C1 = {  "S8695C1", // class name
  bases_S8695C1, 1,
  &(vtc_S8695C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI7S8695C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8695C1),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  S11644C1  {
  ::S11659C5_nt s11644c1f0[2];
  ::S11659C5_nt s11644c1f1[4];
  int s11644c1f2[14];
};
//SIG(1 S11644C1) C1{ FC2{ Fi[4]}[2] FC2[4] Fi[14]}



static void Test_S11644C1()
{
  {
    init_simple_test("S11644C1");
    S11644C1 lv;
    check2(sizeof(lv), 152, "sizeof(S11644C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11644C1)");
    check_field_offset(lv, s11644c1f0, 0, "S11644C1.s11644c1f0");
    check_field_offset(lv, s11644c1f1, 32, "S11644C1.s11644c1f1");
    check_field_offset(lv, s11644c1f2, 96, "S11644C1.s11644c1f2");
  }
}
static Arrange_To_Call_Me vS11644C1(Test_S11644C1, "S11644C1", 152);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6773C2_nt  {
  virtual  ~S6773C2_nt(); // _ZN10S6773C2_ntD1Ev
  virtual void  v3(); // _ZN10S6773C2_nt2v3Ev
  virtual void  v4(); // _ZN10S6773C2_nt2v4Ev
  S6773C2_nt(); // tgen
};
//SIG(-1 S6773C2_nt) C1{ vd v1 v2}


 S6773C2_nt ::~S6773C2_nt(){ note_dtor("S6773C2_nt", this);}
void  S6773C2_nt ::v3(){vfunc_called(this, "_ZN10S6773C2_nt2v3Ev");}
void  S6773C2_nt ::v4(){vfunc_called(this, "_ZN10S6773C2_nt2v4Ev");}
S6773C2_nt ::S6773C2_nt(){ note_ctor("S6773C2_nt", this);} // tgen

//skip512 S6773C2_nt

#else // __cplusplus

extern void _ZN10S6773C2_ntC1Ev();
extern void _ZN10S6773C2_ntD1Ev();
Name_Map name_map_S6773C2_nt[] = {
  NSPAIR(_ZN10S6773C2_ntC1Ev),
  NSPAIR(_ZN10S6773C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6773C2_nt[];
extern void _ZN10S6773C2_ntD1Ev();
extern void _ZN10S6773C2_ntD0Ev();
extern void _ZN10S6773C2_nt2v3Ev();
extern void _ZN10S6773C2_nt2v4Ev();
static  VTBL_ENTRY vtc_S6773C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6773C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S6773C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S6773C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S6773C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S6773C2_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S6773C2_nt[];
VTBL_ENTRY *P__ZTI10S6773C2_nt = _ZTI10S6773C2_nt; 
extern  VTBL_ENTRY _ZTV10S6773C2_nt[];
Class_Descriptor cd_S6773C2_nt = {  "S6773C2_nt", // class name
  0,0,//no base classes
  &(vtc_S6773C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S6773C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6773C2_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  S6773C1  : S6773C2_nt {
  void *s6773c1f0[5];
  virtual  ~S6773C1(); // _ZN7S6773C1D1Ev
  virtual void  v1(); // _ZN7S6773C12v1Ev
  virtual void  v2(); // _ZN7S6773C12v2Ev
  S6773C1(); // tgen
};
//SIG(1 S6773C1) C1{ BC2{ vd v3 v4} vd v1 v2 Fp[5]}


 S6773C1 ::~S6773C1(){ note_dtor("S6773C1", this);}
void  S6773C1 ::v1(){vfunc_called(this, "_ZN7S6773C12v1Ev");}
void  S6773C1 ::v2(){vfunc_called(this, "_ZN7S6773C12v2Ev");}
S6773C1 ::S6773C1(){ note_ctor("S6773C1", this);} // tgen

static void Test_S6773C1()
{
  extern Class_Descriptor cd_S6773C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S6773C1, buf);
    S6773C1 *dp, &lv = *(dp=new (buf) S6773C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S6773C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6773C1)");
    check_base_class_offset(lv, (S6773C2_nt*), 0, "S6773C1");
    check_field_offset(lv, s6773c1f0, ABISELECT(8,4), "S6773C1.s6773c1f0");
    test_class_info(&lv, &cd_S6773C1);
    dp->~S6773C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6773C1(Test_S6773C1, "S6773C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S6773C1C1Ev();
extern void _ZN7S6773C1D1Ev();
Name_Map name_map_S6773C1[] = {
  NSPAIR(_ZN7S6773C1C1Ev),
  NSPAIR(_ZN7S6773C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6773C2_nt;
extern VTBL_ENTRY _ZTI10S6773C2_nt[];
extern  VTBL_ENTRY _ZTV10S6773C2_nt[];
static Base_Class bases_S6773C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6773C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6773C1[];
extern void _ZN7S6773C1D1Ev();
extern void _ZN7S6773C1D0Ev();
extern void _ZN10S6773C2_nt2v3Ev();
extern void _ZN10S6773C2_nt2v4Ev();
extern void _ZN7S6773C12v1Ev();
extern void _ZN7S6773C12v2Ev();
static  VTBL_ENTRY vtc_S6773C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6773C1[0]),
  (VTBL_ENTRY)&_ZN7S6773C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6773C1D0Ev,
  (VTBL_ENTRY)&_ZN10S6773C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S6773C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S6773C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6773C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6773C1[];
extern  VTBL_ENTRY _ZTV7S6773C1[];
Class_Descriptor cd_S6773C1 = {  "S6773C1", // class name
  bases_S6773C1, 1,
  &(vtc_S6773C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S6773C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6773C1),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  S16721C1  {
  int s16721c1f0;
  ::S2632C4_nt s16721c1f1;
  int s16721c1f2[2];
  void  mf16721c1(); // _ZN8S16721C19mf16721c1Ev
};
//SIG(1 S16721C1) C1{ m Fi FC2{ m FC3{ m Fp}} Fi[2]}


void  S16721C1 ::mf16721c1(){}

static void Test_S16721C1()
{
  {
    init_simple_test("S16721C1");
    S16721C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S16721C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16721C1)");
    check_field_offset(lv, s16721c1f0, 0, "S16721C1.s16721c1f0");
    check_field_offset(lv, s16721c1f1, ABISELECT(8,4), "S16721C1.s16721c1f1");
    check_field_offset(lv, s16721c1f2, ABISELECT(16,8), "S16721C1.s16721c1f2");
  }
}
static Arrange_To_Call_Me vS16721C1(Test_S16721C1, "S16721C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16482C2  {
  void *s16482c2f0;
  int s16482c2f1;
  virtual void  v1(); // _ZN8S16482C22v1Ev
  ~S16482C2(); // tgen
  S16482C2(); // tgen
};
//SIG(-1 S16482C2) C1{ v1 Fp Fi}


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

static void Test_S16482C2()
{
  extern Class_Descriptor cd_S16482C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S16482C2, buf);
    S16482C2 *dp, &lv = *(dp=new (buf) S16482C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S16482C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16482C2)");
    check_field_offset(lv, s16482c2f0, ABISELECT(8,4), "S16482C2.s16482c2f0");
    check_field_offset(lv, s16482c2f1, ABISELECT(16,8), "S16482C2.s16482c2f1");
    test_class_info(&lv, &cd_S16482C2);
    dp->~S16482C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16482C2(Test_S16482C2, "S16482C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S16482C2C1Ev();
extern void _ZN8S16482C2D1Ev();
Name_Map name_map_S16482C2[] = {
  NSPAIR(_ZN8S16482C2C1Ev),
  NSPAIR(_ZN8S16482C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S16482C2[];
extern void _ZN8S16482C22v1Ev();
static  VTBL_ENTRY vtc_S16482C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S16482C2[0]),
  (VTBL_ENTRY)&_ZN8S16482C22v1Ev,
};
extern VTBL_ENTRY _ZTI8S16482C2[];
extern  VTBL_ENTRY _ZTV8S16482C2[];
Class_Descriptor cd_S16482C2 = {  "S16482C2", // class name
  0,0,//no base classes
  &(vtc_S16482C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S16482C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S16482C2),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  S16482C1  {
  ::S16482C2 s16482c1f0;
  int s16482c1f1;
  void *s16482c1f2;
  ::S5408C19_nt s16482c1f3;
  void  mf16482c1(); // _ZN8S16482C19mf16482c1Ev
};
//SIG(1 S16482C1) C1{ m FC2{ v1 Fp Fi} Fi Fp FC3{}}


void  S16482C1 ::mf16482c1(){}

static void Test_S16482C1()
{
  {
    init_simple_test("S16482C1");
    S16482C1 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S16482C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16482C1)");
    check_field_offset(lv, s16482c1f0, 0, "S16482C1.s16482c1f0");
    check_field_offset(lv, s16482c1f1, ABISELECT(24,12), "S16482C1.s16482c1f1");
    check_field_offset(lv, s16482c1f2, ABISELECT(32,16), "S16482C1.s16482c1f2");
    check_field_offset(lv, s16482c1f3, ABISELECT(40,20), "S16482C1.s16482c1f3");
  }
}
static Arrange_To_Call_Me vS16482C1(Test_S16482C1, "S16482C1", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6369C2  {
  __tsi64 s6369c2f0[2];
  short s6369c2f1;
  virtual void  v1(); // _ZN7S6369C22v1Ev
  ~S6369C2(); // tgen
  S6369C2(); // tgen
};
//SIG(-1 S6369C2) C1{ v1 FL[2] Fs}


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

static void Test_S6369C2()
{
  extern Class_Descriptor cd_S6369C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S6369C2, buf);
    S6369C2 *dp, &lv = *(dp=new (buf) S6369C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S6369C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6369C2)");
    check_field_offset(lv, s6369c2f0, ABISELECT(8,4), "S6369C2.s6369c2f0");
    check_field_offset(lv, s6369c2f1, ABISELECT(24,20), "S6369C2.s6369c2f1");
    test_class_info(&lv, &cd_S6369C2);
    dp->~S6369C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6369C2(Test_S6369C2, "S6369C2", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S6369C2C1Ev();
extern void _ZN7S6369C2D1Ev();
Name_Map name_map_S6369C2[] = {
  NSPAIR(_ZN7S6369C2C1Ev),
  NSPAIR(_ZN7S6369C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6369C2[];
extern void _ZN7S6369C22v1Ev();
static  VTBL_ENTRY vtc_S6369C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6369C2[0]),
  (VTBL_ENTRY)&_ZN7S6369C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6369C2[];
extern  VTBL_ENTRY _ZTV7S6369C2[];
Class_Descriptor cd_S6369C2 = {  "S6369C2", // class name
  0,0,//no base classes
  &(vtc_S6369C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S6369C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6369C2),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  S6369C1  : S6369C2 {
  int s6369c1f0;
  ::S6369C2 s6369c1f1[10];
  ~S6369C1(); // tgen
  S6369C1(); // tgen
};
//SIG(1 S6369C1) C1{ BC2{ v1 FL[2] Fs} Fi FC2[10]}


S6369C1 ::~S6369C1(){ note_dtor("S6369C1", this);} // tgen
S6369C1 ::S6369C1(){ note_ctor("S6369C1", this);} // tgen

static void Test_S6369C1()
{
  extern Class_Descriptor cd_S6369C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,68)];
    init_test(&cd_S6369C1, buf);
    S6369C1 *dp, &lv = *(dp=new (buf) S6369C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,268), "sizeof(S6369C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6369C1)");
    check_base_class_offset(lv, (S6369C2*), 0, "S6369C1");
    check_field_offset(lv, s6369c1f0, ABISELECT(28,24), "S6369C1.s6369c1f0");
    check_field_offset(lv, s6369c1f1, ABISELECT(32,28), "S6369C1.s6369c1f1");
    test_class_info(&lv, &cd_S6369C1);
    dp->~S6369C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6369C1(Test_S6369C1, "S6369C1", ABISELECT(352,268));

#else // __cplusplus

extern void _ZN7S6369C1C1Ev();
extern void _ZN7S6369C1D1Ev();
Name_Map name_map_S6369C1[] = {
  NSPAIR(_ZN7S6369C1C1Ev),
  NSPAIR(_ZN7S6369C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6369C2;
extern VTBL_ENTRY _ZTI7S6369C2[];
extern  VTBL_ENTRY _ZTV7S6369C2[];
static Base_Class bases_S6369C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6369C2,    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 _ZTI7S6369C1[];
extern void _ZN7S6369C22v1Ev();
static  VTBL_ENTRY vtc_S6369C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6369C1[0]),
  (VTBL_ENTRY)&_ZN7S6369C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6369C1[];
extern  VTBL_ENTRY _ZTV7S6369C1[];
Class_Descriptor cd_S6369C1 = {  "S6369C1", // class name
  bases_S6369C1, 1,
  &(vtc_S6369C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,268), // object size
  NSPAIRA(_ZTI7S6369C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6369C1),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  S13463C1  {
  int s13463c1f0[4];
  ::S13396C3_nt s13463c1f1;
  int s13463c1f2;
  ::S13396C3_nt s13463c1f3;
  int s13463c1f4[2];
};
//SIG(1 S13463C1) C1{ Fi[4] FC2{ Fi} Fi FC2 Fi[2]}



static void Test_S13463C1()
{
  {
    init_simple_test("S13463C1");
    S13463C1 lv;
    check2(sizeof(lv), 36, "sizeof(S13463C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13463C1)");
    check_field_offset(lv, s13463c1f0, 0, "S13463C1.s13463c1f0");
    check_field_offset(lv, s13463c1f1, 16, "S13463C1.s13463c1f1");
    check_field_offset(lv, s13463c1f2, 20, "S13463C1.s13463c1f2");
    check_field_offset(lv, s13463c1f3, 24, "S13463C1.s13463c1f3");
    check_field_offset(lv, s13463c1f4, 28, "S13463C1.s13463c1f4");
  }
}
static Arrange_To_Call_Me vS13463C1(Test_S13463C1, "S13463C1", 36);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6207C1  : S16130C17_nt {
  int s6207c1f0[3];
  ::S11659C5_nt s6207c1f1[4];
};
//SIG(1 S6207C1) C1{ BC2{ m} Fi[3] FC3{ Fi[4]}[4]}



static void Test_S6207C1()
{
  extern Class_Descriptor cd_S6207C1;
  void *lvp;
  {
    int buf[20];
    init_test(&cd_S6207C1, buf);
    S6207C1 &lv = *(new (buf) S6207C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 76, "sizeof(S6207C1)");
    check2(__alignof__(lv), 4, "__alignof__(S6207C1)");
    check_base_class_offset(lv, (S16130C17_nt*), 0, "S6207C1");
    check_field_offset(lv, s6207c1f0, 0, "S6207C1.s6207c1f0");
    check_field_offset(lv, s6207c1f1, 12, "S6207C1.s6207c1f1");
    test_class_info(&lv, &cd_S6207C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6207C1(Test_S6207C1, "S6207C1", 76);

#else // __cplusplus

extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
static Base_Class bases_S6207C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6207C1 = {  "S6207C1", // class name
  bases_S6207C1, 1,
  0, // no vftv
  0, //no vtt
  76, // 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  S13018C1  {
  int s13018c1f0[2];
  char s13018c1f1[32];
  int s13018c1f2;
  void *s13018c1f3;
  int s13018c1f4[4];
};
//SIG(1 S13018C1) C1{ Fi[2] Fc[32] Fi Fp Fi[4]}



static void Test_S13018C1()
{
  {
    init_simple_test("S13018C1");
    S13018C1 lv;
    check2(sizeof(lv), ABISELECT(72,64), "sizeof(S13018C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13018C1)");
    check_field_offset(lv, s13018c1f0, 0, "S13018C1.s13018c1f0");
    check_field_offset(lv, s13018c1f1, 8, "S13018C1.s13018c1f1");
    check_field_offset(lv, s13018c1f2, 40, "S13018C1.s13018c1f2");
    check_field_offset(lv, s13018c1f3, ABISELECT(48,44), "S13018C1.s13018c1f3");
    check_field_offset(lv, s13018c1f4, ABISELECT(56,48), "S13018C1.s13018c1f4");
  }
}
static Arrange_To_Call_Me vS13018C1(Test_S13018C1, "S13018C1", ABISELECT(72,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17124C1  {
  int s17124c1f0[2];
  void *s17124c1f1;
  char s17124c1f2[17];
  int s17124c1f3[2];
  void  mf17124c1(); // _ZN8S17124C19mf17124c1Ev
};
//SIG(1 S17124C1) C1{ m Fi[2] Fp Fc[17] Fi[2]}


void  S17124C1 ::mf17124c1(){}

static void Test_S17124C1()
{
  {
    init_simple_test("S17124C1");
    S17124C1 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S17124C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17124C1)");
    check_field_offset(lv, s17124c1f0, 0, "S17124C1.s17124c1f0");
    check_field_offset(lv, s17124c1f1, 8, "S17124C1.s17124c1f1");
    check_field_offset(lv, s17124c1f2, ABISELECT(16,12), "S17124C1.s17124c1f2");
    check_field_offset(lv, s17124c1f3, ABISELECT(36,32), "S17124C1.s17124c1f3");
  }
}
static Arrange_To_Call_Me vS17124C1(Test_S17124C1, "S17124C1", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16477C1  {
  ::S16130C17_nt s16477c1f0;
  int s16477c1f1[3];
  unsigned int s16477c1f2:1;
  unsigned int s16477c1f3:1;
  void  mf16477c1(); // _ZN8S16477C19mf16477c1Ev
};
//SIG(1 S16477C1) C1{ m FC2{ m} Fi[3] Fi:1 Fi:1}


void  S16477C1 ::mf16477c1(){}

static void Test_S16477C1()
{
  {
    init_simple_test("S16477C1");
    static S16477C1 lv;
    check2(sizeof(lv), 20, "sizeof(S16477C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16477C1)");
    check_field_offset(lv, s16477c1f0, 0, "S16477C1.s16477c1f0");
    check_field_offset(lv, s16477c1f1, 4, "S16477C1.s16477c1f1");
    set_bf_and_test(lv, s16477c1f2, 16, 0, 1, 1, "S16477C1");
    set_bf_and_test(lv, s16477c1f3, 16, 1, 1, 1, "S16477C1");
  }
}
static Arrange_To_Call_Me vS16477C1(Test_S16477C1, "S16477C1", 20);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17183C1  {
  int s17183c1f0[3];
  ::S11659C5_nt s17183c1f1;
  int s17183c1f2;
  char s17183c1f3;
  void  mf17183c1(); // _ZN8S17183C19mf17183c1Ev
};
//SIG(1 S17183C1) C1{ m Fi[3] FC2{ Fi[4]} Fi Fc}


void  S17183C1 ::mf17183c1(){}

static void Test_S17183C1()
{
  {
    init_simple_test("S17183C1");
    S17183C1 lv;
    check2(sizeof(lv), 36, "sizeof(S17183C1)");
    check2(__alignof__(lv), 4, "__alignof__(S17183C1)");
    check_field_offset(lv, s17183c1f0, 0, "S17183C1.s17183c1f0");
    check_field_offset(lv, s17183c1f1, 12, "S17183C1.s17183c1f1");
    check_field_offset(lv, s17183c1f2, 28, "S17183C1.s17183c1f2");
    check_field_offset(lv, s17183c1f3, 32, "S17183C1.s17183c1f3");
  }
}
static Arrange_To_Call_Me vS17183C1(Test_S17183C1, "S17183C1", 36);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6537C2  {
  void *s6537c2f0;
  int s6537c2f1;
  virtual void  v2(); // _ZN7S6537C22v2Ev
  ~S6537C2(); // tgen
  S6537C2(); // tgen
};
//SIG(-1 S6537C2) C1{ v1 Fp Fi}


void  S6537C2 ::v2(){vfunc_called(this, "_ZN7S6537C22v2Ev");}
S6537C2 ::~S6537C2(){ note_dtor("S6537C2", this);} // tgen
S6537C2 ::S6537C2(){ note_ctor("S6537C2", this);} // tgen

static void Test_S6537C2()
{
  extern Class_Descriptor cd_S6537C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6537C2, buf);
    S6537C2 *dp, &lv = *(dp=new (buf) S6537C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6537C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6537C2)");
    check_field_offset(lv, s6537c2f0, ABISELECT(8,4), "S6537C2.s6537c2f0");
    check_field_offset(lv, s6537c2f1, ABISELECT(16,8), "S6537C2.s6537c2f1");
    test_class_info(&lv, &cd_S6537C2);
    dp->~S6537C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6537C2(Test_S6537C2, "S6537C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6537C2C1Ev();
extern void _ZN7S6537C2D1Ev();
Name_Map name_map_S6537C2[] = {
  NSPAIR(_ZN7S6537C2C1Ev),
  NSPAIR(_ZN7S6537C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6537C2[];
extern void _ZN7S6537C22v2Ev();
static  VTBL_ENTRY vtc_S6537C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6537C2[0]),
  (VTBL_ENTRY)&_ZN7S6537C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6537C2[];
extern  VTBL_ENTRY _ZTV7S6537C2[];
Class_Descriptor cd_S6537C2 = {  "S6537C2", // class name
  0,0,//no base classes
  &(vtc_S6537C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6537C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6537C2),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  S6537C1  : S6537C2 {
  int s6537c1f0;
  ::S6537C2 s6537c1f1;
  virtual void  v1(); // _ZN7S6537C12v1Ev
  ~S6537C1(); // tgen
  S6537C1(); // tgen
};
//SIG(1 S6537C1) C1{ BC2{ v2 Fp Fi} v1 Fi FC2}


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

static void Test_S6537C1()
{
  extern Class_Descriptor cd_S6537C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S6537C1, buf);
    S6537C1 *dp, &lv = *(dp=new (buf) S6537C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S6537C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6537C1)");
    check_base_class_offset(lv, (S6537C2*), 0, "S6537C1");
    check_field_offset(lv, s6537c1f0, ABISELECT(20,12), "S6537C1.s6537c1f0");
    check_field_offset(lv, s6537c1f1, ABISELECT(24,16), "S6537C1.s6537c1f1");
    test_class_info(&lv, &cd_S6537C1);
    dp->~S6537C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6537C1(Test_S6537C1, "S6537C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S6537C1C1Ev();
extern void _ZN7S6537C1D1Ev();
Name_Map name_map_S6537C1[] = {
  NSPAIR(_ZN7S6537C1C1Ev),
  NSPAIR(_ZN7S6537C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6537C2;
extern VTBL_ENTRY _ZTI7S6537C2[];
extern  VTBL_ENTRY _ZTV7S6537C2[];
static Base_Class bases_S6537C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6537C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6537C1[];
extern void _ZN7S6537C22v2Ev();
extern void _ZN7S6537C12v1Ev();
static  VTBL_ENTRY vtc_S6537C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6537C1[0]),
  (VTBL_ENTRY)&_ZN7S6537C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6537C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S6537C1[];
extern  VTBL_ENTRY _ZTV7S6537C1[];
Class_Descriptor cd_S6537C1 = {  "S6537C1", // class name
  bases_S6537C1, 1,
  &(vtc_S6537C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S6537C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6537C1),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  S13460C1  {
  int s13460c1f0[4];
  ::S11659C5_nt s13460c1f1;
  void *s13460c1f2[40];
};
//SIG(1 S13460C1) C1{ Fi[4] FC2{ Fi[4]} Fp[40]}



static void Test_S13460C1()
{
  {
    init_simple_test("S13460C1");
    S13460C1 lv;
    check2(sizeof(lv), ABISELECT(352,192), "sizeof(S13460C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13460C1)");
    check_field_offset(lv, s13460c1f0, 0, "S13460C1.s13460c1f0");
    check_field_offset(lv, s13460c1f1, 16, "S13460C1.s13460c1f1");
    check_field_offset(lv, s13460c1f2, 32, "S13460C1.s13460c1f2");
  }
}
static Arrange_To_Call_Me vS13460C1(Test_S13460C1, "S13460C1", ABISELECT(352,192));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11834C1  {
  ::S13396C6 s11834c1f0;
  ::S13396C6 s11834c1f1;
  int s11834c1f2[3];
};
//SIG(1 S11834C1) C1{ FC2{ Fp Fi[4]} FC2 Fi[3]}



static void Test_S11834C1()
{
  {
    init_simple_test("S11834C1");
    S11834C1 lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S11834C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11834C1)");
    check_field_offset(lv, s11834c1f0, 0, "S11834C1.s11834c1f0");
    check_field_offset(lv, s11834c1f1, ABISELECT(24,20), "S11834C1.s11834c1f1");
    check_field_offset(lv, s11834c1f2, ABISELECT(48,40), "S11834C1.s11834c1f2");
  }
}
static Arrange_To_Call_Me vS11834C1(Test_S11834C1, "S11834C1", ABISELECT(64,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12473C1  {
  int s12473c1f0;
  ::S11659C5_nt s12473c1f1;
  char s12473c1f2[1152];
};
//SIG(1 S12473C1) C1{ Fi FC2{ Fi[4]} Fc[1152]}



static void Test_S12473C1()
{
  {
    init_simple_test("S12473C1");
    S12473C1 lv;
    check2(sizeof(lv), 1172, "sizeof(S12473C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12473C1)");
    check_field_offset(lv, s12473c1f0, 0, "S12473C1.s12473c1f0");
    check_field_offset(lv, s12473c1f1, 4, "S12473C1.s12473c1f1");
    check_field_offset(lv, s12473c1f2, 20, "S12473C1.s12473c1f2");
  }
}
static Arrange_To_Call_Me vS12473C1(Test_S12473C1, "S12473C1", 1172);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12507C1  {
  int s12507c1f0;
  ::S9728C7_nt s12507c1f1;
  ::S11659C5_nt s12507c1f2;
};
//SIG(1 S12507C1) C1{ Fi FC2{ FL} FC3{ Fi[4]}}



static void Test_S12507C1()
{
  {
    init_simple_test("S12507C1");
    S12507C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S12507C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12507C1)");
    check_field_offset(lv, s12507c1f0, 0, "S12507C1.s12507c1f0");
    check_field_offset(lv, s12507c1f1, ABISELECT(8,4), "S12507C1.s12507c1f1");
    check_field_offset(lv, s12507c1f2, ABISELECT(16,12), "S12507C1.s12507c1f2");
  }
}
static Arrange_To_Call_Me vS12507C1(Test_S12507C1, "S12507C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12506C1  {
  int s12506c1f0;
  ::S12478C3_nt s12506c1f1;
  ::S11659C5_nt s12506c1f2;
};
//SIG(1 S12506C1) C1{ Fi FC2{ Fl} FC3{ Fi[4]}}



static void Test_S12506C1()
{
  {
    init_simple_test("S12506C1");
    S12506C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S12506C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12506C1)");
    check_field_offset(lv, s12506c1f0, 0, "S12506C1.s12506c1f0");
    check_field_offset(lv, s12506c1f1, ABISELECT(8,4), "S12506C1.s12506c1f1");
    check_field_offset(lv, s12506c1f2, ABISELECT(16,8), "S12506C1.s12506c1f2");
  }
}
static Arrange_To_Call_Me vS12506C1(Test_S12506C1, "S12506C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16671C1  {
  int s16671c1f0;
  ::S11659C5_nt s16671c1f1;
  int s16671c1f2;
  void *s16671c1f3;
  void  mf16671c1(); // _ZN8S16671C19mf16671c1Ev
};
//SIG(1 S16671C1) C1{ m Fi FC2{ Fi[4]} Fi Fp}


void  S16671C1 ::mf16671c1(){}

static void Test_S16671C1()
{
  {
    init_simple_test("S16671C1");
    S16671C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S16671C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16671C1)");
    check_field_offset(lv, s16671c1f0, 0, "S16671C1.s16671c1f0");
    check_field_offset(lv, s16671c1f1, 4, "S16671C1.s16671c1f1");
    check_field_offset(lv, s16671c1f2, 20, "S16671C1.s16671c1f2");
    check_field_offset(lv, s16671c1f3, 24, "S16671C1.s16671c1f3");
  }
}
static Arrange_To_Call_Me vS16671C1(Test_S16671C1, "S16671C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13105C1  {
  int s13105c1f0[2];
  ::S11659C5_nt s13105c1f1[16];
};
//SIG(1 S13105C1) C1{ Fi[2] FC2{ Fi[4]}[16]}



static void Test_S13105C1()
{
  {
    init_simple_test("S13105C1");
    S13105C1 lv;
    check2(sizeof(lv), 264, "sizeof(S13105C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13105C1)");
    check_field_offset(lv, s13105c1f0, 0, "S13105C1.s13105c1f0");
    check_field_offset(lv, s13105c1f1, 8, "S13105C1.s13105c1f1");
  }
}
static Arrange_To_Call_Me vS13105C1(Test_S13105C1, "S13105C1", 264);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13107C1  {
  int s13107c1f0[2];
  ::S11659C5_nt s13107c1f1[8];
};
//SIG(1 S13107C1) C1{ Fi[2] FC2{ Fi[4]}[8]}



static void Test_S13107C1()
{
  {
    init_simple_test("S13107C1");
    S13107C1 lv;
    check2(sizeof(lv), 136, "sizeof(S13107C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13107C1)");
    check_field_offset(lv, s13107c1f0, 0, "S13107C1.s13107c1f0");
    check_field_offset(lv, s13107c1f1, 8, "S13107C1.s13107c1f1");
  }
}
static Arrange_To_Call_Me vS13107C1(Test_S13107C1, "S13107C1", 136);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6301C1  : S16130C17_nt {
  ::S11659C5_nt s6301c1f0;
  virtual  ~S6301C1(); // _ZN7S6301C1D1Ev
  S6301C1(); // tgen
};
//SIG(1 S6301C1) C1{ BC2{ m} vd FC3{ Fi[4]}}


 S6301C1 ::~S6301C1(){ note_dtor("S6301C1", this);}
S6301C1 ::S6301C1(){ note_ctor("S6301C1", this);} // tgen

static void Test_S6301C1()
{
  extern Class_Descriptor cd_S6301C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S6301C1, buf);
    S6301C1 *dp, &lv = *(dp=new (buf) S6301C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S6301C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6301C1)");
    check_base_class_offset(lv, (S16130C17_nt*), 0, "S6301C1");
    check_field_offset(lv, s6301c1f0, ABISELECT(8,4), "S6301C1.s6301c1f0");
    test_class_info(&lv, &cd_S6301C1);
    dp->~S6301C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6301C1(Test_S6301C1, "S6301C1", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S6301C1C1Ev();
extern void _ZN7S6301C1D1Ev();
Name_Map name_map_S6301C1[] = {
  NSPAIR(_ZN7S6301C1C1Ev),
  NSPAIR(_ZN7S6301C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16130C17_nt;
extern VTBL_ENTRY _ZTI12S16130C17_nt[];
static Base_Class bases_S6301C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16130C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6301C1[];
extern void _ZN7S6301C1D1Ev();
extern void _ZN7S6301C1D0Ev();
static  VTBL_ENTRY vtc_S6301C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6301C1[0]),
  (VTBL_ENTRY)&_ZN7S6301C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6301C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S6301C1[];
extern  VTBL_ENTRY _ZTV7S6301C1[];
Class_Descriptor cd_S6301C1 = {  "S6301C1", // class name
  bases_S6301C1, 1,
  &(vtc_S6301C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S6301C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6301C1),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  S14346C1  {
  void *s14346c1f0;
  int s14346c1f1[4];
  ::S11659C5_nt s14346c1f2;
};
//SIG(1 S14346C1) C1{ Fp Fi[4] FC2{ Fi[4]}}



static void Test_S14346C1()
{
  {
    init_simple_test("S14346C1");
    S14346C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S14346C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14346C1)");
    check_field_offset(lv, s14346c1f0, 0, "S14346C1.s14346c1f0");
    check_field_offset(lv, s14346c1f1, ABISELECT(8,4), "S14346C1.s14346c1f1");
    check_field_offset(lv, s14346c1f2, ABISELECT(24,20), "S14346C1.s14346c1f2");
  }
}
static Arrange_To_Call_Me vS14346C1(Test_S14346C1, "S14346C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11645C1  {
  ::S11659C5_nt s11645c1f0[4];
  short s11645c1f1[4];
};
//SIG(1 S11645C1) C1{ FC2{ Fi[4]}[4] Fs[4]}



static void Test_S11645C1()
{
  {
    init_simple_test("S11645C1");
    S11645C1 lv;
    check2(sizeof(lv), 72, "sizeof(S11645C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11645C1)");
    check_field_offset(lv, s11645c1f0, 0, "S11645C1.s11645c1f0");
    check_field_offset(lv, s11645c1f1, 64, "S11645C1.s11645c1f1");
  }
}
static Arrange_To_Call_Me vS11645C1(Test_S11645C1, "S11645C1", 72);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13102C1  {
  int s13102c1f0[2];
  ::S11659C5_nt s13102c1f1;
  void *s13102c1f2;
};
//SIG(1 S13102C1) C1{ Fi[2] FC2{ Fi[4]} Fp}



static void Test_S13102C1()
{
  {
    init_simple_test("S13102C1");
    S13102C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S13102C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13102C1)");
    check_field_offset(lv, s13102c1f0, 0, "S13102C1.s13102c1f0");
    check_field_offset(lv, s13102c1f1, 8, "S13102C1.s13102c1f1");
    check_field_offset(lv, s13102c1f2, 24, "S13102C1.s13102c1f2");
  }
}
static Arrange_To_Call_Me vS13102C1(Test_S13102C1, "S13102C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11638C1  {
  ::S11659C5_nt s11638c1f0;
  ::S11659C5_nt s11638c1f1;
  ::S11659C5_nt s11638c1f2;
};
//SIG(1 S11638C1) C1{ FC2{ Fi[4]} FC2 FC2}



static void Test_S11638C1()
{
  {
    init_simple_test("S11638C1");
    S11638C1 lv;
    check2(sizeof(lv), 48, "sizeof(S11638C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11638C1)");
    check_field_offset(lv, s11638c1f0, 0, "S11638C1.s11638c1f0");
    check_field_offset(lv, s11638c1f1, 16, "S11638C1.s11638c1f1");
    check_field_offset(lv, s11638c1f2, 32, "S11638C1.s11638c1f2");
  }
}
static Arrange_To_Call_Me vS11638C1(Test_S11638C1, "S11638C1", 48);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19920C2  {
  __tsi64 s19920c2f0[2];
  short s19920c2f1;
  virtual void  v1(); // _ZN8S19920C22v1Ev
  ~S19920C2(); // tgen
  S19920C2(); // tgen
};
//SIG(-1 S19920C2) C1{ v1 FL[2] Fs}


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

static void Test_S19920C2()
{
  extern Class_Descriptor cd_S19920C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S19920C2, buf);
    S19920C2 *dp, &lv = *(dp=new (buf) S19920C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S19920C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19920C2)");
    check_field_offset(lv, s19920c2f0, ABISELECT(8,4), "S19920C2.s19920c2f0");
    check_field_offset(lv, s19920c2f1, ABISELECT(24,20), "S19920C2.s19920c2f1");
    test_class_info(&lv, &cd_S19920C2);
    dp->~S19920C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19920C2(Test_S19920C2, "S19920C2", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S19920C2C1Ev();
extern void _ZN8S19920C2D1Ev();
Name_Map name_map_S19920C2[] = {
  NSPAIR(_ZN8S19920C2C1Ev),
  NSPAIR(_ZN8S19920C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19920C2[];
extern void _ZN8S19920C22v1Ev();
static  VTBL_ENTRY vtc_S19920C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19920C2[0]),
  (VTBL_ENTRY)&_ZN8S19920C22v1Ev,
};
extern VTBL_ENTRY _ZTI8S19920C2[];
extern  VTBL_ENTRY _ZTV8S19920C2[];
Class_Descriptor cd_S19920C2 = {  "S19920C2", // class name
  0,0,//no base classes
  &(vtc_S19920C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S19920C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19920C2),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  S19920C1  : virtual S19920C2 {
  ~S19920C1(); // tgen
  S19920C1(); // tgen
};
//SIG(1 S19920C1) C1{ VBC2{ v1 FL[2] Fs}}


S19920C1 ::~S19920C1(){ note_dtor("S19920C1", this);} // tgen
S19920C1 ::S19920C1(){ note_ctor("S19920C1", this);} // tgen

static void Test_S19920C1()
{
  extern Class_Descriptor cd_S19920C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S19920C1, buf);
    S19920C1 *dp, &lv = *(dp=new (buf) S19920C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S19920C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19920C1)");
    check_base_class_offset(lv, (S19920C2*), ABISELECT(8,4), "S19920C1");
    test_class_info(&lv, &cd_S19920C1);
    dp->~S19920C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19920C1(Test_S19920C1, "S19920C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN8S19920C1C1Ev();
extern void _ZN8S19920C1D1Ev();
Name_Map name_map_S19920C1[] = {
  NSPAIR(_ZN8S19920C1C1Ev),
  NSPAIR(_ZN8S19920C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19920C2;
extern VTBL_ENTRY _ZTI8S19920C2[];
extern  VTBL_ENTRY _ZTV8S19920C2[];
static Base_Class bases_S19920C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19920C2,    ABISELECT(8,4), //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 _ZTI8S19920C1[];
extern void _ZN8S19920C22v1Ev();
static  VTBL_ENTRY vtc_S19920C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19920C1[0]),
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19920C1[0]),
  (VTBL_ENTRY)&_ZN8S19920C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19920C1[];
static  VTT_ENTRY vtt_S19920C1[] = {
  {&(_ZTV8S19920C1[3]),  3,7},
  {&(_ZTV8S19920C1[6]),  6,7},
};
extern VTBL_ENTRY _ZTI8S19920C1[];
extern  VTBL_ENTRY _ZTV8S19920C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19920C1[];
Class_Descriptor cd_S19920C1 = {  "S19920C1", // class name
  bases_S19920C1, 1,
  &(vtc_S19920C1[0]), // expected_vtbl_contents
  &(vtt_S19920C1[0]), // expected_vtt_contents
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI8S19920C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19920C1),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19920C1),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  S11642C1  {
  ::S11659C5_nt s11642c1f0;
  void *s11642c1f1[10];
};
//SIG(1 S11642C1) C1{ FC2{ Fi[4]} Fp[10]}



static void Test_S11642C1()
{
  {
    init_simple_test("S11642C1");
    S11642C1 lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S11642C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11642C1)");
    check_field_offset(lv, s11642c1f0, 0, "S11642C1.s11642c1f0");
    check_field_offset(lv, s11642c1f1, 16, "S11642C1.s11642c1f1");
  }
}
static Arrange_To_Call_Me vS11642C1(Test_S11642C1, "S11642C1", ABISELECT(96,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14182C1  {
  void *s14182c1f0;
  int s14182c1f1;
  ::S11659C5_nt s14182c1f2;
};
//SIG(1 S14182C1) C1{ Fp Fi FC2{ Fi[4]}}



static void Test_S14182C1()
{
  {
    init_simple_test("S14182C1");
    S14182C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S14182C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14182C1)");
    check_field_offset(lv, s14182c1f0, 0, "S14182C1.s14182c1f0");
    check_field_offset(lv, s14182c1f1, ABISELECT(8,4), "S14182C1.s14182c1f1");
    check_field_offset(lv, s14182c1f2, ABISELECT(12,8), "S14182C1.s14182c1f2");
  }
}
static Arrange_To_Call_Me vS14182C1(Test_S14182C1, "S14182C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12878C1  {
  int s12878c1f0;
  ::S11764C7 s12878c1f1;
  int s12878c1f2;
};
//SIG(1 S12878C1) C1{ Fi FU2{ Fl Fp} Fi}



static void Test_S12878C1()
{
  {
    init_simple_test("S12878C1");
    S12878C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S12878C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12878C1)");
    check_field_offset(lv, s12878c1f0, 0, "S12878C1.s12878c1f0");
    check_field_offset(lv, s12878c1f1, ABISELECT(8,4), "S12878C1.s12878c1f1");
    check_field_offset(lv, s12878c1f2, ABISELECT(16,8), "S12878C1.s12878c1f2");
  }
}
static Arrange_To_Call_Me vS12878C1(Test_S12878C1, "S12878C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11641C1  {
  ::S11659C5_nt s11641c1f0;
  void *s11641c1f1;
  int s11641c1f2;
};
//SIG(1 S11641C1) C1{ FC2{ Fi[4]} Fp Fi}



static void Test_S11641C1()
{
  {
    init_simple_test("S11641C1");
    S11641C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S11641C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11641C1)");
    check_field_offset(lv, s11641c1f0, 0, "S11641C1.s11641c1f0");
    check_field_offset(lv, s11641c1f1, 16, "S11641C1.s11641c1f1");
    check_field_offset(lv, s11641c1f2, ABISELECT(24,20), "S11641C1.s11641c1f2");
  }
}
static Arrange_To_Call_Me vS11641C1(Test_S11641C1, "S11641C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19654C2_nt  {
  char s19654c2f0;
  void  mf19654c2(); // _ZN11S19654C2_nt9mf19654c2Ev
};
//SIG(-1 S19654C2_nt) C1{ m Fc}


void  S19654C2_nt ::mf19654c2(){}

//skip512 S19654C2_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S19654C2_nt[];
VTBL_ENTRY *P__ZTI11S19654C2_nt = _ZTI11S19654C2_nt; 
Class_Descriptor cd_S19654C2_nt = {  "S19654C2_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S19654C2_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  S19654C1  : virtual S19654C2_nt {
  short  :0;
  ~S19654C1(); // tgen
  S19654C1(); // tgen
};
//SIG(1 S19654C1) C1{ VBC2{ m Fc} Fs:0}


S19654C1 ::~S19654C1(){ note_dtor("S19654C1", this);} // tgen
S19654C1 ::S19654C1(){ note_ctor("S19654C1", this);} // tgen

static void Test_S19654C1()
{
  extern Class_Descriptor cd_S19654C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19654C1, buf);
    S19654C1 *dp, &lv = *(dp=new (buf) S19654C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19654C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19654C1)");
    check_base_class_offset(lv, (S19654C2_nt*), ABISELECT(8,4), "S19654C1");
    test_class_info(&lv, &cd_S19654C1);
    dp->~S19654C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19654C1(Test_S19654C1, "S19654C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19654C1C1Ev();
extern void _ZN8S19654C1D1Ev();
Name_Map name_map_S19654C1[] = {
  NSPAIR(_ZN8S19654C1C1Ev),
  NSPAIR(_ZN8S19654C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19654C2_nt;
extern VTBL_ENTRY _ZTI11S19654C2_nt[];
static Base_Class bases_S19654C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19654C2_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 _ZTI8S19654C1[];
static  VTBL_ENTRY vtc_S19654C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19654C1[0]),
};
extern VTBL_ENTRY _ZTV8S19654C1[];
static  VTT_ENTRY vtt_S19654C1[] = {
  {&(_ZTV8S19654C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19654C1[];
extern  VTBL_ENTRY _ZTV8S19654C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19654C1[];
Class_Descriptor cd_S19654C1 = {  "S19654C1", // class name
  bases_S19654C1, 1,
  &(vtc_S19654C1[0]), // expected_vtbl_contents
  &(vtt_S19654C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19654C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19654C1),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19654C1),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  S6372C2  {
  void *s6372c2f0;
  int s6372c2f1;
  virtual void  v1(); // _ZN7S6372C22v1Ev
  ~S6372C2(); // tgen
  S6372C2(); // tgen
};
//SIG(-1 S6372C2) C1{ v1 Fp Fi}


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

static void Test_S6372C2()
{
  extern Class_Descriptor cd_S6372C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6372C2, buf);
    S6372C2 *dp, &lv = *(dp=new (buf) S6372C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6372C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6372C2)");
    check_field_offset(lv, s6372c2f0, ABISELECT(8,4), "S6372C2.s6372c2f0");
    check_field_offset(lv, s6372c2f1, ABISELECT(16,8), "S6372C2.s6372c2f1");
    test_class_info(&lv, &cd_S6372C2);
    dp->~S6372C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6372C2(Test_S6372C2, "S6372C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6372C2C1Ev();
extern void _ZN7S6372C2D1Ev();
Name_Map name_map_S6372C2[] = {
  NSPAIR(_ZN7S6372C2C1Ev),
  NSPAIR(_ZN7S6372C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6372C2[];
extern void _ZN7S6372C22v1Ev();
static  VTBL_ENTRY vtc_S6372C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6372C2[0]),
  (VTBL_ENTRY)&_ZN7S6372C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6372C2[];
extern  VTBL_ENTRY _ZTV7S6372C2[];
Class_Descriptor cd_S6372C2 = {  "S6372C2", // class name
  0,0,//no base classes
  &(vtc_S6372C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6372C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6372C2),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  S6372C1  : S6372C2 {
  ~S6372C1(); // tgen
  S6372C1(); // tgen
};
//SIG(1 S6372C1) C1{ BC2{ v1 Fp Fi}}


S6372C1 ::~S6372C1(){ note_dtor("S6372C1", this);} // tgen
S6372C1 ::S6372C1(){ note_ctor("S6372C1", this);} // tgen

static void Test_S6372C1()
{
  extern Class_Descriptor cd_S6372C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6372C1, buf);
    S6372C1 *dp, &lv = *(dp=new (buf) S6372C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6372C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6372C1)");
    check_base_class_offset(lv, (S6372C2*), 0, "S6372C1");
    test_class_info(&lv, &cd_S6372C1);
    dp->~S6372C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6372C1(Test_S6372C1, "S6372C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6372C1C1Ev();
extern void _ZN7S6372C1D1Ev();
Name_Map name_map_S6372C1[] = {
  NSPAIR(_ZN7S6372C1C1Ev),
  NSPAIR(_ZN7S6372C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6372C2;
extern VTBL_ENTRY _ZTI7S6372C2[];
extern  VTBL_ENTRY _ZTV7S6372C2[];
static Base_Class bases_S6372C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6372C2,    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 _ZTI7S6372C1[];
extern void _ZN7S6372C22v1Ev();
static  VTBL_ENTRY vtc_S6372C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6372C1[0]),
  (VTBL_ENTRY)&_ZN7S6372C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6372C1[];
extern  VTBL_ENTRY _ZTV7S6372C1[];
Class_Descriptor cd_S6372C1 = {  "S6372C1", // class name
  bases_S6372C1, 1,
  &(vtc_S6372C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6372C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6372C1),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11646C1  {
  ::S11659C5_nt s11646c1f0[4];
};
//SIG(1 S11646C1) C1{ FC2{ Fi[4]}[4]}



static void Test_S11646C1()
{
  {
    init_simple_test("S11646C1");
    S11646C1 lv;
    check2(sizeof(lv), 64, "sizeof(S11646C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11646C1)");
    check_field_offset(lv, s11646c1f0, 0, "S11646C1.s11646c1f0");
  }
}
static Arrange_To_Call_Me vS11646C1(Test_S11646C1, "S11646C1", 64);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10549C1  {
  char s10549c1f0[10];
  int s10549c1f1[3];
};
//SIG(1 S10549C1) C1{ Fc[10] Fi[3]}



static void Test_S10549C1()
{
  {
    init_simple_test("S10549C1");
    S10549C1 lv;
    check2(sizeof(lv), 24, "sizeof(S10549C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10549C1)");
    check_field_offset(lv, s10549c1f0, 0, "S10549C1.s10549c1f0");
    check_field_offset(lv, s10549c1f1, 12, "S10549C1.s10549c1f1");
  }
}
static Arrange_To_Call_Me vS10549C1(Test_S10549C1, "S10549C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13435C1  {
  int s13435c1f0[4];
  char s13435c1f1[16];
};
//SIG(1 S13435C1) C1{ Fi[4] Fc[16]}



static void Test_S13435C1()
{
  {
    init_simple_test("S13435C1");
    S13435C1 lv;
    check2(sizeof(lv), 32, "sizeof(S13435C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13435C1)");
    check_field_offset(lv, s13435c1f0, 0, "S13435C1.s13435c1f0");
    check_field_offset(lv, s13435c1f1, 16, "S13435C1.s13435c1f1");
  }
}
static Arrange_To_Call_Me vS13435C1(Test_S13435C1, "S13435C1", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11017C1  {
  char s11017c1f0[8];
  int s11017c1f1[7];
};
//SIG(1 S11017C1) C1{ Fc[8] Fi[7]}



static void Test_S11017C1()
{
  {
    init_simple_test("S11017C1");
    S11017C1 lv;
    check2(sizeof(lv), 36, "sizeof(S11017C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11017C1)");
    check_field_offset(lv, s11017c1f0, 0, "S11017C1.s11017c1f0");
    check_field_offset(lv, s11017c1f1, 8, "S11017C1.s11017c1f1");
  }
}
static Arrange_To_Call_Me vS11017C1(Test_S11017C1, "S11017C1", 36);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10498C1  {
  char s10498c1f0;
  void *s10498c1f1;
  int s10498c1f2;
  void *s10498c1f3;
};
//SIG(1 S10498C1) C1{ Fc Fp Fi Fp}



static void Test_S10498C1()
{
  {
    init_simple_test("S10498C1");
    S10498C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S10498C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10498C1)");
    check_field_offset(lv, s10498c1f0, 0, "S10498C1.s10498c1f0");
    check_field_offset(lv, s10498c1f1, ABISELECT(8,4), "S10498C1.s10498c1f1");
    check_field_offset(lv, s10498c1f2, ABISELECT(16,8), "S10498C1.s10498c1f2");
    check_field_offset(lv, s10498c1f3, ABISELECT(24,12), "S10498C1.s10498c1f3");
  }
}
static Arrange_To_Call_Me vS10498C1(Test_S10498C1, "S10498C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14912C1  {
  short s14912c1f0[2];
  void *s14912c1f1[6];
};
//SIG(1 S14912C1) C1{ Fs[2] Fp[6]}



static void Test_S14912C1()
{
  {
    init_simple_test("S14912C1");
    S14912C1 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S14912C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14912C1)");
    check_field_offset(lv, s14912c1f0, 0, "S14912C1.s14912c1f0");
    check_field_offset(lv, s14912c1f1, ABISELECT(8,4), "S14912C1.s14912c1f1");
  }
}
static Arrange_To_Call_Me vS14912C1(Test_S14912C1, "S14912C1", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16862C1  {
  int s16862c1f0;
  long s16862c1f1;
  __tsi64 s16862c1f2;
  void  mf16862c1(); // _ZN8S16862C19mf16862c1Ev
};
//SIG(1 S16862C1) C1{ m Fi Fl FL}


void  S16862C1 ::mf16862c1(){}

static void Test_S16862C1()
{
  {
    init_simple_test("S16862C1");
    S16862C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S16862C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16862C1)");
    check_field_offset(lv, s16862c1f0, 0, "S16862C1.s16862c1f0");
    check_field_offset(lv, s16862c1f1, ABISELECT(8,4), "S16862C1.s16862c1f1");
    check_field_offset(lv, s16862c1f2, ABISELECT(16,8), "S16862C1.s16862c1f2");
  }
}
static Arrange_To_Call_Me vS16862C1(Test_S16862C1, "S16862C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13657C1  {
  __tsi64 s13657c1f0;
  char s13657c1f1[32];
};
//SIG(1 S13657C1) C1{ FL Fc[32]}



static void Test_S13657C1()
{
  {
    init_simple_test("S13657C1");
    S13657C1 lv;
    check2(sizeof(lv), 40, "sizeof(S13657C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13657C1)");
    check_field_offset(lv, s13657c1f0, 0, "S13657C1.s13657c1f0");
    check_field_offset(lv, s13657c1f1, 8, "S13657C1.s13657c1f1");
  }
}
static Arrange_To_Call_Me vS13657C1(Test_S13657C1, "S13657C1", 40);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14731C1  {
  void *s14731c1f0[7];
  int s14731c1f1;
};
//SIG(1 S14731C1) C1{ Fp[7] Fi}



static void Test_S14731C1()
{
  {
    init_simple_test("S14731C1");
    S14731C1 lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S14731C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14731C1)");
    check_field_offset(lv, s14731c1f0, 0, "S14731C1.s14731c1f0");
    check_field_offset(lv, s14731c1f1, ABISELECT(56,28), "S14731C1.s14731c1f1");
  }
}
static Arrange_To_Call_Me vS14731C1(Test_S14731C1, "S14731C1", ABISELECT(64,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10513C1  {
  char s10513c1f0;
  short s10513c1f1[9];
};
//SIG(1 S10513C1) C1{ Fc Fs[9]}



static void Test_S10513C1()
{
  {
    init_simple_test("S10513C1");
    S10513C1 lv;
    check2(sizeof(lv), 20, "sizeof(S10513C1)");
    check2(__alignof__(lv), 2, "__alignof__(S10513C1)");
    check_field_offset(lv, s10513c1f0, 0, "S10513C1.s10513c1f0");
    check_field_offset(lv, s10513c1f1, 2, "S10513C1.s10513c1f1");
  }
}
static Arrange_To_Call_Me vS10513C1(Test_S10513C1, "S10513C1", 20);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14688C1  {
  void *s14688c1f0[40];
};
//SIG(1 S14688C1) C1{ Fp[40]}



static void Test_S14688C1()
{
  {
    init_simple_test("S14688C1");
    S14688C1 lv;
    check2(sizeof(lv), ABISELECT(320,160), "sizeof(S14688C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14688C1)");
    check_field_offset(lv, s14688c1f0, 0, "S14688C1.s14688c1f0");
  }
}
static Arrange_To_Call_Me vS14688C1(Test_S14688C1, "S14688C1", ABISELECT(320,160));

#else // __cplusplus

#endif // __cplusplus

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

